user-activation.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import type { NextFunction, Response } from 'express';
  2. import type { UserActivationErrorCode } from '~/interfaces/errors/user-activation';
  3. import type { ReqWithUserRegistrationOrder } from '~/server/middlewares/inject-user-registration-order-by-token-middleware';
  4. type Crowi = {
  5. nextApp: any;
  6. };
  7. type CrowiReq = ReqWithUserRegistrationOrder & {
  8. crowi: Crowi;
  9. };
  10. /**
  11. * @swagger
  12. *
  13. * /user-activation/{token}:
  14. * get:
  15. * summary: /user-activation/{token}
  16. * tags: [Users]
  17. * parameters:
  18. * - name: token
  19. * in: path
  20. * required: true
  21. * schema:
  22. * type: string
  23. * responses:
  24. * 200:
  25. * description: User activation successful
  26. * content:
  27. * text/html:
  28. * schema:
  29. * type: string
  30. */
  31. export const renderUserActivationPage = (crowi: Crowi) => {
  32. return (req: CrowiReq, res: Response): void => {
  33. const { userRegistrationOrder } = req;
  34. const { nextApp } = crowi;
  35. req.crowi = crowi;
  36. nextApp.render(req, res, '/user-activation', { userRegistrationOrder });
  37. return;
  38. };
  39. };
  40. // middleware to handle error
  41. export const tokenErrorHandlerMiddeware = (crowi: Crowi) => {
  42. return (
  43. error: Error & { code: UserActivationErrorCode; statusCode: number },
  44. req: CrowiReq,
  45. res: Response,
  46. next: NextFunction,
  47. ): void => {
  48. if (error != null) {
  49. const { nextApp } = crowi;
  50. req.crowi = crowi;
  51. nextApp.render(req, res, '/user-activation', { errorCode: error.code });
  52. return;
  53. }
  54. next();
  55. };
  56. };