Skip to content

Commit 5f1edb0

Browse files
committed
add query validator middleware
1 parent e68b759 commit 5f1edb0

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

src/middlewares/queryValidator.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// queryValidator.js
2+
3+
const { user_types_query } = require('@src/constants/userTypes')
4+
5+
const isValidEmail = (email) => {
6+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
7+
return emailRegex.test(email)
8+
}
9+
10+
const isValidUsername = (username) => {
11+
const usernameRegex = /^[a-z]+\.[a-z]+$/
12+
return usernameRegex.test(username)
13+
}
14+
15+
const validateUserType = (userType) => {
16+
if (!!userType && !user_types_query.includes(userType)) {
17+
throw new Error(
18+
`Invalid userType, only "${user_types_query[0]}", "${user_types_query[1]}", and "${user_types_query[2]}" are allowed.`
19+
)
20+
}
21+
}
22+
23+
const validateQuery = (query) => {
24+
validateUserType(query.userType)
25+
26+
if (query.ci && !/^\d{8,10}$/.test(query.ci)) {
27+
throw new Error('Invalid ci parameter')
28+
}
29+
30+
if (query.email && !isValidEmail(query.email)) {
31+
throw new Error('Invalid email parameter')
32+
}
33+
34+
if (query.username && !isValidUsername(query.username)) {
35+
throw new Error('Invalid username parameter')
36+
}
37+
38+
// Add more validations as needed
39+
40+
return true
41+
}
42+
43+
module.exports = validateQuery

src/routes/user.routes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const config = require('@src/config/config')
88
const {
99
createLdapFilterFromQuery,
1010
} = require('@src/helpers/convertQueryToFilter')
11+
const validateQuery = require('@src/middlewares/queryValidator')
1112

1213
// Middleware for routes requiring checkAuth and checkRoles('admin')
1314
router.use(checkAuth, checkRoles('admin'))
@@ -19,6 +20,7 @@ router.use(validateResponse)
1920
router.get('/', async (req, res) => {
2021
try {
2122
const baseDN = `${config.ldap.base}`
23+
const isValid = validateQuery(req.query)
2224
const queryFilter = createLdapFilterFromQuery(req.query)
2325
const ldapFilter = `(&(objectClass=person)${queryFilter})`
2426

0 commit comments

Comments
 (0)