diff --git a/README.md b/README.md index 1938d1f..12e39a3 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ Miscellanous tasks: - [x] Discord role syncing - [x] Login/logout - [x] Register - - [ ] Discourse SSO + - [x] Discourse SSO - [ ] HCaptcha - [ ] RSS feed - [ ] Stripe checkout diff --git a/server/routes/account/sso/discourse.get.ts b/server/routes/account/sso/discourse.get.ts index 8391f18..76ef392 100644 --- a/server/routes/account/sso/discourse.get.ts +++ b/server/routes/account/sso/discourse.get.ts @@ -1,4 +1,5 @@ import { createHmac } from 'node:crypto'; +import { ClientError } from 'nice-grpc'; import type { GetUserDataResponse } from '@pretendonetwork/grpc/api/get_user_data_rpc'; function getDicourseSignature(secret: string, payload: string) { @@ -33,17 +34,24 @@ export default defineEventHandler(async (event) => { let userData: GetUserDataResponse | null = null; if (accessTokenCookie) { const grpc = useApiGrpcWithToken(event, accessTokenCookie); - userData = await grpc.getUserData({}); + try { + userData = await grpc.getUserData({}); + } catch (err: unknown) { + const isTokenError = err instanceof ClientError && err.details === 'UNAUTHENTICATED: Missing or invalid authentication token'; + if (!isTokenError) { + throw err; + } + } } if (!userData) { const redirectUrlParams = new URLSearchParams(); redirectUrlParams.append('sso', query.sso.toString()); redirectUrlParams.append('sig', query.sig.toString()); - const redirect = `/sso/discourse?${redirectUrlParams}`; + const redirect = `/account/sso/discourse?${redirectUrlParams}`; const urlParams = new URLSearchParams(); urlParams.append('redirect', redirect); - return sendRedirect(event, `/login?${urlParams}`); // Not logged in, redirect to login + return sendRedirect(event, `/account/login?${urlParams}`); // Not logged in, redirect to login } // Build final payload for discourse diff --git a/server/utils/getGithubProgress.ts b/server/utils/getGithubProgress.ts index 144c019..2cabee3 100644 --- a/server/utils/getGithubProgress.ts +++ b/server/utils/getGithubProgress.ts @@ -68,11 +68,9 @@ query getProjectsV2($orgName: String!, $cursor: String) { async function getGitHubProjectsWithItemsV2(octokit: Octokit) { const projects: Array<{ id: string; title: string; url: string | null; items: Array<{ title: string; column: string }> }> = []; - console.log('Get projects'); const data = await octokit.graphql.paginate(getProjectsWithItemsV2GQL, { orgName: orgName }); - console.log('Finished get projects'); for (const node of data.organization.projectsV2.nodes) { projects.push({ diff --git a/src/pages/account/login.vue b/src/pages/account/login.vue index 3c3895f..4a38a57 100644 --- a/src/pages/account/login.vue +++ b/src/pages/account/login.vue @@ -22,7 +22,7 @@ async function loginSubmission() { }); if (typeof redirect.value === 'string') { - await navigateTo(redirect.value); + await navigateTo(redirect.value, { external: true }); } else { await navigateTo('/account'); } diff --git a/src/pages/account/register.vue b/src/pages/account/register.vue index 80ec30e..a625833 100644 --- a/src/pages/account/register.vue +++ b/src/pages/account/register.vue @@ -32,7 +32,7 @@ async function registerSubmission() { }); if (typeof redirect.value === 'string') { - await navigateTo(redirect.value); + await navigateTo(redirect.value, { external: true }); } else { await navigateTo('/account'); }