Shun Miyazawa 3 лет назад
Родитель
Сommit
c26491c8d4

+ 22 - 7
packages/app/src/server/routes/forgot-password.ts

@@ -1,7 +1,6 @@
 import {
-  NextFunction, Request, RequestHandler, Response,
+  NextFunction, Request, Response,
 } from 'express';
-
 import createError from 'http-errors';
 
 import loggerFactory from '~/utils/logger';
@@ -42,10 +41,26 @@ export const resetPassword = (req: ReqWithPasswordResetOrder, res: Response): vo
   return res.render('reset-password', { email: passwordResetOrder.email });
 };
 
+type Crowi = {
+  // eslint-disable-next-line @typescript-eslint/no-explicit-any
+  nextApp: any,
+}
+
+type CrowiReq = Request & {
+  crowi: Crowi,
+}
+
 // middleware to handle error
-export const handleErrosMiddleware = (error: Error & { code: string }, req: Request, res: Response, next: NextFunction): Promise<RequestHandler> | void => {
-  if (error != null) {
-    return res.render('forgot-password/error', { key: error.code });
-  }
-  next(error);
+export const handleErrosMiddleware = (crowi: any) => {
+  return (error: Error & { code: string }, req: CrowiReq, res: Response, next: NextFunction): void => {
+    if (error != null) {
+      const { nextApp } = crowi;
+      req.crowi = crowi;
+
+      nextApp.render(req, res, '/forgot-password-errors', { errorCode: error.code });
+      return;
+    }
+
+    next();
+  };
 };

+ 5 - 9
packages/app/src/server/routes/index.js

@@ -232,15 +232,11 @@ module.exports = function(crowi, app) {
   // app.post('/_api/hackmd.discard'        , accessTokenParser , loginRequiredStrictly , hackmd.validateForApi, hackmd.discard);
   // app.post('/_api/hackmd.saveOnHackmd'   , accessTokenParser , loginRequiredStrictly , hackmd.validateForApi, hackmd.saveOnHackmd);
 
-  // app.use('/forgot-password', express.Router()
-  //   .use(forgotPassword.checkForgotPasswordEnabledMiddlewareFactory(crowi))
-  //   .get('/forgot-password', next.delegateToNext)
-  //   .get('/:token', injectResetOrderByTokenMiddleware, forgotPassword.resetPassword)
-  //   .use(forgotPassword.handleErrosMiddleware));
-
-  app.get('/forgot-password', next.delegateToNext);
-
-  // TODO: 104986 /forgot-password/:token
+  app.use('/forgot-password', express.Router()
+    .use(forgotPassword.checkForgotPasswordEnabledMiddlewareFactory(crowi))
+    .get('/forgot-password', next.delegateToNext)
+    .get('/:token', injectResetOrderByTokenMiddleware, forgotPassword.resetPassword, next.delegateToNext) // TODO: 104986
+    .use(forgotPassword.handleErrosMiddleware(crowi)));
 
   app.get('/_private-legacy-pages', next.delegateToNext);
   app.use('/user-activation', express.Router()