feat: upgrade AI prompts to v2 specification with grounding and injection shield
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
import { Request, Response } from 'express';
|
||||
import { supabase } from '../lib/supabase';
|
||||
|
||||
// POST /api/auth/register
|
||||
// E-posta + şifre ile yeni kullanıcı kaydı.
|
||||
// device_id: Electron'dan gönderilen cihaz kimliği (opsiyonel, sadece Electron build'de gelir).
|
||||
// Aynı device_id ile daha önce trial başlatılmışsa kayıt reddedilir.
|
||||
export const register = async (req: Request, res: Response) => {
|
||||
const { email, password, device_id } = req.body;
|
||||
|
||||
if (!email || !password) {
|
||||
return res.status(400).json({ error: 'E-posta ve şifre gereklidir.' });
|
||||
}
|
||||
if (password.length < 8) {
|
||||
return res.status(400).json({ error: 'Şifre en az 8 karakter olmalıdır.' });
|
||||
}
|
||||
|
||||
// Device ID varsa aynı cihazdan daha önce trial açılmış mı kontrol et
|
||||
if (device_id) {
|
||||
const { data: existingDevice } = await supabase
|
||||
.from('profiles')
|
||||
.select('id, license_status')
|
||||
.eq('trial_device_id', device_id)
|
||||
.maybeSingle();
|
||||
|
||||
if (existingDevice) {
|
||||
return res.status(409).json({
|
||||
error: 'Bu cihazda daha önce deneme sürümü kullanılmıştır. Hesabınıza giriş yapın veya bir lisans anahtarı edinin.',
|
||||
code: 'DEVICE_TRIAL_USED',
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Supabase Auth'ta kullanıcı oluştur (service role ile — email doğrulama zorunluluğu bypass)
|
||||
const { data, error } = await supabase.auth.admin.createUser({
|
||||
email,
|
||||
password,
|
||||
email_confirm: true, // E-posta onayı gerektirmeden direkt aktif et
|
||||
});
|
||||
|
||||
if (error) {
|
||||
// Supabase hata mesajlarını Türkçeye çevir
|
||||
if (error.message?.toLowerCase().includes('already registered') || error.message?.includes('already been registered')) {
|
||||
return res.status(409).json({ error: 'Bu e-posta adresi zaten kayıtlı.' });
|
||||
}
|
||||
console.error('[auth] register error:', error.message);
|
||||
return res.status(400).json({ error: 'Kayıt oluşturulamadı: ' + error.message });
|
||||
}
|
||||
|
||||
const userId = data.user?.id;
|
||||
if (!userId) {
|
||||
return res.status(500).json({ error: 'Kullanıcı oluşturuldu fakat ID alınamadı.' });
|
||||
}
|
||||
|
||||
// Device ID'yi profile'a kaydet (Supabase trigger zaten trial kolonlarını oluşturdu)
|
||||
if (device_id) {
|
||||
await supabase
|
||||
.from('profiles')
|
||||
.update({ trial_device_id: device_id })
|
||||
.eq('id', userId);
|
||||
}
|
||||
|
||||
// Kayıt başarılı — kullanıcı artık Supabase Auth üzerinden giriş yapabilir
|
||||
return res.status(201).json({
|
||||
success: true,
|
||||
message: '3 günlük deneme sürümünüz başlatıldı.',
|
||||
userId,
|
||||
});
|
||||
};
|
||||
|
||||
// POST /api/auth/check-device
|
||||
// Bir device_id'nin daha önce trial için kullanılıp kullanılmadığını kontrol eder.
|
||||
// Kayıt formunda "Kayıt Ol" butonuna basmadan önce çağrılır.
|
||||
export const checkDevice = async (req: Request, res: Response) => {
|
||||
const { device_id } = req.body;
|
||||
if (!device_id) {
|
||||
return res.status(400).json({ error: 'device_id gerekli.' });
|
||||
}
|
||||
|
||||
const { data } = await supabase
|
||||
.from('profiles')
|
||||
.select('id')
|
||||
.eq('trial_device_id', device_id)
|
||||
.maybeSingle();
|
||||
|
||||
return res.json({ deviceUsed: !!data });
|
||||
};
|
||||
Reference in New Issue
Block a user