diff --git a/app.js b/app.js index dcd4fc9f..e036aeec 100644 --- a/app.js +++ b/app.js @@ -17,6 +17,9 @@ process.env.NODE_ENV = 'production'; //process.env.NODE_ENV = 'development'; +require('./logger.js'); +logger.level = 'info'; + var fs = require('fs'); var http = require('http'); var express = require('express'); @@ -67,7 +70,7 @@ global.randomValue = function (qty) { return crypto.randomBytes(qty).toString(2); }; -var logDirectory = __dirname + '/log'; +var logDirectory = global.logDir; // ensure log directory exists fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory); @@ -117,7 +120,7 @@ if (use_clustering) { cluster.fork(); }); - db.connect(usedbhost, 3306, 'root', usedbpass, function (rsc) { + db.connect(usedbhost, 3306, usedbname, usedbuser, usedbpass, function (rsc) { if (rsc == '1') { cb.create(function (rsp) { console.log(JSON.stringify(rsp)); @@ -149,7 +152,7 @@ if (use_clustering) { // app.use(bodyParser.text({limit: '1mb', type: 'application/*+xml' })); - db.connect(usedbhost, 3306, 'root', usedbpass, function (rsc) { + db.connect(usedbhost, 3306, usedbname, usedbuser, usedbpass, function (rsc) { if (rsc == '1') { if(usesecure === 'disable') { http.globalAgent.maxSockets = 1000000; @@ -179,7 +182,7 @@ if (use_clustering) { } } else { - db.connect(usedbhost, 3306, 'root', usedbpass, function (rsc) { + db.connect(usedbhost, 3306, usedbname, usedbuser, usedbpass, function (rsc) { if (rsc == '1') { cb.create(function (rsp) { console.log(JSON.stringify(rsp)); @@ -457,6 +460,24 @@ function check_http_body(request, response, callback) { } function check_http(request, response, callback) { + // [TIM] if configured check authorization before checking other headers + var body_Obj = {}; + + if (authorization) { + auth.check_head_auth(request, response, function(rsc) { + if (rsc == '0') { + callback('0', body_Obj); + return '0'; + } else { + _check_http(request, response, callback); + } + }); + } else { + _check_http(request, response, callback); + } +} + +function _check_http(request, response, callback) { request.headers.rootnm = 'dbg'; var body_Obj = {}; @@ -1449,6 +1470,9 @@ var onem2mParser = bodyParser.text( ); //var onem2mParser = bodyParser.text({ limit: '1mb', type: '*/*' }); +// [TIM] import auth library and config it +const auth = require("./auth.js"); +auth.init({onem2mParser:onem2mParser, responder:responder, crypto:crypto, db:db, db_sql:db_sql, logger:logger}); //////// contribution code // Kevin Lee, Executive Director, Unibest INC, Owner of Howchip.com @@ -1514,7 +1538,7 @@ app.post(onem2mParser, function (request, response) { responder.error_result(request, response, 500, 5000, body_Obj['dbg']); } else if (rsc == '1') { - forward_http(body_Obj.forwardcbhost, body_Obj.forwardcbport, request, response); + forward_http(body_Obj, request, response); } else if (rsc == '2') { responder.error_result(request, response, 500, 5000, 'forwarding with mqtt is not supported'); @@ -1580,7 +1604,7 @@ app.get(onem2mParser, function (request, response) { responder.error_result(request, response, 500, 5000, body_Obj['dbg']); } else if (rsc == '1') { - forward_http(body_Obj.forwardcbhost, body_Obj.forwardcbport, request, response); + forward_http(body_Obj, request, response); } else if (rsc == '2') { responder.error_result(request, response, 500, 5000, 'forwarding with mqtt is not supported'); @@ -1650,7 +1674,7 @@ app.put(onem2mParser, function (request, response) { responder.error_result(request, response, 500, 5000, body_Obj['dbg']); } else if (rsc == '1') { - forward_http(body_Obj.forwardcbhost, body_Obj.forwardcbport, request, response); + forward_http(body_Obj, request, response); } else if (rsc == '2') { responder.error_result(request, response, 500, 5000, 'forwarding with mqtt is not supported'); @@ -1719,7 +1743,7 @@ app.delete(onem2mParser, function (request, response) { responder.error_result(request, response, 500, 5000, body_Obj['dbg']); } else if (rsc == '1') { - forward_http(body_Obj.forwardcbhost, body_Obj.forwardcbport, request, response); + forward_http(body_Obj, request, response); } else if (rsc == '2') { responder.error_result(request, response, 500, 5000, 'forwarding with mqtt is not supported'); @@ -1744,7 +1768,9 @@ function check_csr(absolute_url, callback) { body_Obj.forwardcbname = result_csr[0].cb.replace('/', ''); var poa_arr = JSON.parse(result_csr[0].poa); for (var i = 0; i < poa_arr.length; i++) { - if (url.parse(poa_arr[i]).protocol == 'http:') { + var prot = url.parse(poa_arr[i]).protocol; + if (prot == 'http:' || prot == 'https:') { + body_Obj.forwardcbprot = prot; body_Obj.forwardcbhost = url.parse(poa_arr[i]).hostname; body_Obj.forwardcbport = url.parse(poa_arr[i]).port; @@ -1752,7 +1778,7 @@ function check_csr(absolute_url, callback) { callback('1', body_Obj); } - else if (url.parse(poa_arr[i]).protocol == 'mqtt:') { + else if (prot == 'mqtt:') { body_Obj.forwardcbmqtt = url.parse(poa_arr[i]).hostname; callback('2', body_Obj); @@ -1778,16 +1804,48 @@ function check_csr(absolute_url, callback) { } -function forward_http(forwardcbhost, forwardcbport, request, response) { - var options = { - hostname: forwardcbhost, - port: forwardcbport, - path: request.url, - method: request.method, - headers: request.headers - }; +function forward_http(body_Obj, request, response) { + // [TIM} manage localhost, http and https, assuming there is a proxy configured + var path = request.url.replace(body_Obj.csr, body_Obj.forwardcbname); + var uri = body_Obj.forwardcbprot+"//"+body_Obj.forwardcbhost+":"+body_Obj.forwardcbport+path; + var ssl = body_Obj.forwardcbprot.indexOf("https:")!==-1; + var _http = http; + if (ssl) { + var HttpsProxyAgent = require('https-proxy-agent'); + console.log('[forward_https] uri: ' + uri); + var agent = new HttpsProxyAgent(process.env.https_proxy); + var options = { + hostname: body_Obj.forwardcbhost, + port: body_Obj.forwardcbport, + path: path, + method: request.method, + headers: request.headers, + agent: agent + }; + _http = https; + } else { + console.log('[forward_http] uri: ' + uri); + if (process.env.http_proxy) { + var options = { + hostname: url.parse(process.env.http_proxy).hostname, + port: url.parse(process.env.http_proxy).port, + path: uri, + method: request.method, + headers: request.headers + }; + } else { + var options = { + hostname: body_Obj.forwardcbhost, + port: body_Obj.forwardcbport, + path: request.url, + method: request.method, + headers: request.headers + }; + } + _http = http; + } - var req = http.request(options, function (res) { + var req = _http.request(options, function (res) { var fullBody = ''; res.on('data', function (chunk) { fullBody += chunk.toString(); diff --git a/auth.js b/auth.js new file mode 100644 index 00000000..403adffb --- /dev/null +++ b/auth.js @@ -0,0 +1,170 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +var onem2mParser, responder, crypto, db, db_sql; + + +function check_head_auth(request, response, callback) { + // Check Authorization Header + var ip = request.headers['x-forwarded-for'] || request.connection.remoteAddress; + var agent = request.headers['user-agent']; + //logger.log("debug",'>>>>>>>ip:',ip, ip.indexOf("127.0.0.1"), request.url); + + if (agent==undefined) { + // it happens when locally invoked + //logger.log("debug",'>>>>>>>NO user-agent!!!!!!!!!!!!'); + callback('1'); + return '1'; + } else { + // external request + //logger.log("debug",'>>>>>>>user-agent:',agent); + } + + if ((request.headers['authorization'] == null || request.headers['authorization'] == '')) { + + request.headers.rootnm = 'dbg'; + request.headers.usebodytype = 'json'; + + responder.error_result(request, response, 401, 4001, 'Authorization Header is null'); + callback('0'); + return '0'; + } else { + // auth header present + var context = request.url.split(/[?#]/)[0].replace("/"+usecsebase+"/", "").split("/")[0]; + var auth = request.headers['authorization'].replace("Basic ", "").trim(); + auth = new Buffer(auth, 'base64').toString(); + //logger.log("debug",'>>>>>>>auth: ',request.headers['authorization'],auth,"context:",context,"url:",request.url); + var usr_parts = auth.split(":"); + //logger.log("debug",'>>>>>>>usr_parts: ',usr_parts); + if (usr_parts.length!=2) { + responder.error_result(request, response, 401, 4001, 'Unauthorized'); + callback('0'); + return '0'; + } + // superadm_usr + if (usr_parts[0]==superadm_usr && usr_parts[1]==superadm_pwd) { + //logger.log("debug",'>>>>>>>user: SUPERADMIN'); + callback('1'); + return '1'; + } + // check other users + if (request.url=="/"+usecsebase) { + // root not accessible for other users + responder.error_result(request, response, 401, 4001, 'Unauthorized'); + callback('0'); + return '0'; + } + var pwd_hash = crypto.createHash('sha256').update(usr_parts[1]).digest('base64'); + db_sql.get_user(usr_parts[0], + function (user_Obj) { + logger.log("debug",'>>>>>>>user: ',user_Obj); + if (user_Obj==null || (Array.isArray(user_Obj) && user_Obj.length==0)) { + // user not present + responder.error_result(request, response, 401, 4001, 'Unauthorized'); + callback('0'); + return '0'; + } else if (user_Obj[0].password!=pwd_hash) { + // password not match + responder.error_result(request, response, 401, 4001, 'Unauthorized'); + callback('0'); + return '0'; + } else { + logger.log("debug",'>>>>>>>user2: ',user_Obj,"url:",request.url); + // ok user present + if (user_Obj[0].role=="tenant") { + if (user_Obj[0].context.indexOf(context)!=-1 && context) { + // ok, context enabled fot this user + callback('1'); + return '1'; + } else { + // context not match + responder.error_result(request, response, 403, 4003, 'Forbidden'); + callback('0'); + return '0'; + } + } else if (user_Obj[0].role=="guest") { + logger.log("debug",'>>>>>>>user: ',request.url, user_Obj); + var uris = user_Obj[0].context.split(","), test = false; + for (var k in uris) { +// if (request.url.indexOf(uris[k])==0) test = true; + if (request.url == uris[k]) { + test = true; + break; + } else if (match(request.url, uris[k])) { + test = true; + break; + } + } + if (test) { + // ok, context enabled fot this user + if (request.method=="POST") { + try { + var content_type = request.headers['content-type'].split(';'); + } + catch (e) { + responder.error_result(request, response, 400, 4000, 'content-type is null'); + callback('0'); + return '0'; + } + try { + var ty = content_type[1].split('=')[1]; + } + catch (e) { + responder.error_result(request, response, 400, 4000, 'ty is null'); + callback('0'); + return '0'; + } + if (ty=='4' || ty=='23') { + // ok, context and POST CIN, SUB enabled fot this guest + callback('1'); + return '1'; + } else { + responder.error_result(request, response, 415, 4015, 'You are not enabled to create resource of this type'); + callback('0'); + return '0'; + } + } else if (request.method=="GET") { + callback('1'); + return '1'; + } else { + responder.error_result(request, response, 405, 4005, 'Method Not Allowed'); + callback('0'); + return '0'; + } + } else { + // context not match + responder.error_result(request, response, 403, 4003, 'Forbidden'); + callback('0'); + return '0'; + } + + } + } + } + ); + } + + function match(txt, regularExpression) { + var re1 = new RegExp('^'+regularExpression+'/'); + var re2 = new RegExp('^'+regularExpression+'?'); + return re1.test(txt) || re2.test(txt); + } +} + +module.exports = {}; + +module.exports.check_head_auth = check_head_auth; + +module.exports.init = function(deps){ + console.log('[auth].init'); + // dependencies + onem2mParser = deps.onem2mParser; + responder = deps.responder; + crypto = deps.crypto; + db_sql = deps.db_sql; + db = deps.db; + logger = deps.logger; +} diff --git a/conf.json b/conf.json index b0de930b..ef178df9 100644 --- a/conf.json +++ b/conf.json @@ -1,4 +1,20 @@ { + "csebase": "onem2m", + "cseid": "/onem2m", "csebaseport": "7579", - "dbpass": "dksdlfduq2" + "csetype": "in", + "dbhost": "localhost", + "dbuser": "mobius", + "dbpass": "mobius", + "dbname": "mobiusdb", + "superadm_usr": "superadmin", + "superadm_pwd": "f7c6c12d", + "pxymqttport": 7580, + "pxycoapport": 5683, + "pxywsport": 7577, + "tsagentport": 7582, + "mqttbroker": "localhost", + "secure": "disable", + "authorization": true, + "logDir": "./log" } diff --git a/logger.js b/logger.js new file mode 100644 index 00000000..b99dae1b --- /dev/null +++ b/logger.js @@ -0,0 +1,49 @@ +#!/usr/bin/env node +/** +* Logger node module +* @author piero@tilab +* @version 0.0.3 +* @description winston wrapper. nb: use console overrides in sub-modules of main app +*/ +var fs = require('fs'); +var winston = require('winston'); +var dateFormat = require("dateformat"); +var datePattern = 'yyyyMMdd'; +// Create the log directory if it does not exist +if (!fs.existsSync(logDir)) { + fs.mkdirSync(logDir); +} +var tsFormat = function() { return dateFormat(Date.now(), "dd/mm/yyyy HH:MM:ss.l"); } +global.logger = new (winston.Logger)({ + transports: [ + new (winston.transports.Console)({ + timestamp: tsFormat, + formatter: function(options) { + return options.timestamp() +' ['+ options.level.toUpperCase() +'] '+ (options.message ? options.message : '') + + (options.meta && Object.keys(options.meta).length ? '\n\t'+ JSON.stringify(options.meta) : '' ); + } + }), + new (require('winston-daily-rotate-file'))({ + filename: `${logDir}/.log`, + timestamp: tsFormat, + datePattern: 'log-'+datePattern, + prepend: true, + json: false, + level: 'info', + handleExceptions: true, + humanReadableUnhandledException: true, + zippedArchive: true + }) + ], + exitOnError: false +}); +// console override +console.log = logger.info; +console.info = logger.info; +console.error = logger.error; +console.warn = logger.warn; +// module export +module.exports.logger = logger; +logger.fileName = function() { + return 'log-'+dateFormat(Date.now(), datePattern.toLowerCase()); +} diff --git a/mobius.js b/mobius.js index e010b92a..1050c857 100644 --- a/mobius.js +++ b/mobius.js @@ -20,26 +20,31 @@ var conf = JSON.parse(data); global.defaultnmtype = 'short'; global.defaultbodytype = 'json'; - // my CSE information -global.usecsetype = 'in'; // select 'in' or 'mn' or asn' -global.usecsebase = 'Mobius'; -global.usecseid = '/Mobius'; +global.usecsetype = conf.csetype; // select 'in' or 'mn' or asn' +global.usecsebase = conf.csebase; +global.usecseid = conf.cseid; global.usecsebaseport = conf.csebaseport; -global.usedbhost = 'localhost'; +global.usedbhost = conf.dbhost; +global.usedbuser = conf.dbuser; global.usedbpass = conf.dbpass; +global.usedbname = conf.dbname; +global.usepxymqttport = conf.pxymqttport; +global.usepxycoapport = conf.pxycoapport; +global.usepxywsport = conf.pxywsport; +global.usetsagentport = conf.tsagentport; -global.usepxywsport = '7577'; -global.usepxymqttport = '7578'; - +global.usemqttbroker = conf.mqttbroker; // mqttbroker for mobius -global.usetsagentport = '7582'; +global.usesecure = conf.secure; -global.usemqttbroker = 'localhost'; // mqttbroker for mobius +global.superadm_usr = conf.superadm_usr; +global.superadm_pwd = conf.superadm_pwd; +global.authorization = conf.authorization; +global.logDir = conf.logDir; -global.usesecure = 'disable'; if(usesecure === 'enable') { global.usemqttport = '8883'; } diff --git a/mobius/acp.js b/mobius/acp.js index 01ad80d9..c8f3d49a 100644 --- a/mobius/acp.js +++ b/mobius/acp.js @@ -87,6 +87,15 @@ exports.build_acp = function(request, response, resource_Obj, body_Obj, callback responder.response_result(request, response, 400, body_Obj, 4000, request.url, body_Obj['dbg']); callback('0', resource_Obj); return '0'; + } else { // [TIM]: check also acr + if(!body_Obj[rootnm].pv.acr) { + body_Obj = {}; + + body_Obj['dbg'] = 'pv.acr as M Tag should be included'; + responder.response_result(request, response, 400, body_Obj, 4000, request.url, body_Obj['dbg']); + callback('0', resource_Obj); + return '0'; + } } if(!body_Obj[rootnm].pvs) { @@ -96,6 +105,15 @@ exports.build_acp = function(request, response, resource_Obj, body_Obj, callback responder.response_result(request, response, 400, body_Obj, 4000, request.url, body_Obj['dbg']); callback('0', resource_Obj); return '0'; + } else { // [TIM]: check also acr + if(!body_Obj[rootnm].pvs.acr) { + body_Obj = {}; + + body_Obj['dbg'] = 'pvs.acr as M Tag should be included'; + responder.response_result(request, response, 400, body_Obj, 4000, request.url, body_Obj['dbg']); + callback('0', resource_Obj); + return '0'; + } } // body diff --git a/mobius/cb.js b/mobius/cb.js index e211113d..d48802c5 100644 --- a/mobius/cb.js +++ b/mobius/cb.js @@ -73,7 +73,6 @@ function parse_create_action(callback) { resource_Obj[rootnm].cst = '1'; resource_Obj[rootnm].mni = '3153600000'; resource_Obj[rootnm].cs = ''; - resource_Obj[rootnm].cnf = ''; db_sql.select_ri_lookup(resource_Obj[rootnm].ri, function (err, results_ri) { if(!err) { @@ -101,7 +100,7 @@ function parse_create_action(callback) { resource_Obj[rootnm].sri = require('shortid').generate(); db_sql.insert_cb(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].cst, resource_Obj[rootnm].csi, JSON.stringify(resource_Obj[rootnm].srt), JSON.stringify(resource_Obj[rootnm].poa), + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].cst, resource_Obj[rootnm].csi, JSON.stringify(resource_Obj[rootnm].srt), JSON.stringify(resource_Obj[rootnm].poa), resource_Obj[rootnm].nl, resource_Obj[rootnm].ncp, function (err, results) { if (!err) { rspObj.rsc = '2001'; diff --git a/mobius/db_action.js b/mobius/db_action.js index a9f6fb5d..1d45fa70 100644 --- a/mobius/db_action.js +++ b/mobius/db_action.js @@ -19,13 +19,13 @@ var mysql_pool = null; //var _this = this; -exports.connect = function (host, port, user, password, callback) { +exports.connect = function (host, port, database, user, password, callback) { mysql_pool = mysql.createPool({ host: host, port: port, user: user, password: password, - database: 'mobiusdb', + database: database, connectionLimit: 100, waitForConnections: true, debug: false, @@ -74,4 +74,31 @@ exports.getResult = function(query, db_Obj, callback) { }); }; +/* [TIM] using fields escape */ +exports.getResultEsc = function(query, values, callback) { + if(mysql_pool == null) { + console.error("mysql is not connected"); + return '0'; + } + + mysql_pool.getConnection(function (err, connection) { + if (err) { + return callback(err, null); + } else if (connection) { + connection.query({ + sql: query, // 'SELECT * FROM `table` WHERE `field1` = ?', + timeout: 60000, // 60s + values: values, // ['field1_val'] + }, function (err, rows, fields) { + connection.release(); + if (err) { + return callback(true, err); + } + return callback(null, rows); + }); + } else { + return callback(true, "No Connection"); + } + }); +}; diff --git a/mobius/grp.js b/mobius/grp.js index d649a839..7cd2aa4b 100644 --- a/mobius/grp.js +++ b/mobius/grp.js @@ -489,7 +489,8 @@ exports.modify_grp = function(request, response, resource_Obj, body_Obj, callbac resource_Obj[rootnm].mid = body_Obj[rootnm].mid; if(resource_Obj[rootnm].mt != '0') { - check_mtv(resource_Obj[rootnm].mt, resource_Obj[rootnm].mid, function(rsc, results_mid) { + // [TIM] error, request, response parameters missing + check_mtv(request, response, resource_Obj[rootnm].mt, resource_Obj[rootnm].mid, function(rsc, results_mid) { if(rsc == '0') { // mt inconsistency if(results_mid.length == '0') { body_Obj = {}; diff --git a/mobius/mobiusdb.sql b/mobius/mobiusdb.sql index 5057ae33..e562bc9c 100644 --- a/mobius/mobiusdb.sql +++ b/mobius/mobiusdb.sql @@ -212,7 +212,6 @@ CREATE TABLE `lookup` ( `st` varchar(45) DEFAULT NULL, `mni` varchar(45) DEFAULT NULL, `cs` varchar(45) DEFAULT NULL, - `cnf` varchar(45) DEFAULT NULL, `sri` varchar(45) DEFAULT NULL, `spi` varchar(45) DEFAULT NULL, PRIMARY KEY (`pi`,`ty`,`ct`,`ri`), diff --git a/mobius/mobiusdb_pre.sql b/mobius/mobiusdb_pre.sql new file mode 100644 index 00000000..2ed1d155 --- /dev/null +++ b/mobius/mobiusdb_pre.sql @@ -0,0 +1,7 @@ +CREATE DATABASE mobiusdb; + +CREATE USER 'mobius' IDENTIFIED BY 'mobius'; +CREATE USER 'mobius'@'localhost' IDENTIFIED BY 'mobius'; +CREATE USER 'mobius'@'%' IDENTIFIED BY 'mobius'; + +GRANT ALL PRIVILEGES ON mobiusdb.* TO mobius; \ No newline at end of file diff --git a/mobius/mobiusdb_usr.sql b/mobius/mobiusdb_usr.sql new file mode 100644 index 00000000..83ee50fe --- /dev/null +++ b/mobius/mobiusdb_usr.sql @@ -0,0 +1,20 @@ +USE mobiusdb; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; + +CREATE TABLE `users` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `context` longtext CHARACTER SET utf8 COLLATE utf8_bin, + `role` varchar(10) DEFAULT NULL, + `data` longtext, + PRIMARY KEY (`id`), + UNIQUE KEY `id_UNIQUE` (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; + +INSERT INTO `users` (`id`, `username`, `role`) VALUES (0, 'superadmin', 'superadmin'); diff --git a/mobius/resource.js b/mobius/resource.js index 2c18958e..740b83cc 100644 --- a/mobius/resource.js +++ b/mobius/resource.js @@ -343,7 +343,7 @@ function create_action(request, response, ty, resource_Obj, callback) { if (ty == '1') { db_sql.insert_acp(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, JSON.stringify(resource_Obj[rootnm].pv), JSON.stringify(resource_Obj[rootnm].pvs), function (err, results) { if (!err) { callback('1', resource_Obj); @@ -368,7 +368,7 @@ function create_action(request, response, ty, resource_Obj, callback) { resource_Obj[rootnm].sri = resource_Obj[rootnm].aei; db_sql.insert_ae(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].apn, resource_Obj[rootnm].api, resource_Obj[rootnm].aei, JSON.stringify(resource_Obj[rootnm].poa), resource_Obj[rootnm].or, resource_Obj[rootnm].nl, resource_Obj[rootnm].rr, function (err, results) { if (!err) { @@ -393,7 +393,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '3') { db_sql.insert_cnt(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].cr, resource_Obj[rootnm].mbs, resource_Obj[rootnm].mia, resource_Obj[rootnm].cni, resource_Obj[rootnm].cbs, resource_Obj[rootnm].li, resource_Obj[rootnm].or, function (err, results) { if (!err) { @@ -446,7 +446,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '9') { db_sql.insert_grp(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].cr, resource_Obj[rootnm].mt, resource_Obj[rootnm].cnm, resource_Obj[rootnm].mnm, JSON.stringify(resource_Obj[rootnm].mid), JSON.stringify(resource_Obj[rootnm].macp), resource_Obj[rootnm].mtv, resource_Obj[rootnm].csy, resource_Obj[rootnm].gn, function (err, results) { if (!err) { @@ -471,7 +471,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '10') { db_sql.insert_lcp(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].los, resource_Obj[rootnm].lou, resource_Obj[rootnm].lot, resource_Obj[rootnm].lor, resource_Obj[rootnm].loi, resource_Obj[rootnm].lon, resource_Obj[rootnm].lost, function (err, results) { if (!err) { @@ -497,7 +497,7 @@ function create_action(request, response, ty, resource_Obj, callback) { if(resource_Obj[rootnm].mgd == 1001) { db_sql.insert_fwr(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].mgd, resource_Obj[rootnm].objs, resource_Obj[rootnm].obps, resource_Obj[rootnm].dc, resource_Obj[rootnm].vr, resource_Obj[rootnm].fwnnam, resource_Obj[rootnm].url, resource_Obj[rootnm].ud, JSON.stringify(resource_Obj[rootnm].uds), function (err, results) { if (!err) { @@ -522,7 +522,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if(resource_Obj[rootnm].mgd == 1006) { db_sql.insert_bat(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].mgd, resource_Obj[rootnm].objs, resource_Obj[rootnm].obps, resource_Obj[rootnm].dc, resource_Obj[rootnm].btl, resource_Obj[rootnm].bts, function (err, results) { if (!err) { @@ -547,7 +547,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if(resource_Obj[rootnm].mgd == 1007) { db_sql.insert_dvi(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].mgd, resource_Obj[rootnm].objs, resource_Obj[rootnm].obps, resource_Obj[rootnm].dc, resource_Obj[rootnm].dbl, resource_Obj[rootnm].man, resource_Obj[rootnm].mod, resource_Obj[rootnm].dty, resource_Obj[rootnm].fwv, resource_Obj[rootnm].swv, resource_Obj[rootnm].hwv, function (err, results) { if (!err) { @@ -572,7 +572,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if(resource_Obj[rootnm].mgd == 1008) { db_sql.insert_dvc(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].mgd, resource_Obj[rootnm].objs, resource_Obj[rootnm].obps, resource_Obj[rootnm].dc, resource_Obj[rootnm].can, resource_Obj[rootnm].att, JSON.stringify(resource_Obj[rootnm].cas), resource_Obj[rootnm].cus, resource_Obj[rootnm].ena, resource_Obj[rootnm].dis, function (err, results) { if (!err) { @@ -597,7 +597,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if(resource_Obj[rootnm].mgd == 1009) { db_sql.insert_rbo(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].mgd, resource_Obj[rootnm].objs, resource_Obj[rootnm].obps, resource_Obj[rootnm].dc, resource_Obj[rootnm].rbo, resource_Obj[rootnm].far, function (err, results) { if (!err) { @@ -628,7 +628,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '14') { db_sql.insert_nod(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].ni, resource_Obj[rootnm].hcl, function (err, results) { if (!err) { callback('1', resource_Obj); @@ -652,7 +652,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '16') { db_sql.insert_csr(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].cst, JSON.stringify(resource_Obj[rootnm].poa), resource_Obj[rootnm].cb, resource_Obj[rootnm].csi, resource_Obj[rootnm].mei, resource_Obj[rootnm].tri, resource_Obj[rootnm].rr, resource_Obj[rootnm].nl, function (err, results) { if (!err) { @@ -677,7 +677,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '17') { db_sql.insert_req(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].op, resource_Obj[rootnm].tg, resource_Obj[rootnm].org, resource_Obj[rootnm].rid, resource_Obj[rootnm].mi, resource_Obj[rootnm].pc, resource_Obj[rootnm].rs, resource_Obj[rootnm].ors, function (err, results) { if (!err) { @@ -702,7 +702,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '23') { db_sql.insert_sub(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, JSON.stringify(resource_Obj[rootnm].enc), resource_Obj[rootnm].exc, JSON.stringify(resource_Obj[rootnm].nu), resource_Obj[rootnm].gpi, resource_Obj[rootnm].nfu, JSON.stringify(resource_Obj[rootnm].bn), resource_Obj[rootnm].rl, resource_Obj[rootnm].psn, resource_Obj[rootnm].pn, resource_Obj[rootnm].nsp, resource_Obj[rootnm].ln, resource_Obj[rootnm].nct, resource_Obj[rootnm].nec, @@ -729,7 +729,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '24') { db_sql.insert_smd(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].cr, resource_Obj[rootnm].dsp, resource_Obj[rootnm].dcrp, resource_Obj[rootnm].soe, JSON.stringify(resource_Obj[rootnm].rels), resource_Obj[rootnm].or, function (err, results) { if (!err) { callback('1', resource_Obj); @@ -753,7 +753,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '29') { db_sql.insert_ts(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].cr, resource_Obj[rootnm].mbs, resource_Obj[rootnm].mia, resource_Obj[rootnm].cni, resource_Obj[rootnm].cbs, resource_Obj[rootnm].or, resource_Obj[rootnm].pei, resource_Obj[rootnm].mdd, resource_Obj[rootnm].mdn, resource_Obj[rootnm].mdl, resource_Obj[rootnm].mdc, resource_Obj[rootnm].mdt, function (err, results) { @@ -781,7 +781,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '30') { db_sql.insert_tsi(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].dgt, resource_Obj[rootnm].con, resource_Obj[rootnm].sqn, function (err, results) { if (!err) { create_action_cni(resource_Obj[rootnm].ri, resource_Obj[rootnm].ty, resource_Obj[rootnm].pi, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, function (rsc, st) { @@ -809,7 +809,7 @@ function create_action(request, response, ty, resource_Obj, callback) { else if (ty == '27') { db_sql.insert_mms(resource_Obj[rootnm].ty, resource_Obj[rootnm].ri, resource_Obj[rootnm].rn, resource_Obj[rootnm].pi, resource_Obj[rootnm].ct, resource_Obj[rootnm].lt, resource_Obj[rootnm].et, JSON.stringify(resource_Obj[rootnm].acpi), JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), - JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].cnf, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, + JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].st, resource_Obj[rootnm].mni, resource_Obj[rootnm].cs, resource_Obj[rootnm].sri, resource_Obj[rootnm].spi, resource_Obj[rootnm].sid, resource_Obj[rootnm].soid, resource_Obj[rootnm].stid, resource_Obj[rootnm].asd, resource_Obj[rootnm].osd, resource_Obj[rootnm].sst, function (err, results) { if (!err) { @@ -887,7 +887,7 @@ function build_resource(request, response, ty, body_Obj, callback) { resource_Obj[rootnm].mni = '3153600000'; resource_Obj[rootnm].cs = ''; - resource_Obj[rootnm].cnf = ''; + //resource_Obj[rootnm].cnf = ''; if(ty == '3' || ty == '29') { resource_Obj[rootnm].mni = '3153600000'; @@ -1184,10 +1184,10 @@ function search_action(request, response, seq, resource_Obj, ri_list, strObj, pr console.time('search_resource'); } - if(request.query.ty != null) { - tbl = request.query.ty; + /* if(request.query.ty != null) { + tbl = request.query.ty; // [TIM]: query.ty can be an ARRAY not only single value, so error in typeRsrc[tbl] seq = ty_list.length; - } + } */ db_sql.select_in_ri_list(responder.typeRsrc[tbl], ri_list, 0, finding_Obj, 0, function (err, search_Obj) { if(!err) { @@ -1363,7 +1363,7 @@ exports.retrieve = function(request, response, comm_Obj) { resource_Obj = {}; resource_Obj.uril = {}; resource_Obj.uril = ri_list; - make_cse_relative(ri_list); + //make_cse_relative(ri_list); // [TIM] path must begin with / responder.search_result(request, response, 200, resource_Obj, 2000, comm_Obj.ri, ''); } else if (request.query.rcn == 4 || request.query.rcn == 5 ||request.query.rcn == 6) { @@ -1373,6 +1373,7 @@ exports.retrieve = function(request, response, comm_Obj) { if (rsc == '1') { strObj += '}'; resource_Obj = JSON.parse(strObj); + //console.log("retrieve - rcn:",ri_list, resource_Obj) for (var index in resource_Obj) { if (resource_Obj.hasOwnProperty(index)) { resource_Obj[index] = merge(resource_Obj[index], search_Obj[index]); @@ -1603,9 +1604,12 @@ function update_action( request, response, ty, resource_Obj, callback) { }); } else if(ty == '9') { + // [TIM] + var macp = resource_Obj[rootnm].macp; + if (typeof macp == "object") macp = JSON.stringify(resource_Obj[rootnm].macp); db_sql.update_grp(resource_Obj[rootnm].lt, JSON.stringify(resource_Obj[rootnm].acpi), resource_Obj[rootnm].et, resource_Obj[rootnm].st, JSON.stringify(resource_Obj[rootnm].lbl), JSON.stringify(resource_Obj[rootnm].at), JSON.stringify(resource_Obj[rootnm].aa), resource_Obj[rootnm].mni, resource_Obj[rootnm].ri, - resource_Obj[rootnm].mnm, JSON.stringify(resource_Obj[rootnm].mid), JSON.stringify(resource_Obj[rootnm].macp), resource_Obj[rootnm].gn, function (err, results) { + resource_Obj[rootnm].mnm, JSON.stringify(resource_Obj[rootnm].mid), macp, resource_Obj[rootnm].gn, function (err, results) { if (!err) { callback('1', resource_Obj); } diff --git a/mobius/responder.js b/mobius/responder.js index b3c5f220..65adf6fc 100644 --- a/mobius/responder.js +++ b/mobius/responder.js @@ -808,7 +808,7 @@ function typeCheckAction(index1, body_Obj) { else if (index2 == 'cst' || index2 == 'los' || index2 == 'mt' || index2 == 'csy' || index2 == 'nct' || index2 == 'cs' || index2 == 'st' || index2 == 'ty' || index2 == 'cbs' || index2 == 'cni' || index2 == 'mni' || - index2 == 'cnm' || index2 == 'mia' || index2 == 'mbs' || index2 == 'cnf' || index2 == 'mgd' || index2 == 'btl' || index2 == 'bts' || + index2 == 'cnm' || index2 == 'mia' || index2 == 'mbs' || index2 == 'mgd' || index2 == 'btl' || index2 == 'bts' || index2 == 'mdn' || index2 == 'mdc' || index2 == 'mdt' || index2 == 'pei' || index2 == 'mnm') { if ((index1 == 'm2m:cin' || index1 == 'm2m:nod' || index1 == 'm2m:ae' || index1 == 'm2m:sub' || index1 == 'm2m:acp' || index1 == 'm2m:csr' || index1 == 'm2m:grp' diff --git a/mobius/sgn.js b/mobius/sgn.js index 2a547fa7..223d35f7 100644 --- a/mobius/sgn.js +++ b/mobius/sgn.js @@ -18,6 +18,7 @@ var util = require('util'); var url = require('url'); var http = require('http'); var https = require('https'); +var HttpsProxyAgent = require('https-proxy-agent'); var coap = require('coap'); var js2xmlparser = require('js2xmlparser'); var xmlbuilder = require('xmlbuilder'); @@ -186,7 +187,7 @@ function sgn_action(rootnm, check_value, results_ss, noti_Obj, sub_bodytype) { } if (sub_bodytype == 'xml') { - if (sub_nu.protocol == 'http:') { + if (sub_nu.protocol == 'http:' || sub_nu.protocol == 'https:') { node[Object.keys(node)[0]]['@'] = { "xmlns:m2m": "http://www.onem2m.org/xml/protocols", "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance" @@ -214,7 +215,7 @@ function sgn_action(rootnm, check_value, results_ss, noti_Obj, sub_bodytype) { } } else if (sub_bodytype == 'cbor') { - if (sub_nu.protocol == 'http:') { + if (sub_nu.protocol == 'http:' || sub_nu.protocol == 'https:') { //node['m2m:'+Object.keys(node)[0]] = node[Object.keys(node)[0]]; //delete node[Object.keys(node)[0]]; bodyString = cbor.encode(node).toString('hex'); @@ -236,7 +237,7 @@ function sgn_action(rootnm, check_value, results_ss, noti_Obj, sub_bodytype) { } } else { // defaultbodytype == 'json') - if (sub_nu.protocol == 'http:') { + if (sub_nu.protocol == 'http:' || sub_nu.protocol == 'https:') { //node['m2m:'+Object.keys(node)[0]] = node[Object.keys(node)[0]]; //delete node[Object.keys(node)[0]]; request_noti_http(nu, results_ss.ri, JSON.stringify(node), sub_bodytype, xm2mri); @@ -314,68 +315,69 @@ exports.check = function(request, notiObj, check_value) { function request_noti_http(nu, ri, bodyString, bodytype, xm2mri) { - if(url.parse(nu).protocol == 'http:') { +// [TIM} manage localhost, http and https, assuming there is a proxy configured + var ssl = nu.indexOf("https:")!==-1; + var _http = http; + if (nu.indexOf("localhost")==-1 && process.env.http_proxy) { + console.log(" >request_SS ----> EXT: "+nu); + // external url + if (ssl) { + // https + var agent = new HttpsProxyAgent(process.env.https_proxy); + var options = { + hostname: url.parse(nu).hostname, + port: url.parse(nu).port, + path: url.parse(nu).path, + method: 'POST', + agent: agent + }; + _http = https; + } else { + // http + var options = { + hostname: url.parse(process.env.http_proxy).hostname, + port: url.parse(process.env.http_proxy).port, + path: nu, + method: 'POST' + }; + _http = http; + } + } else { + // local url var options = { hostname: url.parse(nu).hostname, port: url.parse(nu).port, path: url.parse(nu).path, - method: 'POST', - headers: { - 'X-M2M-RI': xm2mri, - 'Accept': 'application/'+bodytype, - 'X-M2M-Origin': usecseid, - 'Content-Type': 'application/'+bodytype, - 'ri': ri - } + method: 'POST' }; - - var bodyStr = ''; - var req = http.request(options, function (res) { - res.on('data', function (chunk) { - bodyStr += chunk; - }); - - res.on('end', function () { - if(res.statusCode == 200 || res.statusCode == 201) { - console.log('----> [request_noti_http] response for notification through http ' + res.headers['x-m2m-rsc'] + ' - ' + ri); - ss_fail_count[res.req._headers.ri] = 0; - } - }); - }); - } - else { - options = { - hostname: url.parse(nu).hostname, - port: url.parse(nu).port, - path: url.parse(nu).path, - method: 'POST', - headers: { - 'X-M2M-RI': xm2mri, - 'Accept': 'application/'+bodytype, - 'X-M2M-Origin': usecseid, - 'Content-Type': 'application/'+bodytype, - 'ri': ri - }, - ca: fs.readFileSync('ca-crt.pem') - }; - - req = https.request(options, function (res) { - res.on('data', function (chunk) { - bodyStr += chunk; - }); - - res.on('end', function () { - if(res.statusCode == 200 || res.statusCode == 201) { - console.log('----> [request_noti_http] response for notification through http ' + res.headers['x-m2m-rsc'] + ' - ' + ri); - ss_fail_count[res.req._headers.ri] = 0; - } - }); - }); } + options.headers = { + 'X-M2M-RI': xm2mri, + 'Accept': 'application/'+bodytype, + 'X-M2M-Origin': usecseid, + 'Content-Type': 'application/'+bodytype, + 'ri': ri + }; + var bodyStr = ''; + var req = _http.request(options, function (res) { + res.on('data', function (chunk) { + bodyStr += chunk; + }); + + res.on('end', function () { + if(res.statusCode == 200 || res.statusCode == 201) { + console.log('----> [request_noti_http] response for notification through http ' + res.headers['x-m2m-rsc'] + ' - ' + ri); + ss_fail_count[res.req._headers.ri] = 0; + } else { + console.log('----> response for notification through http:', res.statusCode, res.statusMessage); + } + }); + }); req.on('error', function (e) { if(e.message != 'read ECONNRESET') { console.log('[request_noti_http] problem with request: ' + e.message); + req.abort(); } }); diff --git a/mobius/sql_action.js b/mobius/sql_action.js index 5b505402..f9578306 100644 --- a/mobius/sql_action.js +++ b/mobius/sql_action.js @@ -42,7 +42,7 @@ function set_sri_sri(ri, sri, callback) { }); } -exports.insert_lookup = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, callback) { +exports.insert_lookup = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, callback) { console.time('insert_lookup ' + ri); var sql = util.format('insert into lookup (' + 'ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi) ' + @@ -58,9 +58,9 @@ exports.insert_lookup = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, }); }; -exports.insert_cb = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, cst, csi, srt, poa, nl, ncp, callback) { +exports.insert_cb = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, cst, csi, srt, poa, nl, ncp, callback) { console.time('insert_cb ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into cb (' + 'ri, cst, csi, srt, poa, nl, ncp) ' + @@ -86,9 +86,9 @@ exports.insert_cb = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_acp = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, pv, pvs, callback) { +exports.insert_acp = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, pv, pvs, callback) { console.time('insert_acp ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into acp (ri, pv, pvs) ' + 'value (\'%s\', \'%s\', \'%s\')', @@ -112,9 +112,9 @@ exports.insert_acp = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_ae = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, apn, api, aei, poa, or, nl, rr, callback) { +exports.insert_ae = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, apn, api, aei, poa, or, nl, rr, callback) { console.time('insert_ae ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into ae (ri, apn, api, aei, poa, ae.or, nl, rr) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -142,9 +142,9 @@ exports.insert_ae = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_cnt = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, cr, mbs, mia, cni, cbs, li, or, callback) { +exports.insert_cnt = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, cr, mbs, mia, cni, cbs, li, or, callback) { console.time('insert_cnt ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into cnt (ri, cr, mni, mbs, mia, cni, cbs, li, cnt.or) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -178,14 +178,13 @@ global.getType = function (p) { exports.insert_cin = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, cr, or, con, callback) { console.time('insert_cin ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var con_type = getType(con); - var sql = util.format('insert into cin (ri, cr, cnf, cs, cin.or, con) ' + - 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', - ri, cr, cnf, cs, or, - (con_type == 'string') ? con.replace(/'/g, "\\'") : JSON.stringify(con)); - db.getResult(sql, '', function (err, results) { + // [TIM] fields escape is necessary for "content" field if containing special chars + var sql = 'insert into cin (ri, cr, cnf, cs, cin.or, con) value (?, ?, ?, ?, ?, ?)'; + var values = [ri, cr, cnf, cs, or, (con_type == 'string') ? con : JSON.stringify(con)]; + db.getResultEsc(sql, values, function (err, results) { if(!err) { console.timeEnd('insert_cin ' + ri); callback(err, results); @@ -197,6 +196,8 @@ exports.insert_cin = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); } }); + + } else { callback(err, results); @@ -204,9 +205,9 @@ exports.insert_cin = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_grp = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, cr, mt, cnm, mnm, mid, macp, mtv, csy, gn, callback) { +exports.insert_grp = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, cr, mt, cnm, mnm, mid, macp, mtv, csy, gn, callback) { console.time('insert_grp ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into grp (ri, cr, mt, cnm, mnm, mid, macp, mtv, csy, gn) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -231,9 +232,9 @@ exports.insert_grp = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_lcp = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, los, lou, lot, lor, loi, lon, lost, callback) { +exports.insert_lcp = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, los, lou, lot, lor, loi, lon, lost, callback) { console.time('insert_lcp ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into lcp (ri, los, lou, lot, lor, loi, lon, lost) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -258,9 +259,9 @@ exports.insert_lcp = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_fwr = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, mgd, objs, obps, dc, vr, fwnnam, url, ud, uds, callback) { +exports.insert_fwr = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, mgd, objs, obps, dc, vr, fwnnam, url, ud, uds, callback) { console.time('insert_fwr ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into mgo (ri, mgd, objs, obps, dc, vr, fwnnam, url, ud, uds) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -284,9 +285,9 @@ exports.insert_fwr = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_bat = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, mgd, objs, obps, dc, btl, bts, callback) { +exports.insert_bat = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, mgd, objs, obps, dc, btl, bts, callback) { console.time('insert_bat ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into mgo (ri, mgd, objs, obps, dc, btl, bts) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -310,9 +311,9 @@ exports.insert_bat = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_dvi = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, mgd, objs, obps, dc, dbl, man, mod, dty, fwv, swv, hwv, callback) { +exports.insert_dvi = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, mgd, objs, obps, dc, dbl, man, mod, dty, fwv, swv, hwv, callback) { console.time('insert_dvi ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into mgo (ri, mgd, objs, obps, dc, dbl, man, mgo.mod, dty, fwv, swv, hwv) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -336,9 +337,9 @@ exports.insert_dvi = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_dvc = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, mgd, objs, obps, dc, can, att, cas, cus, ena, dis, callback) { +exports.insert_dvc = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, mgd, objs, obps, dc, can, att, cas, cus, ena, dis, callback) { console.time('insert_dvc ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into mgo (ri, mgd, objs, obps, dc, can, att, cas, cus, ena, dis) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -362,9 +363,9 @@ exports.insert_dvc = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_rbo = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, mgd, objs, obps, dc, rbo, far, callback) { +exports.insert_rbo = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, mgd, objs, obps, dc, rbo, far, callback) { console.time('insert_rbo ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into mgo (ri, mgd, objs, obps, dc, rbo, far) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -388,9 +389,9 @@ exports.insert_rbo = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_nod = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, ni, hcl, callback) { +exports.insert_nod = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, ni, hcl, callback) { console.time('insert_nod ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into nod (ri, ni, hcl) ' + 'value (\'%s\', \'%s\', \'%s\')', @@ -414,9 +415,9 @@ exports.insert_nod = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_csr = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, cst, poa, cb, csi, mei, tri, rr, nl, callback) { +exports.insert_csr = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, cst, poa, cb, csi, mei, tri, rr, nl, callback) { console.time('insert_csr ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into csr (ri, cst, poa, cb, csi, mei, tri, rr, nl) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -441,9 +442,9 @@ exports.insert_csr = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_req = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, op, tg, org, rid, mi, pc, rs, ors, callback) { +exports.insert_req = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, op, tg, org, rid, mi, pc, rs, ors, callback) { console.time('insert_req ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into req (ri, op, tg, org, rid, mi, pc, rs, ors) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -467,9 +468,9 @@ exports.insert_req = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_sub = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, enc, exc, nu, gpi, nfu, bn, rl, psn, pn, nsp, ln, nct, nec, cr, su, callback) { +exports.insert_sub = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, enc, exc, nu, gpi, nfu, bn, rl, psn, pn, nsp, ln, nct, nec, cr, su, callback) { console.time('insert_sub ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into sub (ri, pi, enc, exc, nu, gpi, nfu, bn, rl, psn, pn, nsp, ln, nct, nec, cr, su) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -496,9 +497,9 @@ exports.insert_sub = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_smd = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, cr, dsp, dcrp, soe, rels, or, callback) { +exports.insert_smd = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, cr, dsp, dcrp, soe, rels, or, callback) { console.time('insert_smd ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into smd (ri, cr, dsp, dcrp, soe, rels, smd.or) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -522,9 +523,9 @@ exports.insert_smd = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_ts = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, cr, mbs, mia, cni, cbs, or, pei, mdd, mdn, mdl, mdc, mdt, callback) { +exports.insert_ts = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, cr, mbs, mia, cni, cbs, or, pei, mdd, mdn, mdl, mdc, mdt, callback) { console.time('insert_ts ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into ts (ri, cr, mni, mbs, mia, cni, cbs, ts.or, pei, mdd, mdn, mdl, mdc, mdt) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', ' + @@ -551,9 +552,9 @@ exports.insert_ts = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_tsi = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, dgt, con, sqn, callback) { +exports.insert_tsi = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, dgt, con, sqn, callback) { console.time('insert_tsi ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into tsi (ri, dgt, con, sqn) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\')', @@ -577,9 +578,9 @@ exports.insert_tsi = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, }); }; -exports.insert_mms = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, sid, soid, stid, asd, osd, sst, callback) { +exports.insert_mms = function(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, sid, soid, stid, asd, osd, sst, callback) { console.time('insert_mms ' + ri); - _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, cnf, sri, spi, function (err, results) { + _this.insert_lookup(ty, ri, rn, pi, ct, lt, et, acpi, lbl, at, aa, st, mni, cs, sri, spi, function (err, results) { if(!err) { var sql = util.format('insert into mms (ri, sid, soid, stid, asd, osd, sst) ' + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', @@ -698,12 +699,14 @@ function build_discovery_sql(ri, query, cur_lim, pi_list, bef_ct) { ty_str += util.format('ty = \'%s\'', query.ty); } else { + // [TIM]: query.ty must be splitted (ty can be 2 digits eg. ty=1,2,23) + var ty = query.ty.toString().split(','); query_where += ' ('; ty_str += ' ('; - for(i = 0; i < query.ty.length; i++) { - query_where += util.format('a.ty = \'%s\'', query.ty[i]); - ty_str += util.format('ty = \'%s\'', query.ty[i]); - if(i < query.ty.length-1) { + for(i = 0; i < ty.length; i++) { + query_where += util.format('a.ty = \'%s\'', ty[i]); + ty_str += util.format('ty = \'%s\'', ty[i]); + if(i < ty.length-1) { query_where += ' or '; ty_str += ' or '; } @@ -845,7 +848,7 @@ function build_discovery_sql(ri, query, cur_lim, pi_list, bef_ct) { query_where = util.format("select a.* from (select ri from lookup where ((ri = \'" + ri + "\') or pi in ("+JSON.stringify(pi_list).replace('[','').replace(']','')+")) %s and (ct > \'%s\')) b left join lookup as a on b.ri = a.ri", ty_str, bef_ct) + query_where; //query_where = util.format("select a.* from (select ri from lookup where ((ri = \'" + ri + "\') or pi in ("+JSON.stringify(pi_list).replace('[','').replace(']','')+")) %s and (ct > \'%s\' and ct <= \'%s\') limit 1000) b left join lookup as a on b.ri = a.ri", ty_str, bef_ct, cur_ct) + query_where; //query_where = util.format("select a.* from (select ri from lookup where (pi in ("+JSON.stringify(pi_list).replace('[','').replace(']','')+")) %s and (ct > \'%s\' and ct <= \'%s\') order by ct desc limit 1000) b left join lookup as a on b.ri = a.ri", ty_str, bef_ct, cur_ct) + query_where; - + return query_where; } @@ -1070,7 +1073,7 @@ exports.select_in_ri_list = function (tbl, ri_list, ri_index, found_Obj, loop_cn if(loop_cnt == 0) { tid = require('shortid').generate(); - console.time('select_in_ri_list (' + tid + ')'); + // [TIM] console.time('select_in_ri_list (' + tid + ')'); } for(var idx = 0; idx < 8; idx++) { @@ -1090,7 +1093,7 @@ exports.select_in_ri_list = function (tbl, ri_list, ri_index, found_Obj, loop_cn } if(ri_index >= ri_list.length) { - console.timeEnd('select_in_ri_list (' + tid + ')'); + // [TIM] console.timeEnd('select_in_ri_list (' + tid + ')'); callback(err, found_Obj); } else { @@ -1228,17 +1231,19 @@ exports.update_grp = function (lt, acpi, et, st, lbl, at, aa, mni, ri, mnm, mid, lt, acpi, et, st, lbl, at, aa, mni, ri); db.getResult(sql1, '', function (err, results) { if (!err) { - var sql2 = util.format('update grp set mnm = \'%s\', mid = \'%s\', macp = \'%s\', gn = \'%s\' where ri = \'%s\'', - mnm, mid, macp, gn, ri); - db.getResult(sql2, '', function (err, results) { - if (!err) { + // [TIM] need escaping to avoid errors in DB + var sql2 = 'update grp set mnm = ?, mid = ?, macp = ?, gn = ? where ri = ?'; + var values = [mnm, mid, macp, gn, ri]; + db.getResultEsc(sql2, values, function (err, results) { + if(!err) { console.timeEnd('update_grp ' + ri); callback(err, results); } else { callback(err, results); } - }); + }); + } else { callback(err, results); @@ -1650,3 +1655,78 @@ exports.delete_req = function (callback) { } }); }; + +// [TIM] users management + +exports.get_user = function (username, callback) { + if (username) + var sql = util.format("select * from users where username = \'%s\';", username); + else + sql = util.format("select id,username,context,role,data from users where role<>'superadmin';"); + + db.getResult(sql, '', function (err, user_Obj) { + if(!err) { + callback(user_Obj); + } else { + callback(null); + } + }); +}; + +exports.insert_user = function(user_Obj, callback) { + console.time('insert_user ' + user_Obj.username); + if (user_Obj.data==undefined) user_Obj.data = null; + var sql = util.format('insert into users (username,context,role,password,`data`) ' + + 'value (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', + user_Obj.username, user_Obj.context, user_Obj.role, user_Obj.hashPwd, user_Obj.data); + db.getResult(sql, '', function (err, results) { + if(!err) { + console.timeEnd('insert_user ' + user_Obj.username); + callback(); + } else { + callback(err); + } + }); +}; + +exports.update_user = function (user_Obj, callback) { + console.time('update_user ' + user_Obj.username); + if (!user_Obj.context && !user_Obj.role) { + // update personal data + var sql2 = 'update users set `data` = ? where username = ?'; + var values = [user_Obj.data, user_Obj.username]; + } else { + // update all user data (except pwd) + var sql2 = 'update users set context = ?, role = ?, `data` = ? where username = ?'; + var values = [user_Obj.context, user_Obj.role, user_Obj.data, user_Obj.username]; + } + db.getResult1(sql2, values, function (err, results) { + if (!err) { + console.timeEnd('update_user ' + user_Obj.username); + callback(); + } else { + callback(err); + } + }); +}; + +exports.update_user_pwd = function (user_Obj, callback) { + console.time('update_user_pwd ' + user_Obj.username); + var sql2 = 'update users set password = ? where username = ?'; + var values = [user_Obj.hashPwd, user_Obj.username]; + db.getResult1(sql2, values, function (err, results) { + if (!err) { + console.timeEnd('update_user_pwd ' + user_Obj.username); + callback(); + } else { + callback(err); + } + }); +}; + +exports.delete_user = function (id, callback) { + var sql = util.format("DELETE FROM users WHERE id = \'%s\'", id); + db.getResult(sql, '', function (err, results) { + callback(err, results); + }); +}; diff --git a/mobius/ts_agent.js b/mobius/ts_agent.js index a756c894..1efdd612 100644 --- a/mobius/ts_agent.js +++ b/mobius/ts_agent.js @@ -213,7 +213,7 @@ var ts_timer_id = {}; var missing_detect_check = function(pei, mdd, mdt, cni, ri, callback) { var rsc = {}; rsc.status = 2000; - if((pei != null && pei != '' && pei != '0') && (mdd != null && mdd == 'TRUE') && mdt != '0') { + if((pei != null && pei != '' && pei != '0') && (mdd != null && mdd.toUpperCase() == 'TRUE') && mdt != '0') { if(ts_timer[ri] == null) { //ts_timer[ri] = new process.EventEmitter(); var events = require('events'); @@ -306,11 +306,11 @@ ts_app.post('/missingDataDetect', onem2mParser, function(request, response) { if (jsonObj['m2m:dbg']) { var ts_ri = []; } - else if (jsonObj['m2m:uril']['_'] == null) { + else if (jsonObj['m2m:uril'] == null) { // [TIM] removed ['_'] ts_ri = []; } else { - ts_ri = jsonObj['m2m:uril']['_'].toString().split(' '); + ts_ri = jsonObj['m2m:uril'].toString().split(' '); // [TIM] removed ['_'] } var ts = {}; @@ -321,13 +321,18 @@ ts_app.post('/missingDataDetect', onem2mParser, function(request, response) { missing_detect_check(results_ts[0].pei, results_ts[0].mdd, results_ts[0].mdt, results_ts[0].cni, results_ts[0].ri, function (rsc) { console.log(rsc); }); + for (var i = 0; i < results_ts.length; i++) { // [TIM] cycle for all results + missing_detect_check(results_ts[i].pei, results_ts[i].mdd, results_ts[i].mdt, results_ts[i].cni, results_ts[i].ri, function (rsc) { + //console.log(rsc); + }); + } } } response.setHeader('X-M2M-RSC', '2000'); ts.status = '2000'; - ts.ri = jsonObj['m2m:uril']['_']; + ts.ri = jsonObj['m2m:uril']; // [TIM] removed ['_'] response.status(200).end(JSON.stringify(ts)); }); } diff --git a/package.json b/package.json index 1ddae05b..2d57c0f3 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,14 @@ "cbor": "^3.0.0", "coap": "^0.21.0", "crypto": "0.0.3", + "dateformat": "^3.0.2", "events": "^1.1.1", "express": "^4.15.1", "file-stream-rotator": "0.1.0", "fs": "0.0.2", "http": "0.0.0", "https": "^1.0.0", + "https-proxy-agent": "^2.1.0", "ip": "^1.1.5", "js2xmlparser": "^3.0.0", "merge": "^1.2.0", @@ -23,6 +25,8 @@ "url": "^0.11.0", "util": "^0.10.3", "websocket": "^1.0.24", + "winston": "^2.3.1", + "winston-daily-rotate-file": "^1.7.2", "xml2js": "^0.4.17", "xmlbuilder": "^9.0.1" }, @@ -34,4 +38,4 @@ }, "author": "Il Yeup Ahn, KETI", "license": "ISC" -} \ No newline at end of file +} diff --git a/pxy_coap.js b/pxy_coap.js index e1e6e370..4c7f1fea 100644 --- a/pxy_coap.js +++ b/pxy_coap.js @@ -101,10 +101,10 @@ exports.coap_watchdog = function () { else if(coap_state === 'connect') { if(pxycoap_server == null) { pxycoap_server = coap.createServer(); - pxycoap_server.listen(usecsebaseport, function() { + pxycoap_server.listen(usepxycoapport, function() { var options = { host: 'localhost', - port: usecsebaseport, + port: usepxycoapport, pathname: '/'+usecsebase, method: 'get', confirmable: 'false', @@ -168,9 +168,14 @@ function coap_message_handler(request, response) { } else if (request.options[idx].name == '267') { // 'X-M2M-TY headers['X-M2M-TY'] = Buffer.isBuffer(request.options[idx].value) ? request.options[idx].value[0].toString() : request.options[idx].value.toString(); + } else if (request.options[idx].name == '271') { // Authorization [TIM] + headers['Authorization'] = Buffer.isBuffer(request.options[idx].value) ? request.options[idx].value.toString() : request.options[idx].value; + //console.log(">>>>>COAP.auth=",headers['Authorization'],request.options[idx]); } } } + + headers['user-agent'] = "proxy-coap"; // [TIM] if(request.headers['Accept']) { diff --git a/pxy_mqtt.js b/pxy_mqtt.js index 4fb82496..7935a837 100644 --- a/pxy_mqtt.js +++ b/pxy_mqtt.js @@ -312,6 +312,10 @@ function mqtt_message_handler(topic, message) { console.log('----> ' + topic); console.log(message.toString()); var topic_arr = topic.split("/"); + // [TIM] clean from ?auth query string + if(topic_arr[topic_arr.length-1].indexOf("?auth")!=-1) { + topic_arr[topic_arr.length-1] = topic_arr[topic_arr.length-1].split("?auth")[0]; + } if(topic_arr[5] != null) { var bodytype = (topic_arr[5] == 'xml') ? topic_arr[5] : ((topic_arr[5] == 'json') ? topic_arr[5] : ((topic_arr[5] == 'cbor') ? topic_arr[5] : 'json')); } @@ -382,7 +386,7 @@ function mqtt_message_handler(topic, message) { result['m2m:rqp'] = result; } - mqtt_message_action(pxymqtt_client, topic_arr, bodytype, result); + mqtt_message_action(pxymqtt_client, topic, topic_arr, bodytype, result); } else { var resp_topic = '/oneM2M/resp/'; @@ -400,7 +404,7 @@ function mqtt_message_handler(topic, message) { result['m2m:rqp'] = result; } if(rsc == '1') { - mqtt_message_action(pxymqtt_client, topic_arr, bodytype, result); + mqtt_message_action(pxymqtt_client, topic, topic_arr, bodytype, result); } else { var resp_topic = '/oneM2M/resp/'; @@ -417,7 +421,7 @@ function mqtt_message_handler(topic, message) { } } -function mqtt_message_action(mqtt_client, topic_arr, bodytype, jsonObj) { +function mqtt_message_action(mqtt_client, topic, topic_arr, bodytype, jsonObj) { if (jsonObj['m2m:rqp'] != null) { var op = (jsonObj['m2m:rqp'].op == null) ? '' : jsonObj['m2m:rqp'].op; var to = (jsonObj['m2m:rqp'].to == null) ? '' : jsonObj['m2m:rqp'].to; @@ -451,7 +455,13 @@ function mqtt_message_action(mqtt_client, topic_arr, bodytype, jsonObj) { resp_topic += (topic_arr[3] + '/' + topic_arr[4] + '/' + topic_arr[5]); if (to.split('/')[1].split('?')[0] == usecsebase) { - mqtt_binding(op, to, fr, rqi, ty, pc, bodytype, function (res, res_body) { + // [TIM] auth query string in topic + var auth = topic.split("?"); + if (auth.length==2) { + auth = auth[1].replace("auth=", ""); + //console.log(">>>>>MQTT.auth=",auth); + } else auth = null; + mqtt_binding(op, to, fr, rqi, ty, pc, bodytype, auth, function (res, res_body) { if (res_body == '') { res_body = '{}'; } @@ -484,7 +494,7 @@ function mqtt_message_action(mqtt_client, topic_arr, bodytype, jsonObj) { } } -function mqtt_binding(op, to, fr, rqi, ty, pc, bodytype, callback) { +function mqtt_binding(op, to, fr, rqi, ty, pc, bodytype, auth, callback) { var content_type = 'application/vnd.onem2m-res+json'; switch (op.toString()) { @@ -510,18 +520,24 @@ function mqtt_binding(op, to, fr, rqi, ty, pc, bodytype, callback) { var bodyStr = ''; + // {TIM] + var headers = { + 'X-M2M-RI': rqi, + 'Accept': 'application/json', + 'X-M2M-Origin': fr, + 'Content-Type': content_type + }; + if (auth) { + headers['Authorization'] = auth; + headers['user-agent'] = "proxy-mqtt"; // [TIM] + } if(usesecure == 'disable') { var options = { hostname: usemqttcbhost, port: usecsebaseport, path: to, method: op, - headers: { - 'X-M2M-RI': rqi, - 'Accept': 'application/json', - 'X-M2M-Origin': fr, - 'Content-Type': content_type - } + headers: headers }; var req = http.request(options, function (res) { @@ -542,12 +558,7 @@ function mqtt_binding(op, to, fr, rqi, ty, pc, bodytype, callback) { port: usecsebaseport, path: to, method: op, - headers: { - 'X-M2M-RI': rqi, - 'Accept': 'application/json', - 'X-M2M-Origin': fr, - 'Content-Type': content_type - }, + headers: headers, ca: fs.readFileSync('ca-crt.pem') }; diff --git a/pxy_ws.js b/pxy_ws.js index 291ddf0e..b0b079ca 100644 --- a/pxy_ws.js +++ b/pxy_ws.js @@ -113,11 +113,19 @@ exports.ws_watchdog = function() { console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.'); return; } - + + //[TIM] retrieve auth query param from search string of request url + + if (request.resourceURL.search && request.resourceURL.search.indexOf("?auth")!=-1) { + var auth = request.resourceURL.search.replace("?auth=",""); + console.log(">>>>>WS.auth=",auth); + } else auth = null; + for (var index in request.requestedProtocols) { if(request.requestedProtocols.hasOwnProperty(index)) { if(request.requestedProtocols[index] === 'onem2m.r2.0.xml') { var connection = request.accept('onem2m.r2.0.xml', request.origin); + connection.auth = auth; console.log((new Date()) + ' Connection accepted. (xml)'); connection.on('message', ws_message_handler); connection.on('close', function (reasonCode, description) { @@ -127,6 +135,7 @@ exports.ws_watchdog = function() { } else if(request.requestedProtocols[index] === 'onem2m.r2.0.cbor') { var connection = request.accept('onem2m.r2.0.cbor', request.origin); + connection.auth = auth; console.log((new Date()) + ' Connection accepted. (cbor)'); connection.on('message', ws_message_handler); connection.on('close', function (reasonCode, description) { @@ -136,6 +145,7 @@ exports.ws_watchdog = function() { } else if(request.requestedProtocols[index] === 'onem2m.r2.0.json') { var connection = request.accept('onem2m.r2.0.json', request.origin); + connection.auth = auth; console.log((new Date()) + ' Connection accepted. (json)'); connection.on('message', ws_message_handler); connection.on('close', function (reasonCode, description) { @@ -363,7 +373,7 @@ function ws_message_action(connection, bodytype, jsonObj) { try { if (to.split('/')[1].split('?')[0] == usecsebase) { - ws_binding(op, to, fr, rqi, ty, pc, bodytype, function (res, res_body) { + ws_binding(op, to, fr, rqi, ty, pc, bodytype, connection.auth, function (res, res_body) { if (res_body == '') { res_body = '{}'; } @@ -386,7 +396,7 @@ function ws_message_action(connection, bodytype, jsonObj) { } } -function ws_binding(op, to, fr, rqi, ty, pc, bodytype, callback) { +function ws_binding(op, to, fr, rqi, ty, pc, bodytype, auth, callback) { var content_type = 'application/vnd.onem2m-res+json'; switch (op.toString()) { @@ -411,6 +421,18 @@ function ws_binding(op, to, fr, rqi, ty, pc, bodytype, callback) { } var bodyStr = ''; + + // [TIM] authorization headers + var headers = { + 'X-M2M-RI': rqi, + 'Accept': 'application/json', + 'X-M2M-Origin': fr, + 'Content-Type': content_type + }; + if (auth) { + headers['Authorization'] = auth; + headers['user-agent'] = "proxy-ws"; // [TIM] + } if(usesecure == 'disable') { var options = { @@ -418,12 +440,7 @@ function ws_binding(op, to, fr, rqi, ty, pc, bodytype, callback) { port: usecsebaseport, path: to, method: op, - headers: { - 'X-M2M-RI': rqi, - 'Accept': 'application/json', - 'X-M2M-Origin': fr, - 'Content-Type': content_type - } + headers: headers }; var req = http.request(options, function (res) { @@ -444,12 +461,7 @@ function ws_binding(op, to, fr, rqi, ty, pc, bodytype, callback) { port: usecsebaseport, path: to, method: op, - headers: { - 'X-M2M-RI': rqi, - 'Accept': 'application/json', - 'X-M2M-Origin': fr, - 'Content-Type': content_type - }, + headers: headers, ca: fs.readFileSync('ca-crt.pem') };