52 lines
1.4 KiB
TypeScript
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;
|
|
}
|
|
};
|