locals.handler.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. const query = require("../queries");
  2. const utils = require("../utils");
  3. const env = require("../env");
  4. function isHTML(req, res, next) {
  5. const accepts = req.accepts(["json", "html"]);
  6. req.isHTML = accepts === "html";
  7. next();
  8. }
  9. function noLayout(req, res, next) {
  10. res.locals.layout = null;
  11. next();
  12. }
  13. function viewTemplate(template) {
  14. return function (req, res, next) {
  15. req.viewTemplate = template;
  16. next();
  17. }
  18. }
  19. function config(req, res, next) {
  20. res.locals.default_domain = env.DEFAULT_DOMAIN;
  21. res.locals.site_name = env.SITE_NAME;
  22. res.locals.contact_email = env.CONTACT_EMAIL;
  23. res.locals.server_ip_address = env.SERVER_IP_ADDRESS;
  24. res.locals.server_cname_address = env.SERVER_CNAME_ADDRESS;
  25. res.locals.disallow_registration = env.DISALLOW_REGISTRATION;
  26. res.locals.mail_enabled = env.MAIL_ENABLED;
  27. res.locals.report_email = env.REPORT_EMAIL;
  28. res.locals.custom_styles = utils.getCustomCSSFileNames();
  29. next();
  30. }
  31. async function user(req, res, next) {
  32. const user = req.user;
  33. res.locals.user = user;
  34. if (user) {
  35. const userDomains = await query.domain.get({ user_id: user.id });
  36. const systemDomains = await query.domain.get({ user_id: null });
  37. const allDomains = [...systemDomains, ...userDomains];
  38. const uniqueDomains = allDomains.filter((domain, index, self) =>
  39. index === self.findIndex((d) => d.address === domain.address)
  40. );
  41. res.locals.domains = uniqueDomains.map(utils.sanitize.domain);
  42. } else {
  43. res.locals.domains = [];
  44. }
  45. next();
  46. }
  47. function newPassword(req, res, next) {
  48. res.locals.reset_password_token = req.body.reset_password_token;
  49. next();
  50. }
  51. function createLink(req, res, next) {
  52. res.locals.show_advanced = !!req.body.show_advanced;
  53. next();
  54. }
  55. function editLink(req, res, next) {
  56. res.locals.id = req.params.id;
  57. res.locals.class = "no-animation";
  58. next();
  59. }
  60. function protected(req, res, next) {
  61. res.locals.id = req.params.id;
  62. next();
  63. }
  64. function adminTable(req, res, next) {
  65. res.locals.query = {
  66. anonymous: req.query.anonymous,
  67. domain: req.query.domain,
  68. domains: req.query.domains,
  69. links: req.query.links,
  70. role: req.query.role,
  71. search: req.query.search,
  72. user: req.query.user,
  73. verified: req.query.verified,
  74. };
  75. next();
  76. }
  77. module.exports = {
  78. adminTable,
  79. config,
  80. createLink,
  81. editLink,
  82. isHTML,
  83. newPassword,
  84. noLayout,
  85. protected,
  86. user,
  87. viewTemplate,
  88. }