Files
lagos-back/src/controllers/auth.controller.ts
T

88 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 });
};