53 lines
1.4 KiB
JavaScript
53 lines
1.4 KiB
JavaScript
const db = require("../db");
|
|
|
|
const TRIAL_DAYS = 30;
|
|
|
|
async function licenseGate(req, res, next) {
|
|
// Login-Seiten immer erlauben
|
|
if (req.path === "/" || req.path.startsWith("/login")) return next();
|
|
|
|
// Seriennummer-Seite immer erlauben
|
|
if (req.path.startsWith("/serial-number")) return next();
|
|
|
|
// Wenn nicht eingeloggt -> normal weiter (auth middleware macht das)
|
|
if (!req.session?.user) return next();
|
|
|
|
const [rows] = await db
|
|
.promise()
|
|
.query(
|
|
`SELECT serial_number, trial_started_at FROM company_settings ORDER BY id ASC LIMIT 1`,
|
|
);
|
|
|
|
const settings = rows?.[0];
|
|
|
|
// Wenn Seriennummer vorhanden -> alles ok
|
|
if (settings?.serial_number) return next();
|
|
|
|
// Wenn keine Trial gestartet: jetzt starten
|
|
if (!settings?.trial_started_at) {
|
|
await db
|
|
.promise()
|
|
.query(
|
|
`UPDATE company_settings SET trial_started_at = NOW() WHERE id = ?`,
|
|
[settings?.id || 1],
|
|
);
|
|
return next(); // Trial läuft ab jetzt
|
|
}
|
|
|
|
// Trial prüfen
|
|
const trialStart = new Date(settings.trial_started_at);
|
|
const now = new Date();
|
|
|
|
const diffMs = now - trialStart;
|
|
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
|
|
if (diffDays < TRIAL_DAYS) {
|
|
return next(); // Trial ist noch gültig
|
|
}
|
|
|
|
// ❌ Trial abgelaufen -> nur noch Seriennummer Seite
|
|
return res.redirect("/serial-number");
|
|
}
|
|
|
|
module.exports = { licenseGate };
|