From f877dbd29e0c66dc61ba3882e8f583dd8377431c Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Mon, 25 Jul 2016 14:45:51 -0300 Subject: [PATCH] Cache: Fix queries with regex --- .../server/startup/cache/_Base.js | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/packages/rocketchat-lib/server/startup/cache/_Base.js b/packages/rocketchat-lib/server/startup/cache/_Base.js index c46310a1aa6..18b440674ee 100644 --- a/packages/rocketchat-lib/server/startup/cache/_Base.js +++ b/packages/rocketchat-lib/server/startup/cache/_Base.js @@ -516,7 +516,33 @@ RocketChat.cache._Base = (class CacheBase extends EventEmitter { return result; } + processQuery(query) { + if (!query) { + return query; + } + + for (const field in query) { + if (query.hasOwnProperty(field)) { + const value = query[field]; + if (value instanceof RegExp) { + query[field] = { + $regex: value + }; + } + + if (field === '$and' || field === '$or') { + query[field] = value.map((subValue) => { + return this.processQuery(subValue); + }); + } + } + } + + return query; + } + find(query, options={}) { + query = this.processQuery(query); return { fetch: () => { return this.processQueryOptionsOnResult(this.collection.find(query), options); @@ -533,10 +559,12 @@ RocketChat.cache._Base = (class CacheBase extends EventEmitter { } findOne(query, options) { + query = this.processQuery(query); return this.processQueryOptionsOnResult(this.collection.findOne(query), options); } findWhere(query, options) { + query = this.processQuery(query); return this.processQueryOptionsOnResult(this.collection.findWhere(query), options); }