mirror of
https://github.com/pupperpowell/bibdle.git
synced 2026-04-05 17:33:31 -04:00
53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
import { fail } from '@sveltejs/kit';
|
|
import type { Actions } from './$types';
|
|
import * as auth from '$lib/server/auth';
|
|
|
|
export const actions: Actions = {
|
|
default: async ({ request, cookies }) => {
|
|
const data = await request.formData();
|
|
const email = data.get('email')?.toString();
|
|
const password = data.get('password')?.toString();
|
|
const anonymousId = data.get('anonymousId')?.toString();
|
|
|
|
if (!email || !password) {
|
|
return fail(400, { error: 'Email and password are required' });
|
|
}
|
|
|
|
// Basic email validation
|
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
if (!emailRegex.test(email)) {
|
|
return fail(400, { error: 'Please enter a valid email address' });
|
|
}
|
|
|
|
if (password.length < 6) {
|
|
return fail(400, { error: 'Password must be at least 6 characters' });
|
|
}
|
|
|
|
try {
|
|
// Get user by email
|
|
const user = await auth.getUserByEmail(email);
|
|
if (!user || !user.passwordHash) {
|
|
return fail(400, { error: 'Invalid email or password' });
|
|
}
|
|
|
|
// Verify password
|
|
const isValidPassword = await auth.verifyPassword(password, user.passwordHash);
|
|
if (!isValidPassword) {
|
|
return fail(400, { error: 'Invalid email or password' });
|
|
}
|
|
|
|
// Migrate anonymous stats if different anonymous ID
|
|
await auth.migrateAnonymousStats(anonymousId, user.id);
|
|
|
|
// Create session
|
|
const sessionToken = auth.generateSessionToken();
|
|
const session = await auth.createSession(sessionToken, user.id);
|
|
auth.setSessionTokenCookie({ cookies }, sessionToken, session.expiresAt);
|
|
|
|
return { success: true };
|
|
} catch (error) {
|
|
console.error('Sign in error:', error);
|
|
return fail(500, { error: 'An error occurred during sign in' });
|
|
}
|
|
}
|
|
}; |