فهرست منبع

ApiV3FormValidator

mizozobu 6 سال پیش
والد
کامیت
7fcfca29fe

+ 8 - 0
src/server/crowi/index.js

@@ -14,6 +14,7 @@ const sep = path.sep;
 const mongoose = require('mongoose');
 
 const models = require('../models');
+const initMiddlewares = require('../middlewares');
 
 function Crowi(rootdir) {
   const self = this;
@@ -46,6 +47,7 @@ function Crowi(rootdir) {
   this.tokens = null;
 
   this.models = {};
+  this.middlewares = {};
 
   this.env = process.env;
   this.node_env = this.env.NODE_ENV || 'development';
@@ -72,6 +74,7 @@ function getMongoUrl(env) {
 Crowi.prototype.init = async function() {
   await this.setupDatabase();
   await this.setupModels();
+  await this.setupMiddlewares();
   await this.setupSessionConfig();
   await this.setupAppConfig();
   await this.setupConfigManager();
@@ -212,6 +215,11 @@ Crowi.prototype.setupModels = function() {
   }));
 };
 
+Crowi.prototype.setupMiddlewares = async function() {
+  // const self = this;
+  this.middlewares = await initMiddlewares(this);
+};
+
 Crowi.prototype.getIo = function() {
   return this.io;
 };

+ 26 - 0
src/server/middlewares/ApiV3FormValidator.js

@@ -0,0 +1,26 @@
+const logger = require('@alias/logger')('growi:middlewares:ApiV3FormValidator');
+const { validationResult } = require('express-validator/check');
+
+class ApiV3FormValidator {
+
+  constructor(crowi) {
+    const { ErrorV3 } = crowi.models;
+
+    return (req, res, next) => {
+      const errObjArray = validationResult(req);
+      if (errObjArray.isEmpty()) {
+        return next();
+      }
+
+      const errs = errObjArray.array().map((err) => {
+        logger.error(`${err.param} in ${err.location}: ${err.msg}`);
+        return new ErrorV3(`${err.param}: ${err.msg}`, 'validation_failed');
+      });
+
+      return res.apiv3Err(errs);
+    };
+  }
+
+}
+
+module.exports = ApiV3FormValidator;

+ 0 - 22
src/server/middlewares/formValid.js

@@ -1,22 +0,0 @@
-const logger = require('@alias/logger')('growi:middlewares:formValid');
-const { validationResult } = require('express-validator/check');
-
-const formValid = (crowi) => {
-  const { ErrorV3 } = crowi.models;
-
-  return function(req, res, next) {
-    const errObjArray = validationResult(req);
-    if (errObjArray.isEmpty()) {
-      return next();
-    }
-
-    const errs = errObjArray.array().map((err) => {
-      logger.error(`${err.param} in ${err.location}: ${err.msg}`);
-      return new ErrorV3(`${err.param}: ${err.msg}`, 'validation_failed');
-    });
-
-    return res.apiv3Err(errs);
-  };
-};
-
-module.exports = formValid;

+ 16 - 12
src/server/middlewares/index.js

@@ -1,17 +1,21 @@
 const fs = require('fs');
 const path = require('path');
 
-const basename = path.basename(__filename);
-const middlewares = {};
+const initMiddlewares = (crowi) => {
+  const basename = path.basename(__filename);
+  const middlewares = {};
 
-fs
-  .readdirSync(__dirname)
-  .filter((file) => {
-    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
-  })
-  .forEach((file) => {
-    const middleware = require(path.join(__dirname, file));
-    middlewares[file.slice(0, -3)] = middleware;
-  });
+  fs
+    .readdirSync(__dirname)
+    .filter((file) => {
+      return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
+    })
+    .forEach((file) => {
+      const Middleware = require(path.join(__dirname, file));
+      middlewares[file.slice(0, -3)] = new Middleware(crowi);
+    });
 
-module.exports = middlewares;
+  return middlewares;
+};
+
+module.exports = initMiddlewares;

+ 3 - 3
src/server/routes/apiv3/user-group.js

@@ -18,7 +18,7 @@ const validator = {};
 
 module.exports = (crowi) => {
   const { ErrorV3, UserGroup, UserGroupRelation } = crowi.models;
-  const { formValid } = require('../../middlewares');
+  const { ApiV3FormValidator } = crowi.middlewares;
 
   router.get('/', loginRequired(crowi), adminRequired(), async(req, res) => {
     // TODO: filter with querystring
@@ -37,7 +37,7 @@ module.exports = (crowi) => {
     body('name', 'Group name is required').trim().exists(),
   ];
 
-  router.post('/', loginRequired(crowi), adminRequired(), csrfVerify(crowi), validator.create, formValid(crowi), async(req, res) => {
+  router.post('/', loginRequired(crowi), adminRequired(), csrfVerify(crowi), validator.create, ApiV3FormValidator, async(req, res) => {
     const { name } = req.body;
 
     try {
@@ -59,7 +59,7 @@ module.exports = (crowi) => {
     query('transferToUserGroupId').trim(),
   ];
 
-  router.delete('/:id', loginRequired(crowi), adminRequired(), csrfVerify(crowi), validator.delete, formValid(crowi), async(req, res) => {
+  router.delete('/:id', loginRequired(crowi), adminRequired(), csrfVerify(crowi), validator.delete, ApiV3FormValidator, async(req, res) => {
     const { id: deleteGroupId } = req.params;
     const { actionName, transferToUserGroupId } = req.query;