Skip to content
This repository was archived by the owner on Mar 13, 2025. It is now read-only.

Commit 6f18893

Browse files
Merge pull request #18 from ansaryfantastic/develop
u-bahn-app #295
2 parents b0b3d32 + 2853a7a commit 6f18893

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/common/es-helper.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const config = require('config')
22
const _ = require('lodash')
3+
const querystring = require('querystring')
34
const logger = require('../common/logger')
45
const groupApi = require('./group-api')
56
const appConst = require('../consts')
@@ -705,6 +706,15 @@ function buildEsQueryFromFilter (filter) {
705706
return setFilterValueToEsQuery(esQuery, matchField, filter.value, filter.queryField)
706707
}
707708

709+
/**
710+
* Returns if char is one of the reserved regex characters
711+
* @param {*} char the char to check
712+
*/
713+
function isRegexReserved (char) {
714+
const reserved = '[^$.|?*+(){}\\'
715+
return reserved.indexOf(char) !== -1
716+
}
717+
708718
/**
709719
* Build ES Query to get attribute values by attributeId
710720
* @param attributeId the attribute whose values to fetch
@@ -735,7 +745,7 @@ function buildEsQueryToGetAttributeValues (attributeId, attributeValue, size) {
735745
values: {
736746
terms: {
737747
field: USER_ATTRIBUTE.esDocumentValueQuery,
738-
include: `.*${attributeValue.replace(/[A-Za-z]/g, c => `[${c.toLowerCase()}${c.toUpperCase()}]`)}.*`,
748+
include: `.*${attributeValue.replace(/[^a-zA-Z]/g, c => `[${!isRegexReserved(c) ? c : '\\' + c}]`).replace(/[A-Za-z]/g, c => `[${c.toLowerCase()}${c.toUpperCase()}]`)}.*`,
739749
order: {
740750
_key: 'asc'
741751
},
@@ -1175,6 +1185,7 @@ async function searchUsers (authUser, filter, params) {
11751185

11761186
const authUserOrganizationId = filter.organizationId
11771187
const filterKey = Object.keys(userFilters)
1188+
11781189
for (const key of filterKey) {
11791190
const resolved = await resolveUserFilterFromDb(userFilters[key], authUser, authUserOrganizationId)
11801191
resolvedUserFilters.push(resolved)
@@ -1257,11 +1268,11 @@ async function searchUsers (authUser, filter, params) {
12571268
* @param {Object} param0 The attribute id and the attribute value properties
12581269
*/
12591270
async function searchAttributeValues ({ attributeId, attributeValue }) {
1260-
const esQuery = buildEsQueryToGetAttributeValues(attributeId, attributeValue, 5)
1271+
const esQuery = buildEsQueryToGetAttributeValues(attributeId, querystring.unescape(attributeValue), 5)
12611272
logger.debug(`ES query for searching attribute values: ${JSON.stringify(esQuery, null, 2)}`)
12621273

12631274
const esResult = await esClient.search(esQuery)
1264-
1275+
logger.debug(`ES Result: ${JSON.stringify(esResult, null, 2)}`)
12651276
const result = []
12661277
const attributes = esResult.aggregations.attributes.ids.buckets
12671278

0 commit comments

Comments
 (0)