Postfach/Team-Verwaltung/Supporter-Abo als Node.js/Express-Server portiert
Vollständiger 1:1-Port des cloudflare-worker/ (dogfather-universe-postfach) auf server-internal/: Bewerbungs-Postfach mit Rollen/Rechten, Team- Zugangsverwaltung (verschlüsselte Owner-only-Codes), DogiCrew-Supporter-Abo (PayPal Subscriptions, Google-Login, Resend-E-Mail, 30-Monats-Prämienzyklus) und automatische TikTok-Live-Erkennung. D1 -> better-sqlite3, Cloudflare- Cron -> node-cron. Läuft ohne gesetzte Secrets weiter (PayPal/Google/Resend/ Ticketanizer/Discord bleiben "nicht konfiguriert" statt kaputt), bis die echten Zugangsdaten eingetragen werden.
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
/* =====================================================================
|
||||
routes/audit.js — Aktivitätsprotokoll ansehen. 1:1 portiert aus
|
||||
cloudflare-worker/src/routes/audit.js.
|
||||
===================================================================== */
|
||||
import { db } from "../db.js";
|
||||
import { hasPermission } from "../lib/permissions.js";
|
||||
import { json } from "../lib/http.js";
|
||||
|
||||
export async function listAuditLog(req, res, session) {
|
||||
if (!session) return json(res, { ok: false, error: "Nicht angemeldet." }, 401);
|
||||
if (!session.isOwner && !hasPermission(session.permissions, session.overrides, "SETTINGS_VIEW_ACTIVITY_LOG")) {
|
||||
return json(res, { ok: false, error: "Keine Berechtigung." }, 403);
|
||||
}
|
||||
const body = req.body || {};
|
||||
const limit = Math.min(Number(body.limit) || 100, 500);
|
||||
const rows = db
|
||||
.prepare(`SELECT id, actor, action, target, detail, created_at FROM audit_log ORDER BY created_at DESC LIMIT ?`)
|
||||
.all(limit);
|
||||
return json(res, { ok: true, entries: rows });
|
||||
}
|
||||
Reference in New Issue
Block a user