From 880865f1f2d46ae64b903aa8778de1bf8bcd8248 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Fri, 29 Apr 2022 23:02:58 +0200 Subject: [PATCH] fix: Always use IP address for webhooks --- src/lib/components/common.ts | 14 ++++++++++++++ .../configuration/_GithubRepositories.svelte | 4 +++- .../configuration/_GitlabRepositories.svelte | 13 ++++++++----- .../[id]/configuration/buildpack.svelte | 4 +++- src/routes/sources/[id]/_Gitlab.svelte | 4 +++- src/routes/sources/[id]/newGithubApp.svelte | 16 ++++++++-------- 6 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/lib/components/common.ts b/src/lib/components/common.ts index d6ff2f8ea..78c2d69b7 100644 --- a/src/lib/components/common.ts +++ b/src/lib/components/common.ts @@ -1,3 +1,5 @@ +import { dev } from '$app/env'; + export const asyncSleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay)); export const dateOptions: DateTimeFormatOptions = { year: 'numeric', @@ -21,6 +23,18 @@ export const staticDeployments = [ ]; export const notNodeDeployments = ['php', 'docker', 'rust', 'python', 'deno', 'laravel']; +export async function getIP() { + if (dev) { + return 'localhost:3000'; + } + const response = await fetch(`https://api.ipify.org?format=json`); + if (response.ok) { + const json = await response.json(); + return `http://${json.ip}`; + } + return window.location.origin; +} + export function getDomain(domain) { return domain?.replace('https://', '').replace('http://', ''); } diff --git a/src/routes/applications/[id]/configuration/_GithubRepositories.svelte b/src/routes/applications/[id]/configuration/_GithubRepositories.svelte index 8b5b932cd..d59ae3a65 100644 --- a/src/routes/applications/[id]/configuration/_GithubRepositories.svelte +++ b/src/routes/applications/[id]/configuration/_GithubRepositories.svelte @@ -8,6 +8,7 @@ import { onMount } from 'svelte'; import { gitTokens } from '$lib/store'; import { t } from '$lib/translations'; + import { getIP } from '$lib/components/common'; const { id } = $page.params; const from = $page.url.searchParams.get('from'); @@ -113,6 +114,7 @@ } onMount(async () => { + const ip = await getIP(); try { if (!$gitTokens.githubToken) { const { token } = await get(`/applications/${id}/configuration/githubToken.json`); @@ -131,7 +133,7 @@ const left = screen.width / 2 - 1020 / 2; const top = screen.height / 2 - 618 / 2; const newWindow = open( - `${htmlUrl}/oauth/authorize?client_id=${application.gitSource.gitlabApp.appId}&redirect_uri=${window.location.origin}/webhooks/gitlab&response_type=code&scope=api+email+read_repository&state=${$page.params.id}`, + `${htmlUrl}/oauth/authorize?client_id=${application.gitSource.gitlabApp.appId}&redirect_uri=${ip}/webhooks/gitlab&response_type=code&scope=api+email+read_repository&state=${$page.params.id}`, 'GitLab', 'resizable=1, scrollbars=1, fullscreen=0, height=618, width=1020,top=' + top + diff --git a/src/routes/applications/[id]/configuration/_GitlabRepositories.svelte b/src/routes/applications/[id]/configuration/_GitlabRepositories.svelte index a836b3507..5159c0945 100644 --- a/src/routes/applications/[id]/configuration/_GitlabRepositories.svelte +++ b/src/routes/applications/[id]/configuration/_GitlabRepositories.svelte @@ -10,6 +10,7 @@ import { del, get, post, put } from '$lib/api'; import { gitTokens } from '$lib/store'; import { t } from '$lib/translations'; + import { getIP } from '$lib/components/common'; const { id } = $page.params; const from = $page.url.searchParams.get('from'); @@ -40,7 +41,7 @@ }; onMount(async () => { if (!$gitTokens.gitlabToken) { - getGitlabToken(); + await getGitlabToken(); } else { loading.base = true; try { @@ -49,7 +50,7 @@ }); username = user.username; } catch (error) { - return getGitlabToken(); + return await getGitlabToken(); } try { groups = await get(`${apiUrl}/v4/groups?per_page=5000`, { @@ -64,11 +65,12 @@ } }); - function getGitlabToken() { + async function getGitlabToken() { + const ip = await getIP(); const left = screen.width / 2 - 1020 / 2; const top = screen.height / 2 - 618 / 2; const newWindow = open( - `${htmlUrl}/oauth/authorize?client_id=${application.gitSource.gitlabApp.appId}&redirect_uri=${window.location.origin}/webhooks/gitlab&response_type=code&scope=api+email+read_repository&state=${$page.params.id}`, + `${htmlUrl}/oauth/authorize?client_id=${application.gitSource.gitlabApp.appId}&redirect_uri=${ip}/webhooks/gitlab&response_type=code&scope=api+email+read_repository&state=${$page.params.id}`, 'GitLab', 'resizable=1, scrollbars=1, fullscreen=0, height=618, width=1020,top=' + top + @@ -163,9 +165,10 @@ } } async function setWebhook(url, webhookToken) { + const ip = await getIP(); const host = dev ? 'https://webhook.site/0e5beb2c-4e9b-40e2-a89e-32295e570c21' - : `${window.location.origin}/webhooks/gitlab/events`; + : `${ip}/webhooks/gitlab/events`; try { await post( url, diff --git a/src/routes/applications/[id]/configuration/buildpack.svelte b/src/routes/applications/[id]/configuration/buildpack.svelte index 7fe2c95ad..cb3027854 100644 --- a/src/routes/applications/[id]/configuration/buildpack.svelte +++ b/src/routes/applications/[id]/configuration/buildpack.svelte @@ -37,6 +37,7 @@ import { gitTokens } from '$lib/store'; import { browser } from '$app/env'; import { t } from '$lib/translations'; + import { getIP } from '$lib/components/common'; const { id } = $page.params; @@ -174,11 +175,12 @@ error.message === '401 Unauthorized' ) { if (application.gitSource.gitlabAppId) { + const ip = await getIP(); let htmlUrl = application.gitSource.htmlUrl; const left = screen.width / 2 - 1020 / 2; const top = screen.height / 2 - 618 / 2; const newWindow = open( - `${htmlUrl}/oauth/authorize?client_id=${application.gitSource.gitlabApp.appId}&redirect_uri=${window.location.origin}/webhooks/gitlab&response_type=code&scope=api+email+read_repository&state=${$page.params.id}`, + `${htmlUrl}/oauth/authorize?client_id=${application.gitSource.gitlabApp.appId}&redirect_uri=${ip}/webhooks/gitlab&response_type=code&scope=api+email+read_repository&state=${$page.params.id}`, 'GitLab', 'resizable=1, scrollbars=1, fullscreen=0, height=618, width=1020,top=' + top + diff --git a/src/routes/sources/[id]/_Gitlab.svelte b/src/routes/sources/[id]/_Gitlab.svelte index be1df4909..1030e76d8 100644 --- a/src/routes/sources/[id]/_Gitlab.svelte +++ b/src/routes/sources/[id]/_Gitlab.svelte @@ -11,6 +11,7 @@ import { toast } from '@zerodevx/svelte-toast'; import { t } from '$lib/translations'; + import { getIP } from '$lib/components/common'; const { id } = $page.params; let url = browser ? (settings.fqdn ? settings.fqdn : window.location.origin) : ''; @@ -26,7 +27,8 @@ appSecret: null }; } - onMount(() => { + onMount(async () => { + url = await getIP(); oauthIdEl && oauthIdEl.focus(); }); diff --git a/src/routes/sources/[id]/newGithubApp.svelte b/src/routes/sources/[id]/newGithubApp.svelte index e3215b380..426208b58 100644 --- a/src/routes/sources/[id]/newGithubApp.svelte +++ b/src/routes/sources/[id]/newGithubApp.svelte @@ -30,21 +30,21 @@