You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.6 KiB

11 months ago
  1. const { Workspace } = require("../../models/workspace");
  2. const { WorkspaceThread } = require("../../models/workspaceThread");
  3. const { userFromSession, multiUserMode } = require("../http");
  4. // Will pre-validate and set the workspace for a request if the slug is provided in the URL path.
  5. async function validWorkspaceSlug(request, response, next) {
  6. const { slug } = request.params;
  7. const user = await userFromSession(request, response);
  8. const workspace = multiUserMode(response)
  9. ? await Workspace.getWithUser(user, { slug })
  10. : await Workspace.get({ slug });
  11. if (!workspace) {
  12. response.status(404).send("Workspace does not exist.");
  13. return;
  14. }
  15. response.locals.workspace = workspace;
  16. next();
  17. }
  18. // Will pre-validate and set the workspace AND a thread for a request if the slugs are provided in the URL path.
  19. async function validWorkspaceAndThreadSlug(request, response, next) {
  20. const { slug, threadSlug } = request.params;
  21. const user = await userFromSession(request, response);
  22. const workspace = multiUserMode(response)
  23. ? await Workspace.getWithUser(user, { slug })
  24. : await Workspace.get({ slug });
  25. if (!workspace) {
  26. response.status(404).send("Workspace does not exist.");
  27. return;
  28. }
  29. const thread = await WorkspaceThread.get({
  30. slug: threadSlug,
  31. user_id: user?.id || null,
  32. });
  33. if (!thread) {
  34. response.status(404).send("Workspace thread does not exist.");
  35. return;
  36. }
  37. response.locals.workspace = workspace;
  38. response.locals.thread = thread;
  39. next();
  40. }
  41. module.exports = {
  42. validWorkspaceSlug,
  43. validWorkspaceAndThreadSlug,
  44. };