dipper/src/routes/(admin-panel)/login/+page.server.ts

47 lines
1.3 KiB
TypeScript

import { redirect } from '@sveltejs/kit';
import type { Actions, PageServerLoad } from './$types';
import { APIError } from '$lib/api/request';
import { getLoggedInUser, login, logout } from '$lib/api/auth';
export const load = async function ({ url, cookies }) {
const session = cookies.get('session');
// Check that login is valid
if (session) {
try {
const user = await getLoggedInUser(cookies);
if (user) {
throw redirect(302, url.searchParams.get('then') || '/admin');
}
} catch (e) {
// do nothing if not logged in
}
}
} satisfies PageServerLoad;
export const actions = {
login: async ({ cookies, request, url }) => {
const data = await request.formData();
const username = data.get('username')?.toString();
const password = data.get('password')?.toString();
if (!username || !password) return { error: 'missing credentials' };
try {
await login(cookies, username, password);
throw redirect(302, url.searchParams.get('then') || '/admin');
} catch (e) {
if (e instanceof APIError) {
switch (e.code) {
case 'invalid-login':
return { error: 'invalid credentials' };
}
}
return { error: 'unknown internal error' };
}
},
logout: async ({ url, cookies }) => {
await logout(cookies);
throw redirect(302, url.searchParams.get('then') || '/login');
}
} satisfies Actions;