auth.js 945 B

1234567891011121314151617181920212223242526272829303132333435
  1. "use strict";
  2. const DEFAULT_ADMIN_TOKEN = "dev-task-board-token";
  3. function getAdminToken() {
  4. const envToken = process.env.TASK_BOARD_ADMIN_TOKEN;
  5. if (typeof envToken === "string" && envToken.trim()) {
  6. return envToken.trim();
  7. }
  8. return DEFAULT_ADMIN_TOKEN;
  9. }
  10. function sendUnauthorized(res) {
  11. res.writeHead(401, {
  12. "Content-Type": "application/json; charset=utf-8",
  13. "Cache-Control": "no-store",
  14. "WWW-Authenticate": 'Bearer realm="task-board-admin"',
  15. });
  16. res.end(JSON.stringify({ error: "Unauthorized" }));
  17. }
  18. function requireAdmin(req, res) {
  19. const authHeader = typeof req.headers.authorization === "string" ? req.headers.authorization.trim() : "";
  20. const token = authHeader.toLowerCase().startsWith("bearer ") ? authHeader.slice(7).trim() : "";
  21. if (!token || token !== getAdminToken()) {
  22. sendUnauthorized(res);
  23. return false;
  24. }
  25. return true;
  26. }
  27. module.exports = {
  28. getAdminToken,
  29. requireAdmin,
  30. };