renders.handler.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. const utils = require("../utils");
  2. const query = require("../queries")
  3. const env = require("../env");
  4. /**
  5. * @type {import("express").Handler}
  6. */
  7. async function homepage(req, res) {
  8. res.render("homepage", {
  9. title: "Modern open source URL shortener",
  10. });
  11. }
  12. /**
  13. * @type {import("express").Handler}
  14. */
  15. function login(req, res) {
  16. if (req.user) {
  17. return res.redirect("/");
  18. }
  19. res.render("login", {
  20. title: "Log in or sign up"
  21. });
  22. }
  23. /**
  24. * @type {import("express").Handler}
  25. */
  26. function logout(req, res) {
  27. res.clearCookie("token", { httpOnly: true, secure: env.isProd });
  28. res.render("logout", {
  29. title: "Logging out.."
  30. });
  31. }
  32. /**
  33. * @type {import("express").Handler}
  34. */
  35. function settings(req, res) {
  36. // TODO: make this a middelware function, apply it to where it's necessary
  37. if (!req.user) {
  38. return res.redirect("/");
  39. }
  40. res.render("settings", {
  41. title: "Settings"
  42. });
  43. }
  44. /**
  45. * @type {import("express").Handler}
  46. */
  47. async function confirmLinkDelete(req, res) {
  48. const link = await query.link.find({
  49. uuid: req.query.id,
  50. ...(!req.user.admin && { user_id: req.user.id })
  51. });
  52. await utils.sleep(500);
  53. if (!link) {
  54. return res.render("partials/links/dialog/message", {
  55. layout: false,
  56. message: "Could not find the link."
  57. });
  58. }
  59. res.render("partials/links/dialog/delete", {
  60. layout: false,
  61. link: utils.getShortURL(link.address, link.domain).link,
  62. id: link.uuid
  63. });
  64. }
  65. /**
  66. * @type {import("express").Handler}
  67. */
  68. async function confirmLinkBan(req, res) {
  69. const link = await query.link.find({
  70. uuid: req.query.id,
  71. ...(!req.user.admin && { user_id: req.user.id })
  72. });
  73. await utils.sleep(500);
  74. if (!link) {
  75. return res.render("partials/links/dialog/message", {
  76. message: "Could not find the link."
  77. });
  78. }
  79. res.render("partials/links/dialog/ban", {
  80. link: utils.getShortURL(link.address, link.domain).link,
  81. id: link.uuid
  82. });
  83. }
  84. /**
  85. * @type {import("express").Handler}
  86. */
  87. async function addDomainForm(req, res) {
  88. await utils.sleep(1000);
  89. res.render("partials/settings/domain/add_form");
  90. }
  91. /**
  92. * @type {import("express").Handler}
  93. */
  94. async function confirmDomainDelete(req, res) {
  95. const domain = await query.domain.find({
  96. uuid: req.query.id,
  97. user_id: req.user.id
  98. });
  99. await utils.sleep(500);
  100. if (!domain) {
  101. throw new utils.CustomError("Could not find the link", 400);
  102. }
  103. res.render("partials/settings/domain/delete", {
  104. ...utils.sanitize.domain(domain)
  105. });
  106. }
  107. /**
  108. * @type {import("express").Handler}
  109. */
  110. async function linkEdit(req, res) {
  111. const link = await query.link.find({
  112. uuid: req.params.id,
  113. ...(!req.user.admin && { user_id: req.user.id })
  114. });
  115. await utils.sleep(500);
  116. // TODO: handle when no link
  117. // if (!link) {
  118. // return res.render("partials/links/dialog/message", {
  119. // layout: false,
  120. // message: "Could not find the link."
  121. // });
  122. // }
  123. res.render("partials/links/edit", {
  124. ...utils.sanitize.link(link),
  125. });
  126. }
  127. module.exports = {
  128. addDomainForm,
  129. homepage,
  130. linkEdit,
  131. login,
  132. logout,
  133. confirmDomainDelete,
  134. confirmLinkBan,
  135. confirmLinkDelete,
  136. settings,
  137. }