const express = require('express'); const bcrypt = require('bcryptjs'); const router = express.Router(); const supabase = require('../services/supabase'); const { ROLES } = require('../config/constants'); // GET /login router.get('/login', (req, res) => { if (req.session.user) return res.redirect('/'); res.render('pages/login', { error: null }); }); // POST /login router.post('/login', async (req, res) => { const { username, password } = req.body; if (!username || !password) { return res.render('pages/login', { error: 'यूज़रनेम और पासवर्ड आवश्यक है' }); } const { data: user, error } = await supabase .from('app_users') .select('*') .eq('username', username.toLowerCase().trim()) .single(); if (error || !user) { return res.render('pages/login', { error: 'गलत यूज़रनेम या पासवर्ड' }); } const valid = await bcrypt.compare(password, user.password_hash); if (!valid) { return res.render('pages/login', { error: 'गलत यूज़रनेम या पासवर्ड' }); } req.session.user = { id: user.id, username: user.username, name: user.name, role: user.role, phone: user.phone, }; res.redirect('/'); }); // GET /register router.get('/register', (req, res) => { if (req.session.user) return res.redirect('/'); res.render('pages/register', { error: null, role: req.query.role || '' }); }); // POST /register router.post('/register', async (req, res) => { const { name, username, password, password_confirm, role, phone } = req.body; if (!name || !username || !password || !role) { return res.render('pages/register', { error: 'सभी फ़ील्ड भरें', role }); } if (password.length < 4) { return res.render('pages/register', { error: 'पासवर्ड कम से कम 4 अक्षर का होना चाहिए', role }); } if (password !== password_confirm) { return res.render('pages/register', { error: 'पासवर्ड मेल नहीं खाता', role }); } if (![ROLES.DRIVER, ROLES.SHIPPER, ROLES.BROKER].includes(role)) { return res.render('pages/register', { error: 'कृपया भूमिका चुनें', role }); } const cleanUsername = username.toLowerCase().trim().replace(/\s/g, ''); // Check existing const { data: existing } = await supabase .from('app_users') .select('id') .eq('username', cleanUsername) .single(); if (existing) { return res.render('pages/register', { error: 'यह यूज़रनेम पहले से लिया हुआ है', role }); } const password_hash = await bcrypt.hash(password, 10); const { data: user, error } = await supabase .from('app_users') .insert([{ username: cleanUsername, name: name.trim(), password_hash, role, phone: phone || null }]) .select() .single(); if (error) { return res.render('pages/register', { error: 'पंजीकरण विफल: ' + error.message, role }); } req.session.user = { id: user.id, username: user.username, name: user.name, role: user.role, phone: user.phone, }; res.redirect('/'); }); // GET /logout router.get('/logout', (req, res) => { req.session.destroy(() => res.redirect('/')); }); module.exports = router;