import type { APIRoute } from 'astro'; import { pb } from '../../../lib/pb'; import { sendEmail, getSiteUrl } from '../../../lib/email'; function generateResetPasswordHtml(firstName: string, resetLink: string): string { return ` Сброс пароля

Автоюрист Сургут

Юридические услуги для автовладельцев

Сброс пароля

Здравствуйте, ${firstName}!

Вы запросили сброс пароля. Нажмите кнопку ниже для создания нового пароля:

Сбросить пароль

Ссылка действительна 1 час. Если вы не запрашивали сброс пароля, просто проигнорируйте это письмо.

© 2026 Автоюрист Сургут. Все права защищены.

`; } export const POST: APIRoute = async ({ request }) => { try { const data = await request.json(); const { email } = data; console.log('Password reset request:', email); if (!email) { return new Response(JSON.stringify({ success: false, error: 'Email обязателен' }), { status: 400 }); } // Проверяем существует ли пользователь let user = null; try { user = await pb.collection('users').getFirstListItem(`email="${email}"`); } catch (e) { console.log('User not found, still return success'); } if (!user) { return new Response(JSON.stringify({ success: true, message: 'Ссылка для сброса пароля отправлена' }), { status: 200 }); } // Создаём свой токен сброса (как для верификации) const resetToken = Buffer.from(`${user.id}:${Date.now()}`).toString('base64').replace(/=/g, ''); const resetLink = `${getSiteUrl()}/auth/reset-password?token=${resetToken}&userId=${user.id}`; // Отправляем письмо const firstName = user.firstName || 'Пользователь'; const html = generateResetPasswordHtml(firstName, resetLink); const emailSent = await sendEmail({ to: email, subject: 'Сброс пароля — Автоюрист Сургут', html }); console.log('Reset email sent:', emailSent); return new Response(JSON.stringify({ success: true, message: 'Ссылка для сброса пароля отправлена' }), { status: 200 }); } catch (error: any) { console.error('Forgot password error:', error); return new Response(JSON.stringify({ success: true, message: 'Ссылка для сброса пароля отправлена' }), { status: 200 }); } };