Parcourir la source

Merge pull request #9844 from weseek/fix/type-confusion

fix: CodeQL problems for Users API
mergify[bot] il y a 11 mois
Parent
commit
c639df4330
1 fichiers modifiés avec 14 ajouts et 5 suppressions
  1. 14 5
      apps/app/src/server/routes/apiv3/users.js

+ 14 - 5
apps/app/src/server/routes/apiv3/users.js

@@ -1,9 +1,9 @@
-
 import path from 'path';
 import path from 'path';
 
 
 import { ErrorV3 } from '@growi/core/dist/models';
 import { ErrorV3 } from '@growi/core/dist/models';
 import { serializeUserSecurely } from '@growi/core/dist/models/serializers';
 import { serializeUserSecurely } from '@growi/core/dist/models/serializers';
 import { userHomepagePath } from '@growi/core/dist/utils/page-path-utils';
 import { userHomepagePath } from '@growi/core/dist/utils/page-path-utils';
+import escapeStringRegexp from 'escape-string-regexp';
 import express from 'express';
 import express from 'express';
 import { body, query } from 'express-validator';
 import { body, query } from 'express-validator';
 import { isEmail } from 'validator';
 import { isEmail } from 'validator';
@@ -28,7 +28,6 @@ const logger = loggerFactory('growi:routes:apiv3:users');
 
 
 const router = express.Router();
 const router = express.Router();
 
 
-
 const PAGE_ITEMS = 50;
 const PAGE_ITEMS = 50;
 
 
 const validator = {};
 const validator = {};
@@ -290,15 +289,25 @@ module.exports = (crowi) => {
   router.get('/', accessTokenParser, loginRequired, validator.statusList, apiV3FormValidator, async(req, res) => {
   router.get('/', accessTokenParser, loginRequired, validator.statusList, apiV3FormValidator, async(req, res) => {
 
 
     const page = parseInt(req.query.page) || 1;
     const page = parseInt(req.query.page) || 1;
+
+    // forceIncludeAttributes is expected to be an array by express-validator
+    if (req.query.forceIncludeAttributes != null && !Array.isArray(req.query.forceIncludeAttributes)) {
+      return res.apiv3Err(new ErrorV3('forceIncludeAttributes is not an array'), 400);
+    }
+    // selectedStatusList is expected to be an array by express-validator
+    if (req.query.selectedStatusList != null && !Array.isArray(req.query.selectedStatusList)) {
+      return res.apiv3Err(new ErrorV3('selectedStatusList is not an array'), 400);
+    }
+
     // status
     // status
-    const { forceIncludeAttributes } = req.query;
-    const selectedStatusList = req.query.selectedStatusList || ['active'];
+    const forceIncludeAttributes = req.query.forceIncludeAttributes ?? [];
+    const selectedStatusList = req.query.selectedStatusList ?? ['active'];
 
 
     const statusNoList = (selectedStatusList.includes('all')) ? Object.values(statusNo) : selectedStatusList.map(element => statusNo[element]);
     const statusNoList = (selectedStatusList.includes('all')) ? Object.values(statusNo) : selectedStatusList.map(element => statusNo[element]);
 
 
     // Search from input
     // Search from input
     const searchText = req.query.searchText || '';
     const searchText = req.query.searchText || '';
-    const searchWord = new RegExp(`${searchText}`);
+    const searchWord = new RegExp(escapeStringRegexp(searchText));
     // Sort
     // Sort
     const { sort, sortOrder } = req.query;
     const { sort, sortOrder } = req.query;
     const sortOutput = {
     const sortOutput = {