Files
acc-server-manager-web/src/api/authService.ts
2025-07-01 21:45:39 +02:00

52 lines
1.4 KiB
TypeScript

import { fetchAPIEvent } from '$api/apiService';
import { env } from '$env/dynamic/private';
import { authStore } from '$stores/authStore';
import { redisSessionManager } from '$stores/redisSessionManager';
import type { RequestEvent } from '@sveltejs/kit';
import { v4 as uuidv4 } from 'uuid';
export const login = async (event: RequestEvent, username: string, password: string) => {
try {
const response = await fetch(`${env.API_BASE_URL}/auth/login`, {
method: 'POST',
body: JSON.stringify({ username, password }),
headers: {
'Content-Type': 'application/json'
}
});
if (!response.ok) {
const errorData = await response
.json()
.catch(() => ({ error: 'Invalid username or password.' }));
authStore.set({
token: undefined,
error: errorData.error || 'Invalid username or password.'
});
return false;
}
const { token } = await response.json();
await redisSessionManager.createSession(event.cookies, { token }, uuidv4());
return true;
} catch (err) {
authStore.set({ token: undefined, error: 'Login failed. Please try again.' });
return false;
}
};
export const logout = (event: RequestEvent) => {
return redisSessionManager.deleteCookie(event.cookies);
};
export const checkAuth = async (event: RequestEvent) => {
try {
await fetchAPIEvent(event, '/api');
return true;
} catch (err) {
return false;
}
};