// HOST-Kundenkonten: Passwort-Hashing + JWT-Ausstellung/-Prüfung. // (Das sind die Konten auf der RAPPORT-HOST-Plattform — NICHT die Endnutzer // in den einzelnen Rapport-Instanzen.) import bcrypt from "bcryptjs"; import jwt from "jsonwebtoken"; import { env } from "./env.js"; export async function hashPassword(plain) { return bcrypt.hash(plain, 10); } export async function verifyPassword(plain, hash) { return bcrypt.compare(plain, hash); } export function signToken(account) { return jwt.sign({ sub: account.id, email: account.email }, env.jwtSecret, { expiresIn: "7d", }); } // Express-Middleware: setzt req.account aus dem Bearer-Token oder 401. export function requireAuth(req, res, next) { const header = req.headers.authorization || ""; const token = header.startsWith("Bearer ") ? header.slice(7) : null; if (!token) return res.status(401).json({ error: "Nicht angemeldet." }); try { const payload = jwt.verify(token, env.jwtSecret); req.account = { id: payload.sub, email: payload.email }; next(); } catch { res.status(401).json({ error: "Session ungültig oder abgelaufen." }); } }