diff --git a/src/hooks.ts b/src/hooks.ts index bdd1f9234..d6c6eca6d 100644 --- a/src/hooks.ts +++ b/src/hooks.ts @@ -17,8 +17,6 @@ export const handle = handleSession( let response; try { if (event.locals.cookies) { - let gitlabToken = event.locals.cookies.gitlabToken || null; - let ghToken = event.locals.cookies.ghToken || null; if (event.locals.cookies['kit.session']) { const { permission, teamId, userId } = await getUserDetails(event, false); const newSession = { @@ -26,9 +24,7 @@ export const handle = handleSession( teamId, permission, isAdmin: permission === 'admin' || permission === 'owner', - expires: event.locals.session.data.expires, - gitlabToken, - ghToken + expires: event.locals.session.data.expires }; if (JSON.stringify(event.locals.session.data) !== JSON.stringify(newSession)) { diff --git a/src/lib/components/common.ts b/src/lib/components/common.ts index 3ba845fb0..fd887526a 100644 --- a/src/lib/components/common.ts +++ b/src/lib/components/common.ts @@ -9,22 +9,6 @@ export const dateOptions: DateTimeFormatOptions = { hour12: false }; -export async function getGithubToken({ apiUrl, application, githubToken }): Promise { - const response = await fetch( - `${apiUrl}/app/installations/${application.gitSource.githubApp.installationId}/access_tokens`, - { - method: 'POST', - headers: { - Authorization: `Bearer ${githubToken}` - } - } - ); - if (!response.ok) { - throw new Error('Git Source not configured.'); - } - const data = await response.json(); - return data.token; -} export const staticDeployments = ['react', 'vuejs', 'static', 'svelte', 'gatsby', 'php']; export const notNodeDeployments = ['php', 'docker', 'rust']; diff --git a/src/lib/store.ts b/src/lib/store.ts new file mode 100644 index 000000000..d8d1be6ce --- /dev/null +++ b/src/lib/store.ts @@ -0,0 +1,6 @@ +import { writable } from 'svelte/store'; + +export const gitTokens = writable({ + githubToken: null, + gitlabToken: null +}); diff --git a/src/routes/applications/[id]/__layout.svelte b/src/routes/applications/[id]/__layout.svelte index d09831948..e25e63cc2 100644 --- a/src/routes/applications/[id]/__layout.svelte +++ b/src/routes/applications/[id]/__layout.svelte @@ -17,13 +17,20 @@ const endpoint = `/applications/${params.id}.json`; const res = await fetch(endpoint); if (res.ok) { - const { application, isRunning, appId } = await res.json(); + let { application, isRunning, appId, githubToken, gitlabToken } = await res.json(); if (!application || Object.entries(application).length === 0) { return { status: 302, redirect: '/applications' }; } + if (application.gitSource?.githubAppId && !githubToken) { + const response = await fetch(`/applications/${params.id}/configuration/githubToken.json`); + if (response.ok) { + const { token } = await response.json(); + githubToken = token; + } + } const configurationPhase = checkConfiguration(application); if ( configurationPhase && @@ -38,7 +45,9 @@ return { props: { application, - isRunning + isRunning, + githubToken, + gitlabToken }, stuff: { isRunning, @@ -58,12 +67,18 @@ diff --git a/src/routes/applications/[id]/index.json.ts b/src/routes/applications/[id]/index.json.ts index daa3f8d75..3b4405706 100644 --- a/src/routes/applications/[id]/index.json.ts +++ b/src/routes/applications/[id]/index.json.ts @@ -1,54 +1,37 @@ -import { getTeam, getUserDetails } from '$lib/common'; -import { getGithubToken } from '$lib/components/common'; +import { getUserDetails } from '$lib/common'; import * as db from '$lib/database'; import { ErrorHandler } from '$lib/database'; import { checkContainer } from '$lib/haproxy'; import type { RequestHandler } from '@sveltejs/kit'; import jsonwebtoken from 'jsonwebtoken'; +import { get as getRequest } from '$lib/api'; export const get: RequestHandler = async (event) => { const { teamId, status, body } = await getUserDetails(event); if (status === 401) return { status, body }; - const appId = process.env['COOLIFY_APP_ID']; - let githubToken = null; - let ghToken = null; - let isRunning = false; const { id } = event.params; + const appId = process.env['COOLIFY_APP_ID']; + let isRunning = false; + let githubToken = event.locals.cookies?.githubToken || null; + let gitlabToken = event.locals.cookies?.gitlabToken || null; try { const application = await db.getApplication({ id, teamId }); - const { gitSource } = application; - if (gitSource?.type === 'github' && gitSource?.githubApp) { - if (!event.locals.session.data.ghToken) { - const payload = { - iat: Math.round(new Date().getTime() / 1000), - exp: Math.round(new Date().getTime() / 1000 + 600), - iss: gitSource.githubApp.appId - }; - githubToken = jsonwebtoken.sign(payload, gitSource.githubApp.privateKey, { - algorithm: 'RS256' - }); - ghToken = await getGithubToken({ apiUrl: gitSource.apiUrl, application, githubToken }); - } - } if (application.destinationDockerId) { isRunning = await checkContainer(application.destinationDocker.engine, id); } - const payload = { + return { + status: 200, body: { isRunning, application, - appId + appId, + githubToken, + gitlabToken }, headers: {} }; - if (ghToken) { - payload.headers = { - 'set-cookie': [`ghToken=${ghToken}; HttpOnly; Path=/; Max-Age=15778800;`] - }; - } - return payload; } catch (error) { console.log(error); return ErrorHandler(error);