Commit 78146367 by Chavee Issariyapat

Merge branch 'alpha-test' into 'master'

merge request from alpha test

See merge request !2
parents 00bd19a8 80fff711
...@@ -7,9 +7,9 @@ var LRU = require("lru-cache"), ...@@ -7,9 +7,9 @@ var LRU = require("lru-cache"),
}); });
// for testing // for testing
function authCheck(client_id, username, topic, callback) { // function authCheck(client_id, username, topic, callback) {
callback(true); // callback(true);
} // }
module.exports = function (options = {}) { module.exports = function (options = {}) {
return function (req, res, next) { return function (req, res, next) {
...@@ -25,13 +25,24 @@ module.exports = function (options = {}) { ...@@ -25,13 +25,24 @@ module.exports = function (options = {}) {
var cachekey = 'pub:' + req.body.client_id + ':' + req.body.username + ':' + topic; var cachekey = 'pub:' + req.body.client_id + ':' + req.body.username + ':' + topic;
var authstatus = cache.get(cachekey); var authstatus = cache.get(cachekey);
if (typeof (authstatus) === 'undefined') {
cache.set(cachekey, true); // cache missed
}
var response
// Set Response var decoded = require('./checkClientRole').checkRealDB(req.body.username)
var getGroupID = require('./utils/getGroupID').getGroupID if (decoded) {
getGroupID(req.body.username, req.body.client_id, (_id) => { // get groupID if (decoded.role === 'realtimedb') response = { 'result': 'ok' }
// console.log(_id) else response = { 'result': 'no' }
var _ftopic = require('./utils/getTopic').getTopic(topic, _id) // get topic where concat with groupID res.send(response);
var response = { next();
}
else {
var output = {};
var _id = require('./utils/getGroupID').getGroupID(req.body.username, req.body.client_id)
var _ftopic = require('./utils/getTopic').rewriteTopic(topic, 'pub', _id, req.body.client_id, output); // get topic where concat with groupID
response = {
'result': 'ok', 'result': 'ok',
'modifiers': { 'modifiers': {
'topic': _ftopic, 'topic': _ftopic,
...@@ -39,26 +50,16 @@ module.exports = function (options = {}) { ...@@ -39,26 +50,16 @@ module.exports = function (options = {}) {
'retain': false 'retain': false
} }
} }
console.log(response) if (output.verb == 'get' || output.verb == 'read') {
response.modifiers.payload = Buffer.from(req.body.client_id).toString('base64');
if (typeof (authstatus) == 'undefined') {
// cache missed
authCheck(req.body.client_id, req.body.username, topic, function (result) {
cache.set(cachekey, result);
res.send(response);
});
}
else {
res.send(response);
} }
res.send(response);
next(); next();
}) }
} }
else { else {
res.send({ res.send({ "result": "no" });
"result": "no"
});
next(); next();
} }
} }
} }
\ No newline at end of file
var config = require('config'); var config = require('config');
var checkRealDB = require('./checkClientRole').checkRealDB
var getRole = require('./checkClientRole').getRole
// https://github.com/isaacs/node-lru-cache // https://github.com/isaacs/node-lru-cache
var LRU = require("lru-cache"), var LRU = require("lru-cache"),
...@@ -10,54 +8,41 @@ var LRU = require("lru-cache"), ...@@ -10,54 +8,41 @@ var LRU = require("lru-cache"),
}); });
var debug = false; var debug = false;
var authclient = require('seneca')({log: 'silent'}) var authclient = require('seneca')({ log: 'silent' })
.client({port: config.get('authserv_port'), host: config.get('authserv_host')}); .client({ port: config.get('authserv_port'), host: config.get('authserv_host') });
function authCheck(client_id, token, password, callback) { function authCheck(client_id, token, password, callback) {
checkRealDB(token, (err, decoded) => { if (require('./checkClientRole').checkRealDB(token)) { // auth realtimedb by token
/* callback(true)
* decode.scope }
* decode.iat else {
* decode.exp if (require('./checkClientRole').getRole(token)) callback(true) // auth client device by token
*/ else {
if (err) { authclient.act({ role: 'auth', cmd: 'token', action: 'info', token: token }, function (err, res) { // auth client device by query from db
if (debug) {
getRole(token, (role) => { console.log("res ------>\n");
if (role === false) { console.log(res);
}
authclient.act({role:'auth',cmd:'token',action:'info',token: token}, function(err, res) {
if (debug) {
console.log("res ------>\n");
console.log(res);
}
if (res && res.data) { if (res && res.data) {
try { try {
var jdata = JSON.parse(res.data); var jdata = JSON.parse(res.data);
if (jdata && jdata.code == 200) { if (jdata && jdata.code == 200) {
callback(true);
}
else callback(false);
} catch (e) {
callback(false);
}
callback(true); callback(true);
} }
else { else callback(false);
callback(false); } catch (e) {
} callback(false);
}); }
callback(true);
} }
else callback(true) else {
}) callback(false);
} }
else { });
callback(true)
} }
}
})
} }
module.exports = function (options = {}) { module.exports = function (options = {}) {
......
...@@ -9,9 +9,9 @@ var LRU = require("lru-cache"), ...@@ -9,9 +9,9 @@ var LRU = require("lru-cache"),
var debug = false; var debug = false;
// for testing // for testing
function authCheck(client_id, token, topic, callback) { // function authCheck(client_id, token, topic, callback) {
callback(true); // callback(true);
} // }
module.exports = function (options = {}) { module.exports = function (options = {}) {
...@@ -30,42 +30,36 @@ module.exports = function (options = {}) { ...@@ -30,42 +30,36 @@ module.exports = function (options = {}) {
var cachekey = 'sub:' + req.body.client_id + ':' + req.body.username + ':' + topic; var cachekey = 'sub:' + req.body.client_id + ':' + req.body.username + ':' + topic;
var authstatus = cache.get(cachekey); var authstatus = cache.get(cachekey);
if (typeof (authstatus) == 'undefined') {
cache.set(cachekey, true); // cache missed
}
var response
var decoded = require('./checkClientRole').checkRealDB(req.body.username)
// checkRole if (decoded) {
var role = require('./checkClientRole') if (decoded.role === 'realtimedb') response = { 'result': 'ok' }
// Set Response else response = { 'result': 'no' }
var getGroupID = require('./utils/getGroupID').getGroupID res.send(response);
getGroupID(req.body.username, req.body.client_id, (_id) => { // get groupID next();
// console.log(_id) }
var _ftopic = require('./utils/getTopic').getTopic(topic, _id) // get topic where concat with groupID else {
var _id = require('./utils/getGroupID').getGroupID(req.body.username, req.body.client_id)
var _ftopic = require('./utils/getTopic').rewriteTopic(topic, 'sub', _id, req.body.client_id) // get topic where concat with groupID
var _topic = [{ // setTopic for response var _topic = [{ // setTopic for response
'topic': _ftopic, 'topic': _ftopic,
'qos': 0 'qos': 0
}] }]
var response = { response = {
'result': 'ok', 'result': 'ok',
'topics': _topic 'topics': _topic
}
if (typeof (authstatus) == 'undefined') {
// cache missed
authCheck(req.body.client_id, req.body.username, topic, function (result) {
cache.set(cachekey, result);
res.send(response);
});
}
else {
res.send(response);
} }
res.send(response);
next(); next();
}) }
} }
else { else {
res.send({ res.send({ "result": "no" });
"result": "no"
});
next(); next();
} }
} }
} }
var jwt = require('jsonwebtoken') var jwt = require('jsonwebtoken')
var config = require('config') var config = require('config')
var getExp = require('./utils/getDates').getExp
function checkRealDB(token, cb) { module.exports.checkRealDB = checkRealDB
module.exports.getRole = getRole
module.exports.signRole = signRole
function checkRealDB(token) {
const verifyOptions = { const verifyOptions = {
algorithms: ['RS256'] algorithms: ['RS256']
}; };
jwt.verify(token, config.get('pubca'), verifyOptions, (err, decoded) => { try {
cb(err, decoded) return jwt.verify(token, config.get('pubca'), verifyOptions)
}) }
catch(e) {
return false
}
} }
module.exports.checkRealDB = checkRealDB
function getRole(token, cb) { function getRole(token) {
var secret = 'nexpie' var secret = 'nexpie'
jwt.verify(token, secret, (err, decoded) => { try {
if (err) { return jwt.verify(token, secret)
// console.log(err) }
cb(false) catch(e) {
} return false
else { }
// console.log(decoded)
cb(decoded)
}
})
} }
module.exports.getRole = getRole
function signRole(req, res) { function signRole(req, res) {
var secret = 'nexpie' var secret = 'nexpie'
...@@ -39,45 +41,4 @@ function signRole(req, res) { ...@@ -39,45 +41,4 @@ function signRole(req, res) {
else { else {
res.send('role not complete') res.send('role not complete')
} }
}
module.exports.signRole = signRole
function getExp(expires) {
var exp
if (expires.endsWith('y')) {
exp = getYears(expires.split('y')[0])
}
else if (expires.endsWith('m')) {
exp = getMonths(expires.split('m')[0])
}
else if (expires.endsWith('d')) {
exp = expires.split('d')[0] + 'd'
}
else if (expires.endsWith('h')) {
exp = expires.split('h')[0] + 'h'
}
else if (expires.endsWith('mi')) {
exp = getMinutes(expires.split('mi')[0])
}
else if (expires.endsWith('s')) {
exp = getSeconds(expires.split('s')[0])
}
else exp = getYears(10)
return exp
}
function getMonths(d) {
return (d * 30) + 'd'
}
function getYears(m) {
return (m * 30 * 12) + 'd'
}
function getMinutes(mi) {
return (mi * 1000 * 60) + 'ms'
}
function getSeconds(ms) {
return (ms * 1000) + 'ms'
} }
\ No newline at end of file
...@@ -2,9 +2,9 @@ process.env["NODE_ENV"] = "development"; ...@@ -2,9 +2,9 @@ process.env["NODE_ENV"] = "development";
process.env["NODE_CONFIG_DIR"] = __dirname + "/config/"; process.env["NODE_CONFIG_DIR"] = __dirname + "/config/";
var auth_on_register_debug = process.env["AUTH_ON_REGISTER_DEBUG"] || false; var auth_on_register_debug = process.env["AUTH_ON_REGISTER_DEBUG"] || false;
var auth_on_publish_debug = process.env["AUTH_ON_PUBLISH_DEBUG"] || false; var auth_on_publish_debug = process.env["AUTH_ON_PUBLISH_DEBUG"] || true;
var auth_on_subscribe_debug = process.env["AUTH_ON_SUBSCRIBE_DEBUG"] || false; var auth_on_subscribe_debug = process.env["AUTH_ON_SUBSCRIBE_DEBUG"] || true;
var on_publish_debug = process.env["ON_PUBLISH_DEBUG"] || false; var on_publish_debug = process.env["ON_PUBLISH_DEBUG"] || true;
var restify = require('restify'); var restify = require('restify');
var auth_on_register = require('./auth_on_register')({ debug: auth_on_register_debug }); var auth_on_register = require('./auth_on_register')({ debug: auth_on_register_debug });
...@@ -13,6 +13,7 @@ var auth_on_subscribe = require('./auth_on_subscribe')({ debug: auth_on_subscrib ...@@ -13,6 +13,7 @@ var auth_on_subscribe = require('./auth_on_subscribe')({ debug: auth_on_subscrib
var on_publish = require('./on_publish')({ debug: on_publish_debug }); var on_publish = require('./on_publish')({ debug: on_publish_debug });
var on_deliver = require('./on_deliver').on_deliver var on_deliver = require('./on_deliver').on_deliver
var signRole = require('./checkClientRole').signRole var signRole = require('./checkClientRole').signRole
var on_unsubscribe = require('./on_unsubscribe').on_unsubscribe
const server = restify.createServer({ const server = restify.createServer({
name: 'authhook', name: 'authhook',
...@@ -35,6 +36,11 @@ server.get('/about', function (req, res, next) { ...@@ -35,6 +36,11 @@ server.get('/about', function (req, res, next) {
server.post('/authreg', auth_on_register); server.post('/authreg', auth_on_register);
server.post('/authpub', auth_on_publish); server.post('/authpub', auth_on_publish);
server.post('/authsub', auth_on_subscribe); server.post('/authsub', auth_on_subscribe);
server.post('/onsub', (req,res,next) => {
console.log(req.body)
res.send('')
})
server.post('/onunsub', on_unsubscribe)
server.post('/ondeliver', on_deliver) server.post('/ondeliver', on_deliver)
server.post('/onpub', on_publish) server.post('/onpub', on_publish)
server.post('/signRole', signRole) server.post('/signRole', signRole)
......
var modify = require('./utils/modify');
function on_deliver(req, res, next) { function on_deliver(req, res, next) {
var topics = beDesireTopic(req.body.topic) console.log('----on_deliver-----')
var topics = modify.removeTempWordInTopic(req.body.topic)
console.log(req.body)
// console.log(topics)
var response = { var response = {
'result': 'ok', 'result': 'ok',
'modifiers': { 'modifiers': {
"topic": topics "topic": topics
} }
} }
console.log(response);
res.send(response) res.send(response)
} }
module.exports.on_deliver = on_deliver module.exports.on_deliver = on_deliver
function hasGroup(topics) {
if (topics.indexOf('!') > -1) {
return true
}
else return false
}
function beDesireTopic(topics) {
if (hasGroup(topics)) {
return joinTopic(topics)
}
else return topics
}
function joinTopic(topics) { function joinTopic(topics) {
var topic = topics.split('/!')[1] var topic = topics.split('/!')[1]
return topics.split('/!')[0] + topic.substring(topic.indexOf('/'), topic.length) return topics.split('/!')[0] + topic.substring(topic.indexOf('/'), topic.length)
} }
\ No newline at end of file module.exports.joinTopic = joinTopic
\ No newline at end of file
...@@ -14,7 +14,7 @@ module.exports = function(options={}) { ...@@ -14,7 +14,7 @@ module.exports = function(options={}) {
console.log('on_publish-------------'); console.log('on_publish-------------');
console.log(req.body); console.log(req.body);
} }
console.log(req.body)
var topic = req.body.topic; var topic = req.body.topic;
var cachekey = 'pub:'+req.body.client_id +':'+ req.body.username+':'+topic; var cachekey = 'pub:'+req.body.client_id +':'+ req.body.username+':'+topic;
......
function on_unsubscribe(req, res, next) {
console.log('------on unsubscribe-------')
console.log(req.body)
var topic = req.body.topics[0];
var token = req.body.username
var client_id = req.body.client_id
var response
var decoded = require('./checkClientRole').checkRealDB(token)
if (decoded) {
if (decoded.role === 'realtimedb') {
response = { 'result': 'ok' }
}
else response = { 'result': 'no' }
res.send(response);
next()
}
else {
var _id = require('./utils/getGroupID').getGroupID(token, client_id)
if (_id) {
var _ftopic = require('./utils/getTopic').rewriteTopic(topic, 'unsub', _id, client_id)
response = {
"result": "ok",
"topics": [_ftopic]
}
}
else response = { 'result': 'no' }
res.send(response);
next()
}
}
module.exports.on_unsubscribe = on_unsubscribe
\ No newline at end of file
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
"requires": { "requires": {
"safer-buffer": "2.1.2" "safer-buffer": "~2.1.0"
} }
}, },
"assert-plus": { "assert-plus": {
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
"resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz",
"integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=",
"requires": { "requires": {
"precond": "0.2.3" "precond": "0.2"
} }
}, },
"balanced-match": { "balanced-match": {
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
"optional": true, "optional": true,
"requires": { "requires": {
"tweetnacl": "0.14.5" "tweetnacl": "^0.14.3"
} }
}, },
"boom": { "boom": {
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
"resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
"integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
"requires": { "requires": {
"hoek": "4.2.1" "hoek": "4.x.x"
} }
}, },
"brace-expansion": { "brace-expansion": {
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": { "requires": {
"balanced-match": "1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
} }
}, },
...@@ -77,10 +77,10 @@ ...@@ -77,10 +77,10 @@
"resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.12.tgz",
"integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=", "integrity": "sha1-8VDw9nSKvdcq6uhPBEA74u8RN5c=",
"requires": { "requires": {
"dtrace-provider": "0.8.7", "dtrace-provider": "~0.8",
"moment": "2.22.2", "moment": "^2.10.6",
"mv": "2.1.1", "mv": "~2",
"safe-json-stringify": "1.2.0" "safe-json-stringify": "~1"
} }
}, },
"commander": { "commander": {
...@@ -99,7 +99,7 @@ ...@@ -99,7 +99,7 @@
"resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz", "resolved": "https://registry.npmjs.org/config/-/config-1.31.0.tgz",
"integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==", "integrity": "sha512-Ep/l9Rd1J9IPueztJfpbOqVzuKHQh4ZODMNt9xqTYdBBNRXbV4oTu34kCkkfdRVcDq0ohtpaeXGgb+c0LQxFRA==",
"requires": { "requires": {
"json5": "1.0.1" "json5": "^1.0.1"
} }
}, },
"core-util-is": { "core-util-is": {
...@@ -112,10 +112,10 @@ ...@@ -112,10 +112,10 @@
"resolved": "https://registry.npmjs.org/csv/-/csv-1.2.1.tgz", "resolved": "https://registry.npmjs.org/csv/-/csv-1.2.1.tgz",
"integrity": "sha1-UjHt/BxxUlEuxFeBB2p6l/9SXAw=", "integrity": "sha1-UjHt/BxxUlEuxFeBB2p6l/9SXAw=",
"requires": { "requires": {
"csv-generate": "1.1.2", "csv-generate": "^1.1.2",
"csv-parse": "1.3.3", "csv-parse": "^1.3.3",
"csv-stringify": "1.1.2", "csv-stringify": "^1.1.2",
"stream-transform": "0.2.2" "stream-transform": "^0.2.2"
} }
}, },
"csv-generate": { "csv-generate": {
...@@ -133,7 +133,7 @@ ...@@ -133,7 +133,7 @@
"resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-1.1.2.tgz", "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-1.1.2.tgz",
"integrity": "sha1-d6QVJlgbzjOA8SsA18W7rHDIK1g=", "integrity": "sha1-d6QVJlgbzjOA8SsA18W7rHDIK1g=",
"requires": { "requires": {
"lodash.get": "4.4.2" "lodash.get": "~4.4.2"
} }
}, },
"dashdash": { "dashdash": {
...@@ -141,7 +141,7 @@ ...@@ -141,7 +141,7 @@
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"requires": { "requires": {
"assert-plus": "1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"debug": { "debug": {
...@@ -169,7 +169,7 @@ ...@@ -169,7 +169,7 @@
"integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=", "integrity": "sha1-3JObTT4GIM/gwc2APQ0tftBP/QQ=",
"optional": true, "optional": true,
"requires": { "requires": {
"nan": "2.11.0" "nan": "^2.10.0"
} }
}, },
"ecc-jsbn": { "ecc-jsbn": {
...@@ -178,8 +178,8 @@ ...@@ -178,8 +178,8 @@
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
"optional": true, "optional": true,
"requires": { "requires": {
"jsbn": "0.1.1", "jsbn": "~0.1.0",
"safer-buffer": "2.1.2" "safer-buffer": "^2.1.0"
} }
}, },
"ecdsa-sig-formatter": { "ecdsa-sig-formatter": {
...@@ -187,7 +187,7 @@ ...@@ -187,7 +187,7 @@
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz",
"integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=", "integrity": "sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM=",
"requires": { "requires": {
"safe-buffer": "5.1.2" "safe-buffer": "^5.0.1"
} }
}, },
"eraro": { "eraro": {
...@@ -195,7 +195,7 @@ ...@@ -195,7 +195,7 @@
"resolved": "https://registry.npmjs.org/eraro/-/eraro-1.0.0.tgz", "resolved": "https://registry.npmjs.org/eraro/-/eraro-1.0.0.tgz",
"integrity": "sha512-JeEqKyNgOxZNji2otWWDCDu1sWqGkrIBBhoGQH0LrPZObccQW8CoD94xkOtpmmlHeY/frG8IwR+jeCS8SQA/Xw==", "integrity": "sha512-JeEqKyNgOxZNji2otWWDCDu1sWqGkrIBBhoGQH0LrPZObccQW8CoD94xkOtpmmlHeY/frG8IwR+jeCS8SQA/Xw==",
"requires": { "requires": {
"lodash": "4.17.10" "lodash": "4.17"
} }
}, },
"escape-regexp-component": { "escape-regexp-component": {
...@@ -214,7 +214,7 @@ ...@@ -214,7 +214,7 @@
"resolved": "https://registry.npmjs.org/ewma/-/ewma-2.0.1.tgz", "resolved": "https://registry.npmjs.org/ewma/-/ewma-2.0.1.tgz",
"integrity": "sha512-MYYK17A76cuuyvkR7MnqLW4iFYPEi5Isl2qb8rXiWpLiwFS9dxW/rncuNnjjgSENuVqZQkIuR4+DChVL4g1lnw==", "integrity": "sha512-MYYK17A76cuuyvkR7MnqLW4iFYPEi5Isl2qb8rXiWpLiwFS9dxW/rncuNnjjgSENuVqZQkIuR4+DChVL4g1lnw==",
"requires": { "requires": {
"assert-plus": "1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"extsprintf": { "extsprintf": {
...@@ -232,9 +232,9 @@ ...@@ -232,9 +232,9 @@
"resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-1.15.2.tgz", "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-1.15.2.tgz",
"integrity": "sha512-mngORPD+dxVhaZWB3nv2VE4J7ch1Mm4VcwNuYnixgZeHMfJujbOJ6CCWxDdI41WS4MykPYUA3aTCyux60sy4VQ==", "integrity": "sha512-mngORPD+dxVhaZWB3nv2VE4J7ch1Mm4VcwNuYnixgZeHMfJujbOJ6CCWxDdI41WS4MykPYUA3aTCyux60sy4VQ==",
"requires": { "requires": {
"fast-decode-uri-component": "1.0.0", "fast-decode-uri-component": "^1.0.0",
"safe-regex": "1.1.0", "safe-regex": "^1.1.0",
"semver-store": "0.3.0" "semver-store": "^0.3.0"
} }
}, },
"formidable": { "formidable": {
...@@ -258,7 +258,7 @@ ...@@ -258,7 +258,7 @@
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"requires": { "requires": {
"assert-plus": "1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"gex": { "gex": {
...@@ -266,7 +266,7 @@ ...@@ -266,7 +266,7 @@
"resolved": "https://registry.npmjs.org/gex/-/gex-0.3.0.tgz", "resolved": "https://registry.npmjs.org/gex/-/gex-0.3.0.tgz",
"integrity": "sha512-A1F2DMZUAnieFmVowt1QHcH7AJQZApRThR+z4C0GlzMGi6VYUAf9UvQdxODiCajGPGSRso86YJQ48E8+b5CBAQ==", "integrity": "sha512-A1F2DMZUAnieFmVowt1QHcH7AJQZApRThR+z4C0GlzMGi6VYUAf9UvQdxODiCajGPGSRso86YJQ48E8+b5CBAQ==",
"requires": { "requires": {
"lodash": "4.17.10" "lodash": "4.17"
} }
}, },
"glob": { "glob": {
...@@ -275,11 +275,11 @@ ...@@ -275,11 +275,11 @@
"integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
"optional": true, "optional": true,
"requires": { "requires": {
"inflight": "1.0.6", "inflight": "^1.0.4",
"inherits": "2.0.3", "inherits": "2",
"minimatch": "3.0.4", "minimatch": "2 || 3",
"once": "1.4.0", "once": "^1.3.0",
"path-is-absolute": "1.0.1" "path-is-absolute": "^1.0.0"
} }
}, },
"growl": { "growl": {
...@@ -315,10 +315,10 @@ ...@@ -315,10 +315,10 @@
"resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
"integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "^2.0.1",
"obuf": "1.1.2", "obuf": "^1.0.0",
"readable-stream": "2.3.6", "readable-stream": "^2.0.1",
"wbuf": "1.7.3" "wbuf": "^1.1.0"
} }
}, },
"http-deceiver": { "http-deceiver": {
...@@ -331,9 +331,9 @@ ...@@ -331,9 +331,9 @@
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
"requires": { "requires": {
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"jsprim": "1.4.1", "jsprim": "^1.2.2",
"sshpk": "1.14.2" "sshpk": "^1.7.0"
} }
}, },
"inflight": { "inflight": {
...@@ -341,8 +341,8 @@ ...@@ -341,8 +341,8 @@
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": { "requires": {
"once": "1.4.0", "once": "^1.3.0",
"wrappy": "1.0.2" "wrappy": "1"
} }
}, },
"inherits": { "inherits": {
...@@ -376,7 +376,7 @@ ...@@ -376,7 +376,7 @@
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"requires": { "requires": {
"minimist": "1.2.0" "minimist": "^1.2.0"
} }
}, },
"jsonic": { "jsonic": {
...@@ -389,15 +389,15 @@ ...@@ -389,15 +389,15 @@
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz",
"integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==", "integrity": "sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag==",
"requires": { "requires": {
"jws": "3.1.5", "jws": "^3.1.5",
"lodash.includes": "4.3.0", "lodash.includes": "^4.3.0",
"lodash.isboolean": "3.0.3", "lodash.isboolean": "^3.0.3",
"lodash.isinteger": "4.0.4", "lodash.isinteger": "^4.0.4",
"lodash.isnumber": "3.0.3", "lodash.isnumber": "^3.0.3",
"lodash.isplainobject": "4.0.6", "lodash.isplainobject": "^4.0.6",
"lodash.isstring": "4.0.1", "lodash.isstring": "^4.0.1",
"lodash.once": "4.1.1", "lodash.once": "^4.0.0",
"ms": "2.1.1" "ms": "^2.1.1"
}, },
"dependencies": { "dependencies": {
"ms": { "ms": {
...@@ -425,7 +425,7 @@ ...@@ -425,7 +425,7 @@
"requires": { "requires": {
"buffer-equal-constant-time": "1.0.1", "buffer-equal-constant-time": "1.0.1",
"ecdsa-sig-formatter": "1.0.10", "ecdsa-sig-formatter": "1.0.10",
"safe-buffer": "5.1.2" "safe-buffer": "^5.0.1"
} }
}, },
"jws": { "jws": {
...@@ -433,8 +433,8 @@ ...@@ -433,8 +433,8 @@
"resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz", "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz",
"integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==", "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==",
"requires": { "requires": {
"jwa": "1.1.6", "jwa": "^1.1.5",
"safe-buffer": "5.1.2" "safe-buffer": "^5.0.1"
} }
}, },
"lodash": { "lodash": {
...@@ -487,8 +487,8 @@ ...@@ -487,8 +487,8 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
"integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
"requires": { "requires": {
"pseudomap": "1.0.2", "pseudomap": "^1.0.2",
"yallist": "2.1.2" "yallist": "^2.1.2"
} }
}, },
"mime": { "mime": {
...@@ -506,7 +506,7 @@ ...@@ -506,7 +506,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": { "requires": {
"brace-expansion": "1.1.11" "brace-expansion": "^1.1.7"
} }
}, },
"minimist": { "minimist": {
...@@ -563,12 +563,12 @@ ...@@ -563,12 +563,12 @@
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"fs.realpath": "1.0.0", "fs.realpath": "^1.0.0",
"inflight": "1.0.6", "inflight": "^1.0.4",
"inherits": "2.0.3", "inherits": "2",
"minimatch": "3.0.4", "minimatch": "^3.0.4",
"once": "1.4.0", "once": "^1.3.0",
"path-is-absolute": "1.0.1" "path-is-absolute": "^1.0.0"
} }
} }
} }
...@@ -590,9 +590,9 @@ ...@@ -590,9 +590,9 @@
"integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=",
"optional": true, "optional": true,
"requires": { "requires": {
"mkdirp": "0.5.1", "mkdirp": "~0.5.1",
"ncp": "2.0.0", "ncp": "~2.0.0",
"rimraf": "2.4.5" "rimraf": "~2.4.0"
} }
}, },
"nan": { "nan": {
...@@ -612,10 +612,10 @@ ...@@ -612,10 +612,10 @@
"resolved": "https://registry.npmjs.org/ndjson/-/ndjson-1.5.0.tgz", "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-1.5.0.tgz",
"integrity": "sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg=", "integrity": "sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg=",
"requires": { "requires": {
"json-stringify-safe": "5.0.1", "json-stringify-safe": "^5.0.1",
"minimist": "1.2.0", "minimist": "^1.2.0",
"split2": "2.2.0", "split2": "^2.1.0",
"through2": "2.0.3" "through2": "^2.0.3"
} }
}, },
"negotiator": { "negotiator": {
...@@ -633,8 +633,8 @@ ...@@ -633,8 +633,8 @@
"resolved": "https://registry.npmjs.org/norma/-/norma-0.4.1.tgz", "resolved": "https://registry.npmjs.org/norma/-/norma-0.4.1.tgz",
"integrity": "sha512-BSnU+B35GzJgkEcNqiMIm79507Qg68O5L7gRVKATRSx17BHyDn0gVJsi3YzoANC1NbBoKRExwd3KsEZSUox63Q==", "integrity": "sha512-BSnU+B35GzJgkEcNqiMIm79507Qg68O5L7gRVKATRSx17BHyDn0gVJsi3YzoANC1NbBoKRExwd3KsEZSUox63Q==",
"requires": { "requires": {
"eraro": "1.0.0", "eraro": "1.0",
"lodash": "4.17.10" "lodash": "4.17"
} }
}, },
"obuf": { "obuf": {
...@@ -647,7 +647,7 @@ ...@@ -647,7 +647,7 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": { "requires": {
"wrappy": "1.0.2" "wrappy": "1"
} }
}, },
"ordu": { "ordu": {
...@@ -665,8 +665,8 @@ ...@@ -665,8 +665,8 @@
"resolved": "https://registry.npmjs.org/patrun/-/patrun-1.0.0.tgz", "resolved": "https://registry.npmjs.org/patrun/-/patrun-1.0.0.tgz",
"integrity": "sha512-oemWSuxjb27nPkREl88BxZ2EFDFUKSPace+zYZjFKj2xFn6w/LgDFGptgQvme384As2gpEFIv4WMVE1cb9lDXQ==", "integrity": "sha512-oemWSuxjb27nPkREl88BxZ2EFDFUKSPace+zYZjFKj2xFn6w/LgDFGptgQvme384As2gpEFIv4WMVE1cb9lDXQ==",
"requires": { "requires": {
"gex": "0.3.0", "gex": "0.3",
"lodash": "4.17.10" "lodash": "4.17"
} }
}, },
"pidusage": { "pidusage": {
...@@ -699,13 +699,13 @@ ...@@ -699,13 +699,13 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
"requires": { "requires": {
"core-util-is": "1.0.2", "core-util-is": "~1.0.0",
"inherits": "2.0.3", "inherits": "~2.0.3",
"isarray": "1.0.0", "isarray": "~1.0.0",
"process-nextick-args": "2.0.0", "process-nextick-args": "~2.0.0",
"safe-buffer": "5.1.2", "safe-buffer": "~5.1.1",
"string_decoder": "1.1.1", "string_decoder": "~1.1.1",
"util-deprecate": "1.0.2" "util-deprecate": "~1.0.1"
} }
}, },
"reconnect-core": { "reconnect-core": {
...@@ -713,7 +713,7 @@ ...@@ -713,7 +713,7 @@
"resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz", "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz",
"integrity": "sha1-+65SkZp4d9hE4yRtAaLyZwHIM8g=", "integrity": "sha1-+65SkZp4d9hE4yRtAaLyZwHIM8g=",
"requires": { "requires": {
"backoff": "2.5.0" "backoff": "~2.5.0"
} }
}, },
"restify": { "restify": {
...@@ -721,28 +721,28 @@ ...@@ -721,28 +721,28 @@
"resolved": "https://registry.npmjs.org/restify/-/restify-7.2.1.tgz", "resolved": "https://registry.npmjs.org/restify/-/restify-7.2.1.tgz",
"integrity": "sha512-xygVfQn/FiyzSPNIiOlzos6+RVcmTTK/bN0/m4z6vQwUY1yXntAsXM8ckq6hMxYfkhZfbPMM5hvBf75B8zLE1g==", "integrity": "sha512-xygVfQn/FiyzSPNIiOlzos6+RVcmTTK/bN0/m4z6vQwUY1yXntAsXM8ckq6hMxYfkhZfbPMM5hvBf75B8zLE1g==",
"requires": { "requires": {
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"bunyan": "1.8.12", "bunyan": "^1.8.12",
"csv": "1.2.1", "csv": "^1.1.1",
"dtrace-provider": "0.8.7", "dtrace-provider": "^0.8.1",
"escape-regexp-component": "1.0.2", "escape-regexp-component": "^1.0.2",
"ewma": "2.0.1", "ewma": "^2.0.1",
"find-my-way": "1.15.2", "find-my-way": "^1.13.0",
"formidable": "1.2.1", "formidable": "^1.2.1",
"http-signature": "1.2.0", "http-signature": "^1.2.0",
"lodash": "4.17.10", "lodash": "^4.17.10",
"lru-cache": "4.1.3", "lru-cache": "^4.1.3",
"mime": "1.6.0", "mime": "^1.5.0",
"negotiator": "0.6.1", "negotiator": "^0.6.1",
"once": "1.4.0", "once": "^1.4.0",
"pidusage": "1.2.0", "pidusage": "^1.2.0",
"qs": "6.5.2", "qs": "^6.5.2",
"restify-errors": "5.0.0", "restify-errors": "^5.0.0",
"semver": "5.5.1", "semver": "^5.4.1",
"spdy": "3.4.7", "spdy": "^3.4.7",
"uuid": "3.3.2", "uuid": "^3.1.0",
"vasync": "1.6.4", "vasync": "^1.6.4",
"verror": "1.10.0" "verror": "^1.10.0"
} }
}, },
"restify-errors": { "restify-errors": {
...@@ -750,10 +750,10 @@ ...@@ -750,10 +750,10 @@
"resolved": "https://registry.npmjs.org/restify-errors/-/restify-errors-5.0.0.tgz", "resolved": "https://registry.npmjs.org/restify-errors/-/restify-errors-5.0.0.tgz",
"integrity": "sha512-+vby9Kxf7qlzvbZSTIEGkIixkeHG+pVCl34dk6eKnL+ua4pCezpdLT/1/eabzPZb65ADrgoc04jeWrrF1E1pvQ==", "integrity": "sha512-+vby9Kxf7qlzvbZSTIEGkIixkeHG+pVCl34dk6eKnL+ua4pCezpdLT/1/eabzPZb65ADrgoc04jeWrrF1E1pvQ==",
"requires": { "requires": {
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"lodash": "4.17.10", "lodash": "^4.2.1",
"safe-json-stringify": "1.2.0", "safe-json-stringify": "^1.0.3",
"verror": "1.10.0" "verror": "^1.8.1"
} }
}, },
"ret": { "ret": {
...@@ -767,7 +767,7 @@ ...@@ -767,7 +767,7 @@
"integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
"optional": true, "optional": true,
"requires": { "requires": {
"glob": "6.0.4" "glob": "^6.0.1"
} }
}, },
"rolling-stats": { "rolling-stats": {
...@@ -791,7 +791,7 @@ ...@@ -791,7 +791,7 @@
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
"requires": { "requires": {
"ret": "0.1.15" "ret": "~0.1.10"
} }
}, },
"safer-buffer": { "safer-buffer": {
...@@ -819,24 +819,24 @@ ...@@ -819,24 +819,24 @@
"resolved": "https://registry.npmjs.org/seneca/-/seneca-3.7.0.tgz", "resolved": "https://registry.npmjs.org/seneca/-/seneca-3.7.0.tgz",
"integrity": "sha512-Qr9vqmhvATmGvkRaNGiQPoL2YA/BaMp/6Hf4NUHoZU/z/GrP7I7truLp2BnEdPjYQcK/ucPWvly22+CVI7Rp2A==", "integrity": "sha512-Qr9vqmhvATmGvkRaNGiQPoL2YA/BaMp/6Hf4NUHoZU/z/GrP7I7truLp2BnEdPjYQcK/ucPWvly22+CVI7Rp2A==",
"requires": { "requires": {
"archy": "1.0.0", "archy": "1.0",
"eraro": "1.0.0", "eraro": "1.0",
"gate-executor": "1.1.1", "gate-executor": "1.1",
"gex": "0.3.0", "gex": "0.3",
"json-stringify-safe": "5.0.1", "json-stringify-safe": "5.0",
"jsonic": "0.3.0", "jsonic": "0.3",
"lodash": "4.17.10", "lodash": "4.17",
"minimist": "1.2.0", "minimist": "1.2",
"nid": "0.3.2", "nid": "0.3",
"norma": "0.4.1", "norma": "0.4",
"ordu": "0.1.1", "ordu": "0.1",
"patrun": "1.0.0", "patrun": "1.0",
"qs": "6.5.2", "qs": "6.5",
"rolling-stats": "0.1.1", "rolling-stats": "0.1",
"semver": "5.5.1", "semver": "5.5",
"seneca-transport": "2.3.0", "seneca-transport": "2.3",
"use-plugin": "1.0.2", "use-plugin": "1.0",
"wreck": "12.5.1" "wreck": "12.5"
} }
}, },
"seneca-transport": { "seneca-transport": {
...@@ -844,17 +844,17 @@ ...@@ -844,17 +844,17 @@
"resolved": "https://registry.npmjs.org/seneca-transport/-/seneca-transport-2.3.0.tgz", "resolved": "https://registry.npmjs.org/seneca-transport/-/seneca-transport-2.3.0.tgz",
"integrity": "sha512-kocolZ+54fNbwVFloBnOyjeH4SFXFGyefeuqh2sNoQCycAGxBQpzFC8CIJkjL1YUQS8KczPxEs5sIFrKYIQdnA==", "integrity": "sha512-kocolZ+54fNbwVFloBnOyjeH4SFXFGyefeuqh2sNoQCycAGxBQpzFC8CIJkjL1YUQS8KczPxEs5sIFrKYIQdnA==",
"requires": { "requires": {
"eraro": "1.0.0", "eraro": "1.0",
"gex": "0.3.0", "gex": "0.3",
"jsonic": "0.3.0", "jsonic": "0.3",
"lodash": "4.17.10", "lodash": "4.17",
"lru-cache": "4.1.3", "lru-cache": "4.1",
"ndjson": "1.5.0", "ndjson": "1.5",
"nid": "0.3.2", "nid": "0.3",
"patrun": "1.0.0", "patrun": "1.0",
"qs": "6.5.2", "qs": "6.5",
"reconnect-core": "1.3.0", "reconnect-core": "1.3",
"wreck": "12.5.1" "wreck": "12.5"
} }
}, },
"spdy": { "spdy": {
...@@ -862,12 +862,12 @@ ...@@ -862,12 +862,12 @@
"resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz",
"integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=",
"requires": { "requires": {
"debug": "2.6.9", "debug": "^2.6.8",
"handle-thing": "1.2.5", "handle-thing": "^1.2.5",
"http-deceiver": "1.2.7", "http-deceiver": "^1.2.7",
"safe-buffer": "5.1.2", "safe-buffer": "^5.0.1",
"select-hose": "2.0.0", "select-hose": "^2.0.0",
"spdy-transport": "2.1.0" "spdy-transport": "^2.0.18"
} }
}, },
"spdy-transport": { "spdy-transport": {
...@@ -875,13 +875,13 @@ ...@@ -875,13 +875,13 @@
"resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz",
"integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==",
"requires": { "requires": {
"debug": "2.6.9", "debug": "^2.6.8",
"detect-node": "2.0.4", "detect-node": "^2.0.3",
"hpack.js": "2.1.6", "hpack.js": "^2.1.6",
"obuf": "1.1.2", "obuf": "^1.1.1",
"readable-stream": "2.3.6", "readable-stream": "^2.2.9",
"safe-buffer": "5.1.2", "safe-buffer": "^5.0.1",
"wbuf": "1.7.3" "wbuf": "^1.7.2"
} }
}, },
"split2": { "split2": {
...@@ -889,7 +889,7 @@ ...@@ -889,7 +889,7 @@
"resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
"integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
"requires": { "requires": {
"through2": "2.0.3" "through2": "^2.0.2"
} }
}, },
"sshpk": { "sshpk": {
...@@ -897,15 +897,15 @@ ...@@ -897,15 +897,15 @@
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
"integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
"requires": { "requires": {
"asn1": "0.2.4", "asn1": "~0.2.3",
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"bcrypt-pbkdf": "1.0.2", "bcrypt-pbkdf": "^1.0.0",
"dashdash": "1.14.1", "dashdash": "^1.12.0",
"ecc-jsbn": "0.1.2", "ecc-jsbn": "~0.1.1",
"getpass": "0.1.7", "getpass": "^0.1.1",
"jsbn": "0.1.1", "jsbn": "~0.1.0",
"safer-buffer": "2.1.2", "safer-buffer": "^2.0.2",
"tweetnacl": "0.14.5" "tweetnacl": "~0.14.0"
} }
}, },
"stream-transform": { "stream-transform": {
...@@ -918,7 +918,7 @@ ...@@ -918,7 +918,7 @@
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"requires": { "requires": {
"safe-buffer": "5.1.2" "safe-buffer": "~5.1.0"
} }
}, },
"supports-color": { "supports-color": {
...@@ -927,7 +927,7 @@ ...@@ -927,7 +927,7 @@
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true, "dev": true,
"requires": { "requires": {
"has-flag": "3.0.0" "has-flag": "^3.0.0"
} }
}, },
"through2": { "through2": {
...@@ -935,8 +935,8 @@ ...@@ -935,8 +935,8 @@
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",
"integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",
"requires": { "requires": {
"readable-stream": "2.3.6", "readable-stream": "^2.1.5",
"xtend": "4.0.1" "xtend": "~4.0.1"
} }
}, },
"tweetnacl": { "tweetnacl": {
...@@ -950,9 +950,9 @@ ...@@ -950,9 +950,9 @@
"resolved": "https://registry.npmjs.org/use-plugin/-/use-plugin-1.0.2.tgz", "resolved": "https://registry.npmjs.org/use-plugin/-/use-plugin-1.0.2.tgz",
"integrity": "sha512-46ZNYmSDMgyCBsUIPwLFWzY45jIu4sHFKKq3/M63XCd/RxvliC4qRVWtUAWEexP7q8X1MHJ2Br1U5KLkVFcQCw==", "integrity": "sha512-46ZNYmSDMgyCBsUIPwLFWzY45jIu4sHFKKq3/M63XCd/RxvliC4qRVWtUAWEexP7q8X1MHJ2Br1U5KLkVFcQCw==",
"requires": { "requires": {
"eraro": "1.0.0", "eraro": "1.0",
"nid": "0.3.2", "nid": "0.3",
"norma": "0.4.1" "norma": "0.4"
} }
}, },
"util-deprecate": { "util-deprecate": {
...@@ -993,9 +993,9 @@ ...@@ -993,9 +993,9 @@
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
"requires": { "requires": {
"assert-plus": "1.0.0", "assert-plus": "^1.0.0",
"core-util-is": "1.0.2", "core-util-is": "1.0.2",
"extsprintf": "1.3.0" "extsprintf": "^1.2.0"
} }
}, },
"wbuf": { "wbuf": {
...@@ -1003,7 +1003,7 @@ ...@@ -1003,7 +1003,7 @@
"resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
"integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
"requires": { "requires": {
"minimalistic-assert": "1.0.1" "minimalistic-assert": "^1.0.0"
} }
}, },
"wrappy": { "wrappy": {
...@@ -1016,8 +1016,8 @@ ...@@ -1016,8 +1016,8 @@
"resolved": "https://registry.npmjs.org/wreck/-/wreck-12.5.1.tgz", "resolved": "https://registry.npmjs.org/wreck/-/wreck-12.5.1.tgz",
"integrity": "sha512-l5DUGrc+yDyIflpty1x9XuMj1ehVjC/dTbF3/BasOO77xk0EdEa4M/DuOY8W88MQDAD0fEDqyjc8bkIMHd2E9A==", "integrity": "sha512-l5DUGrc+yDyIflpty1x9XuMj1ehVjC/dTbF3/BasOO77xk0EdEa4M/DuOY8W88MQDAD0fEDqyjc8bkIMHd2E9A==",
"requires": { "requires": {
"boom": "5.2.0", "boom": "5.x.x",
"hoek": "4.2.1" "hoek": "4.x.x"
} }
}, },
"xtend": { "xtend": {
......
module.exports.getExp = getExp
function getExp(expires) {
var exp
if (expires.endsWith('y')) {
exp = getYears(expires.split('y')[0])
}
else if (expires.endsWith('m')) {
exp = getMonths(expires.split('m')[0])
}
else if (expires.endsWith('d')) {
exp = expires.split('d')[0] + 'd'
}
else if (expires.endsWith('h')) {
exp = expires.split('h')[0] + 'h'
}
else if (expires.endsWith('mi')) {
exp = getMinutes(expires.split('mi')[0])
}
else if (expires.endsWith('s')) {
exp = getSeconds(expires.split('s')[0])
}
else exp = getYears(10)
return exp
}
function getMonths(d) {
return (d * 30) + 'd'
}
function getYears(m) {
return (m * 30 * 12) + 'd'
}
function getMinutes(mi) {
return (mi * 1000 * 60) + 'ms'
}
function getSeconds(ms) {
return (ms * 1000) + 'ms'
}
\ No newline at end of file
var getRole = require('../checkClientRole').getRole var getRole = require('../checkClientRole').getRole
function getGroupID(token, id, cb) { function getGroupID(token, client_id) {
checkID(token, id, (groupId) => { var role = getRole(token)
// console.log(groupId) if (role) {
cb(groupId)
})
}
module.exports.getGroupID = getGroupID
function checkID(token, id, cb) {
// console.log(token)
getRole(token, (role) => {
// console.log(role)
if (role.hasOwnProperty('groupId')) { if (role.hasOwnProperty('groupId')) {
cb(role.groupId) return role.groupId
} }
else { else {
doDB(id, (groupId) => { return doDB(client_id)
// console.log(groupId)
cb(groupId)
})
} }
}) }
else return role
} }
module.exports.getGroupID = getGroupID
function doDB(id, cb) { function doDB(client_id) {
var groupId = 'test' var groupId = 'test'
cb(groupId) return groupId
} }
\ No newline at end of file
function getTopic(topic, id) { var modify = require('./modify');
var _topic = classifiedTopic(topic) + '/!' + id + topic.split(classifiedTopic(topic))[1]
return _topic function rewriteTopic(topic, op, groupid, clientid, output) {
} var chunk = topic.split('/');
module.exports.getTopic = getTopic
switch (chunk[0]) {
function classifiedTopic(topic) { case '@msg' :
if (topic.indexOf('@msg') !== -1) { return modify.insertWordIntoTopic(topic, '!'+clientid, 1);
return '@msg'
} else if (topic.indexOf('@shadow/updated') !== -1) { case '@shadow' :
return '@shadow/updated' if (chunk[1] == 'write' || chunk[1] == 'read') {
} else if (topic.indexOf('@shadow/update') !== -1) { output.verb = chunk[1];
return '@shadow/update' return modify.insertWordIntoTopic(topic, ''+clientid, 2);
} else if (topic.indexOf('@shadow/get') !== -1) { }
return '@shadow/get' else if (chunk[1] == 'set' || chunk[1] == 'get') {
} else if (topic.indexOf('@client') !== -1) { output.verb = chunk[1];
return '@client' return modify.insertWordIntoTopic(topic, groupid, 2);
}
else if (chunk[1] == 'changed') {
if (op == 'pub') {
if ( chunk.length > 2 )
return modify.insertWordIntoTopic(topic, '!'+groupid, 2);
else if ( chunk.length == 2 )
return modify.insertWordIntoTopic(topic, '!'+clientid, 2);
else return "";
}
else {
if ( chunk.length > 2 )
return modify.insertWordIntoTopic(topic, '!'+groupid, 2);
else if ( chunk.length == 2 )
return modify.insertWordIntoTopic(topic, '!'+clientid, 2);
else return "";
}
}
else return "";
case '@private' :
return modify.insertWordIntoTopic(topic, '!'+clientid, 1);
} }
} }
\ No newline at end of file
module.exports.rewriteTopic = rewriteTopic
\ No newline at end of file
module.exports.insertWordIntoTopic = insertWordIntoTopic
module.exports.removeTempWordInTopic = removeTempWordInTopic
module.exports.replaceWords = replaceWords
module.exports.cleanUpTopic = cleanUpTopic
/*
Ex: insertWordIntoTopic('@shadow/home/temp', '!GROUP', 1)
expected return : "@shadow/!GROUP/home/temp"
*/
function insertWordIntoTopic(topic, word, pos) {
var a = topic.split('/');
a.splice(pos, 0, word);
// console.log('>>> insertWordIntoTopic('+topic +','+ word +','+ pos +');');
// console.log(a.join('/'));
return a.join('/');
}
/*
Ex : removeTempWordInTopic('@shadow/!GROUP/home/temp')
expected return : "@shadowhome/temp"
*/
function removeTempWordInTopic(topic) {
var a = topic.split('/');
var k=0, l=a.length;
while (k<l) {
if (a[k].substr(0,1)=='!') {
a.splice(k,1);
l--;
}
else k++;
}
return a.join('/');
}
function replaceWords(topic, word, from, to) {
var a = topic.split('/');
a.splice(from,to-from+1);
if (word != null) a.splice(from, 0, word);
return a.join('/');
}
// Sample
// var str = insertWordIntoTopic('@shadow/home/temp', '!GROUP', 0);
// console.log(str);
// console.log(removeTempWordInTopic(str));
//console.log(replaceWords('@shadow/set/home/bob/bedroom/temp', 'CLIENTID-XXXXX', 2, 3));
function cleanUpTopic(topic) {
topic = topic.trim();
if (topic.substr(-1)=='/') return topic.slice(-1);
}
...@@ -811,12 +811,15 @@ vmq_webhooks.webhook2.endpoint = http://localhost:40000/authsub ...@@ -811,12 +811,15 @@ vmq_webhooks.webhook2.endpoint = http://localhost:40000/authsub
vmq_webhooks.webhook3.hook = auth_on_publish vmq_webhooks.webhook3.hook = auth_on_publish
vmq_webhooks.webhook3.endpoint = http://localhost:40000/authpub vmq_webhooks.webhook3.endpoint = http://localhost:40000/authpub
vmq_webhooks.webhook4.hook = on_publish #vmq_webhooks.webhook4.hook = on_publish
vmq_webhooks.webhook4.endpoint = http://localhost:41000/onpub #vmq_webhooks.webhook4.endpoint = http://localhost:41000/onpub
vmq_webhooks.webhook5.hook = on_deliver vmq_webhooks.webhook5.hook = on_deliver
vmq_webhooks.webhook5.endpoint = http://localhost:40000/ondeliver vmq_webhooks.webhook5.endpoint = http://localhost:40000/ondeliver
vmq_webhooks.webhook6.hook = on_unsubscribe
vmq_webhooks.webhook6.endpoint = http://localhost:40000/onunsub
## Specify the address and port of the bridge to connect to. Several ## Specify the address and port of the bridge to connect to. Several
## bridges can configured by using different bridge names (e.g. br0). If the ## bridges can configured by using different bridge names (e.g. br0). If the
## connection supports SSL encryption bridge.ssl.<name> can be used. ## connection supports SSL encryption bridge.ssl.<name> can be used.
......
node_modules
.DS_Store
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment