fix: Always use IP address for webhooks

This commit is contained in:
Andras Bacsai 2022-04-29 23:02:58 +02:00
parent 8e42203b89
commit 880865f1f2
6 changed files with 39 additions and 16 deletions

View File

@ -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://', '');
}

View File

@ -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 +

View File

@ -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,

View File

@ -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 +

View File

@ -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();
});

View File

@ -30,21 +30,21 @@
<script>
import { dev } from '$app/env';
import { getDomain, dashify } from '$lib/components/common';
import { getDomain, dashify, getIP } from '$lib/components/common';
import { t } from '$lib/translations';
export let source;
export let settings;
onMount(() => {
onMount(async () => {
const { organization, id, htmlUrl } = source;
const { fqdn } = settings;
const host = dev
? 'http://localhost:3000'
: fqdn
? fqdn
: `http://${window.location.host}` || '';
const ip = await getIP();
let host = `http://${ip}`;
if (fqdn && fqdn.startsWith('https')) {
host = `https://${ip}`;
}
console.log(ip, host);
const domain = getDomain(fqdn);
let url = 'settings/apps/new';
if (organization) url = `organizations/${organization}/settings/apps/new`;
const name = dashify(domain) || 'app';