Newer
Older
express-blog / src / routes / admin.js
// src/routes/admin.js
const express = require("express");
const { validateToken, cleanupTokens } = require("../utils/adminToken");
const HttpError = require("../utils/HttpError");
const router = express.Router();

// Middleware to cleanup expired tokens periodically
router.use((req, res, next) => {
  // Clean up expired tokens on each request
  if (Math.random() < 0.1) {
    // 10% chance to cleanup on each request
    cleanupTokens();
  }
  next();
});

router.get("/:token", (req, res, next) => {
  const { token } = req.params;
  if (!token) {
    return next();
  }

  // Validate the token before proceeding
  if (!validateToken(token)) {
    const error = new HttpError("Invalid or expired token", 401, { token });
    req.log.warn({ err: error, token }, "Token validation failed");
    return next(); // fail silently
  }

  const scheme = req.protocol;
  const host = req.get("host");
  const referrer = req.get("Referer") || req.get("Referrer") || "";

  const rd = referrer.startsWith("http")
    ? referrer
    : `${scheme}://${host}${referrer}`;

  const adminLoginUrl = `${process.env.AUTH_LOGIN}${rd}`;
  res.set("Content-Type", "text/html");
  res.customRedirect(adminLoginUrl, 301);
});

module.exports = router;