Switch to SQLite-backed session storage, cleanup third-party dependencies, and refine CSP for restricted external assets.
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
import express from "express";
|
||||
import {requireLogin, requireAdmin} from "../middleware/auth.js";
|
||||
|
||||
export function createAdminMarketRouter(repositories) {
|
||||
const router = express.Router();
|
||||
router.use(requireLogin, requireAdmin);
|
||||
router.get("/admin/reports", (_req, res) => res.json({
|
||||
reports: repositories.listMarketReports(),
|
||||
personas: repositories.listMarketPersonas({admin: true, username: _req.session.user})
|
||||
}));
|
||||
router.post("/admin/reports/:id", (req, res) => {
|
||||
repositories.updateMarketReportStatus(Number(req.params.id), String(req.body?.status || "reviewed").trim() || "reviewed");
|
||||
return res.json({message: "Report updated"});
|
||||
});
|
||||
router.post("/admin/personas/market/:id/moderate", (req, res) => {
|
||||
const status = String(req.body?.status || "approved").trim() || "approved";
|
||||
repositories.updateMarketModeration(Number(req.params.id), {
|
||||
status,
|
||||
notes: req.body?.notes == null ? null : String(req.body.notes).trim() || null,
|
||||
softDelete: Boolean(req.body?.softDelete)
|
||||
});
|
||||
return res.json({persona: repositories.getMarketPersona(Number(req.params.id))});
|
||||
});
|
||||
return router;
|
||||
}
|
||||
Reference in New Issue
Block a user