5 Commits

Author SHA1 Message Date
ef51513fe1 remove readme todos
All checks were successful
ci/woodpecker/push/build-image Pipeline was successful
2025-05-02 15:56:51 -07:00
94514ec965 auth: refactor common oauth provider logic, add options to disable providers and require invites 2025-05-02 15:53:21 -07:00
f9a27cbbb7 WIP: auth: refactor to page routes instead of api routes 2025-05-02 13:57:17 -07:00
69150caab3 WIP: temp 2025-05-02 13:57:16 -07:00
2ed0b70780 WIP: auth: improve handling of invite tokens 2025-05-02 13:57:14 -07:00

View File

@@ -3,24 +3,24 @@ import { oauthProviders } from '$lib/server/oauth';
import { is } from 'typia';
import { type AuthProvider, enabledAuthProviders } from '$lib/auth';
export async function GET({ params: { provider }, url, cookies }) {
export async function GET(event) {
const { provider } = event.params;
if (!is<AuthProvider>(provider) || !enabledAuthProviders[provider]) {
return new Response(null, { status: 404 });
}
const oauthProvider = oauthProviders[provider];
const inviteToken = url.searchParams.get('invite') ?? '';
const state = generateState();
const codeVerifier = generateCodeVerifier();
const authUrl = oauthProvider.createAuthorizationURL(state + inviteToken, codeVerifier);
const url = oauthProvider.createAuthorizationURL(state, codeVerifier);
cookies.set(`${provider}_oauth_state`, state, {
event.cookies.set(`${provider}_oauth_state`, state, {
path: '/',
httpOnly: true,
maxAge: 60 * 10, // 10 minutes
sameSite: 'lax',
});
cookies.set(`${provider}_code_verifier`, codeVerifier, {
event.cookies.set(`${provider}_code_verifier`, codeVerifier, {
path: '/',
httpOnly: true,
maxAge: 60 * 10, // 10 minutes
@@ -30,7 +30,7 @@ export async function GET({ params: { provider }, url, cookies }) {
return new Response(null, {
status: 302,
headers: {
Location: authUrl.toString(),
Location: url.toString(),
},
});
}