diff --git a/app.js b/app.js index 877ef99..849701b 100644 --- a/app.js +++ b/app.js @@ -88,6 +88,11 @@ app.use(function (req, res, next) { }); +const utils = require('utils/utils'); +app.use( function( req, res, next ) { + req = utils.findQueryString(req); + next(); +}); // get BE api configs diff --git a/controllers/mongo-db/mongoConnect.js b/controllers/mongo-db/mongoConnect.js index 2544b89..3a0170e 100644 --- a/controllers/mongo-db/mongoConnect.js +++ b/controllers/mongo-db/mongoConnect.js @@ -51,7 +51,6 @@ function mongoReq(req, query, collection){ }); }); }); - } diff --git a/controllers/mongo-db/query.js b/controllers/mongo-db/query.js index 83c75a5..de45e5a 100644 --- a/controllers/mongo-db/query.js +++ b/controllers/mongo-db/query.js @@ -1,12 +1,22 @@ let express = require('express'); let router = express.Router(); let connection = require("./mongoConnect.js") - +var parseFilter = require('ldapjs').parseFilter; +let utils = require('../../utils/utils') router.get('/',async function (req, res) { - var query = Object.assign(req.params, req.query); - var result = await connection.reqMongo(req, query) - res.status(200).json(result); + + var filter = parseFilter(req.query.filter) + + // var objectData = Object.assign(req.query,req.params); + // var filter = utils.getUpdateFilter(objectData); + + var query = await utils.getQuery(filter); + console.log(query) + + // var query = Object.assign(req.params, req.query); + var result = await connection.reqMongo(req, query, 'config') + res.status(200).send(result); }); router.post('/', (req, res) => { diff --git a/package-lock.json b/package-lock.json index c352d1e..09616cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,6 +88,20 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "backoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", + "requires": { + "precond": "0.2.3" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "optional": true + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -154,11 +168,32 @@ "hoek": "2.16.3" } }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "optional": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, "bson": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.0.tgz", "integrity": "sha512-9Aeai9TacfNtWXOYarkFJRW2CWo+dRon+fuLZYJmvLV3+MiUp0bEI6IAZfXEIg7/Pl/7IWlLaDnhzTsD81etQA==" }, + "bunyan": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", + "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", + "requires": { + "dtrace-provider": "0.8.7", + "moment": "2.22.2", + "mv": "2.1.1", + "safe-json-stringify": "1.2.0" + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -281,6 +316,12 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "optional": true + }, "connect-flash": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz", @@ -435,6 +476,15 @@ "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" }, + "dtrace-provider": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", + "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", + "optional": true, + "requires": { + "nan": "2.11.1" + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -689,6 +739,19 @@ } } }, + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "optional": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, "har-validator": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", @@ -777,6 +840,16 @@ "pope": "1.0.5" } }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -898,6 +971,50 @@ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" }, + "ldap-filter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ldap-filter/-/ldap-filter-0.2.2.tgz", + "integrity": "sha1-8rhCvguG2jNSeYUFsx68rlkNd9A=", + "requires": { + "assert-plus": "0.1.5" + }, + "dependencies": { + "assert-plus": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", + "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=" + } + } + }, + "ldapjs": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ldapjs/-/ldapjs-1.0.2.tgz", + "integrity": "sha1-VE/3Ayt7g8aPBwEyjZKXqmlDQPk=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "backoff": "2.5.0", + "bunyan": "1.8.12", + "dashdash": "1.14.1", + "dtrace-provider": "0.8.7", + "ldap-filter": "0.2.2", + "once": "1.4.0", + "vasync": "1.6.4", + "verror": "1.10.0" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + } + } + }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", @@ -998,6 +1115,15 @@ "mime-db": "1.36.0" } }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "optional": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, "minimist": { "version": "0.0.8", "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", @@ -1041,6 +1167,29 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "ncp": "2.0.0", + "rimraf": "2.4.5" + } + }, + "nan": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "optional": true + }, + "ncp": { + "version": "2.0.0", + "resolved": "http://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "optional": true + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -1074,6 +1223,14 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, "one-time": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", @@ -1166,6 +1323,12 @@ "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "optional": true + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -1199,6 +1362,11 @@ "resolved": "https://registry.npmjs.org/pope/-/pope-1.0.5.tgz", "integrity": "sha512-53FgeyiX79LOvZvviqFSLFT3otSRIpPv4uTDRscoWaJlr1LWCaTB+ouhvCouj08Ag28pM18FZv9Y2+wmimILAA==" }, + "precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=" + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -1378,11 +1546,26 @@ "align-text": "0.1.4" } }, + "rimraf": { + "version": "2.4.5", + "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "optional": true, + "requires": { + "glob": "6.0.4" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "optional": true + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1661,6 +1844,29 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "vasync": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/vasync/-/vasync-1.6.4.tgz", + "integrity": "sha1-3+k2Fq0OeugBszKp2Iv8XNyOHR8=", + "requires": { + "verror": "1.6.0" + }, + "dependencies": { + "extsprintf": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz", + "integrity": "sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk=" + }, + "verror": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz", + "integrity": "sha1-fROyex+swuLakEBetepuW90lLqU=", + "requires": { + "extsprintf": "1.2.0" + } + } + } + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -1721,6 +1927,11 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, "xml-crypto": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/xml-crypto/-/xml-crypto-0.10.1.tgz", diff --git a/package.json b/package.json index 7d27e7c..170a68a 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "express-request-id": "^1.4.1", "express-session": "^1.15.6", "indicative": "^3.0.6", + "ldapjs": "^1.0.2", "log4js": "^3.0.6", "moment": "^2.22.2", "mongodb": "^3.1.8", diff --git a/utils/utils.js b/utils/utils.js new file mode 100644 index 0000000..32ef64a --- /dev/null +++ b/utils/utils.js @@ -0,0 +1,174 @@ + + +utils = {}; + + +utils.findQueryString = function(req) +{ + var keywords = ["filter","offset","orderby","limit","fields"]; + + var baseUrl = decodeURIComponent(req.url); + + if(baseUrl && baseUrl.indexOf("filter=(") != -1) + { + baseUrl = "&"+baseUrl.split("?")[1]; + + var indexList = []; + var listData = {}; + for(var i=0;i= + case 'le': operate = '$lte'; break;//<= + case 'approx' : operate = '$in'; break; + default : operate = "$"+temFilter[i].type; break; + } + + switch(operate){ + case '$present' : + break; + case '$substring' : + // if(temFilter[i].initial){ + // query += temFilter[i].attribute +" LIKE '"+ temFilter[i].initial + "%'" + // } else if(temFilter[i].final){ + // query += temFilter[i].attribute +" LIKE '%" + temFilter[i].final + "'" + // } else { + // var any = "%"; + // for(var j = 0; j < temFilter[i].any.length; j++){ + // any += temFilter[i].any[j]+"%"; + // } + // query += temFilter[i].attribute +" LIKE '" + any + "'" + // } + break; + default : + // query += temFilter[i].attribute +" "+ operate +" "+ temFilter[i].value; + var regexValue = new RegExp(temFilter[i].value,"g") + if(data.type == 'or'){ + var objOr = {} + var attribute = temFilter[i].attribute; + objOr[attribute] = regexValue + if(!query['$or']) + query['$or'] = [] + query['$or'].push(objOr) + } else { + var attribute = temFilter[i].attribute; + query[attribute] = regexValue + } + // query = Object.assign(obj, obj) + break; + } + // query += temFilter[i].attribute +" "+ operate +" "+ temFilter[i].value; + } + // if(i != temFilter.length-1) + // query += " "+data.type.toUpperCase()+" " + } + return query; +} + +function findValueInBracket(data) +{ + data = data.substring(1,data.length-1); + var returnData = {}; + + + if(data.indexOf("&") == -1 && data.indexOf("|") == -1) + { + //single data + var t = data.split("="); + returnData[t[0]] = t[1]; + + }else + { + //multi data + var left = []; + var splitData = data.split(""); + for(var i=0;i