1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-27 08:49:36 +02:00
AdventureLog/frontend/src/routes/+page.server.ts

86 lines
2.4 KiB
TypeScript
Raw Normal View History

2024-07-08 11:44:39 -04:00
const PUBLIC_SERVER_URL = process.env['PUBLIC_SERVER_URL'];
import { redirect, type Actions } from '@sveltejs/kit';
2024-11-26 17:39:10 -05:00
import { themes } from '$lib';
import { fetchCSRFToken } from '$lib/index.server';
import type { PageServerLoad } from './$types';
2024-07-08 11:44:39 -04:00
const serverEndpoint = PUBLIC_SERVER_URL || 'http://localhost:8000';
export const load = (async (event) => {
if (event.locals.user) {
return redirect(302, '/dashboard');
}
}) satisfies PageServerLoad;
2024-07-08 11:44:39 -04:00
export const actions: Actions = {
setTheme: async ({ url, cookies }) => {
const theme = url.searchParams.get('theme');
// change the theme only if it is one of the allowed themes
2024-11-26 17:39:10 -05:00
if (theme && themes.find((t) => t.name === theme)) {
2024-07-08 11:44:39 -04:00
cookies.set('colortheme', theme, {
path: '/',
maxAge: 60 * 60 * 24 * 365, // 1 year
sameSite: 'lax'
2024-07-08 11:44:39 -04:00
});
}
},
logout: async (event) => {
let sessionId = event.cookies.get('sessionid');
let csrfToken = await fetchCSRFToken();
2024-07-08 11:44:39 -04:00
if (!sessionId) {
2024-07-08 11:44:39 -04:00
return;
}
const res = await fetch(`${serverEndpoint}/_allauth/browser/v1/auth/session`, {
method: 'DELETE',
2024-07-08 11:44:39 -04:00
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrfToken, // Ensure CSRF token is in header
Referer: event.url.origin, // Include Referer header
Cookie: `sessionid=${sessionId}; csrftoken=${csrfToken}`
},
credentials: 'include'
2024-07-08 11:44:39 -04:00
});
// Determine the proper cookie domain
const hostname = event.url.hostname;
const domainParts = hostname.split('.');
let cookieDomain: string | undefined = undefined;
if (domainParts.length > 2) {
// For subdomains like app.mydomain.com -> .mydomain.com
cookieDomain = '.' + domainParts.slice(-2).join('.');
} else if (domainParts.length === 2) {
// For root domains like mydomain.com -> .mydomain.com
cookieDomain = '.' + hostname;
} else {
// For localhost or single-part domains (e.g., "localhost")
cookieDomain = undefined; // Do not set the domain
}
// Delete the session cookie
event.cookies.delete('sessionid', {
path: '/',
secure: event.url.protocol === 'https:',
domain: cookieDomain
});
if (res.status === 401) {
2024-07-08 11:44:39 -04:00
return redirect(302, '/login');
} else {
return redirect(302, '/');
}
2024-10-28 13:56:57 -04:00
},
setLocale: async ({ url, cookies }) => {
const locale = url.searchParams.get('locale');
// change the locale only if it is one of the allowed locales
if (locale) {
2024-10-28 13:56:57 -04:00
cookies.set('locale', locale, {
path: '/',
maxAge: 60 * 60 * 24 * 365 // 1 year
2024-10-28 13:56:57 -04:00
});
}
2024-07-08 11:44:39 -04:00
}
};