UNPKG

skailan-core

Version:

Servicio de autenticación y multitenancy para Skailan.

101 lines 4.45 kB
import { AuthService } from "../services/AuthService"; export const register = async (req, res) => { try { if (!req.tenantPrisma) { return res.status(500).json({ error: "Prisma client not initialized for tenant." }); } const { email, password, name } = req.body; const { user, token } = await AuthService.register(req.tenantPrisma, email, password, name); return res.status(201).json({ id: user.id, email: user.email, name: user.name, token }); } catch (err) { if (err.message === "El email ya está registrado.") { return res.status(409).json({ error: err.message }); } return res.status(500).json({ error: err.message || "Error en el registro." }); } }; export const login = async (req, res) => { try { if (!req.tenantPrisma) { return res.status(500).json({ error: "Prisma client not initialized for tenant." }); } const { email, password } = req.body; const { user, token } = await AuthService.login(req.tenantPrisma, email, password); return res.status(200).json({ id: user.id, email: user.email, name: user.name, token }); } catch (err) { if (err.message === "Credenciales inválidas.") { return res.status(401).json({ error: err.message }); } return res.status(500).json({ error: err.message || "Error en el login." }); } }; export const getOrganizations = async (req, res) => { try { if (!req.tenantPrisma) { return res.status(500).json({ error: "Prisma client not initialized for tenant." }); } const userId = req.user.id; if (!userId) return res.status(401).json({ error: "No autenticado." }); const organizations = await AuthService.getOrganizations(req.tenantPrisma, userId); return res.status(200).json({ organizations }); } catch (err) { return res.status(500).json({ error: err.message || "Error al obtener organizaciones." }); } }; export const switchOrganization = async (req, res) => { try { if (!req.tenantPrisma) { return res.status(500).json({ error: "Prisma client not initialized for tenant." }); } const userId = req.user.id; if (!userId) return res.status(401).json({ error: "No autenticado." }); const { organizationId } = req.body; const userEmail = req.user.email; // Asumiendo que el email está en el payload del JWT const { token: newToken, activeOrg } = await AuthService.switchOrganization(req.tenantPrisma, userId, userEmail, organizationId); return res.status(200).json({ token: newToken, activeOrg: activeOrg }); } catch (err) { if (err.message === "No eres miembro de esta organización.") { return res.status(403).json({ error: err.message }); } return res.status(500).json({ error: err.message || "Error al cambiar de organización." }); } }; export const requestPasswordReset = async (req, res) => { try { if (!req.tenantPrisma) { return res.status(500).json({ error: "Prisma client not initialized for tenant." }); } const { email } = req.body; await AuthService.requestPasswordReset(req.tenantPrisma, email); return res.status(200).json({ message: "Correo de recuperación enviado." }); } catch (err) { if (err.message === "Usuario no encontrado.") { return res.status(404).json({ error: err.message }); } return res.status(500).json({ error: err.message || "Error al solicitar recuperación." }); } }; export const resetPassword = async (req, res) => { try { if (!req.tenantPrisma) { return res.status(500).json({ error: "Prisma client not initialized for tenant." }); } const { token, password } = req.body; await AuthService.resetPassword(req.tenantPrisma, token, password); return res.status(200).json({ message: "Contraseña actualizada." }); } catch (err) { if (err.message === "Token inválido o expirado." || err.message === "Usuario no encontrado.") { return res.status(400).json({ error: err.message }); } return res.status(500).json({ error: err.message || "Error al restablecer contraseña." }); } }; //# sourceMappingURL=authController.js.map