UNPKG

@drop-in/new

Version:

A SvelteKit Svelte 5 PocketBase Starter Kit with a CLI

121 lines (103 loc) 3.28 kB
import type { RequestEvent, Handle } from '@sveltejs/kit'; import { sign_up } from './sign_up'; import { login } from './login'; import { logout } from './logout'; import { parseFormData } from 'parse-nested-form-data'; import { cookie_options, jwt_cookie_options } from './cookies'; type FormData = { email?: string; password?: string; }; export async function sign_up_route(event: RequestEvent, data: FormData) { if (!data.email || !data.password) { return new Response(JSON.stringify({ error: 'Email and password are required' }), { status: 400, }); } const sign_up_response = await sign_up(data.email, data.password); if (sign_up_response?.refresh_token && sign_up_response?.jwt) { const { refresh_token, jwt } = sign_up_response; event.cookies.set('refresh_token', refresh_token, cookie_options); event.cookies.set('jwt', jwt, jwt_cookie_options); return new Response('Success', { status: 200, headers: { 'Content-Type': 'text/plain', }, }); } return new Response('Failed', { status: 400, headers: { 'Content-Type': 'text/plain', }, }); } export async function login_route(event: RequestEvent, data: FormData) { if (!data.email || !data.password) { return new Response(JSON.stringify({ error: 'Email and password are required' }), { status: 400, }); } const login_response = await login(data.email, data.password); if (login_response?.refresh_token && login_response?.jwt) { const { refresh_token, jwt } = login_response; event.cookies.set('refresh_token', refresh_token, cookie_options); event.cookies.set('jwt', jwt, jwt_cookie_options); return new Response('Success', { status: 200, headers: { 'Content-Type': 'text/plain', }, }); } return new Response('Failed', { status: 400, headers: { 'Content-Type': 'text/plain', }, }); } export async function logout_route(event: RequestEvent) { // Get the refresh_token from the request const refresh_token = event.request.headers.get('refresh_token'); await logout(refresh_token); event.cookies.delete('refresh_token', cookie_options); event.cookies.delete('jwt', jwt_cookie_options); return new Response('Success', { status: 200, headers: { 'Content-Type': 'text/plain', }, }); } /** * Handles the authentication routes. * * @param event - The event object * @param resolve - The resolve function * @returns The response object */ export const pass_routes: Handle = async ({ event, resolve }) => { const { url } = event; // Check if the URL matches your auth routes if (url.pathname.startsWith('/auth')) { // Make a clone to prevent error in already read body const request_2 = event.request.clone(); // Get form data const form_data = await request_2.formData(); // Parse that ish const data = parseFormData(form_data); if (url.pathname === '/auth/login') { return login_route(event, data); } else if (url.pathname === '/auth/register') { return sign_up_route(event, data); } else if (url.pathname === '/auth/logout') { return logout_route(event); } // Return 404 for unhandled auth routes return new Response(JSON.stringify({ error: 'Not Found' }), { status: 404 }); } // If it's not an auth route, continue with the next handler return resolve(event); };