penisularhr-ui / src / hooks.server.ts
hooks.server.ts
Raw
import { redirect, type Handle } from '@sveltejs/kit';
import { PUBLIC_BASE_API_URL } from '$env/static/public';

export const handle: Handle = async ({ event, resolve }) => {
	const { cookies, url, getClientAddress } = event;

	if (!cookies.get('accessToken') && url.pathname === '/login') {
		const returnResponse = await resolve(event);

		return returnResponse;
	}

	if (!cookies.get('accessToken') && url.pathname !== '/login') {
		throw redirect(301, '/login');
	}

	const response = await fetch(`${PUBLIC_BASE_API_URL}/auth/me`, {
		headers: {
			Authorization: `Bearer ${cookies.get('accessToken')}`,
			'x-forwarded-for': getClientAddress(),
			'x-real-ip': getClientAddress()
		}
	});
	const data: { statusCode: number; message: string } = await response.json();

	if (data.statusCode && url.pathname !== '/login') {
		throw redirect(301, '/login?redirected=true');
	} else if (!data.statusCode && (url.pathname === '/' || url.pathname === '/login')) {
		throw redirect(302, '/app');
	}

	const returnResponse = await resolve(event);

	return returnResponse;
};