mirror of
https://github.com/PretendoNetwork/website.git
synced 2026-08-23 00:57:21 -05:00
fix: fix no-auth redirects for discourse SSO
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user