diff --git a/src/serverroot/common/httpsoptions.api.js b/src/serverroot/common/httpsoptions.api.js index 7e15a423a..e049d3b50 100644 --- a/src/serverroot/common/httpsoptions.api.js +++ b/src/serverroot/common/httpsoptions.api.js @@ -143,12 +143,11 @@ function updateHttpsSecureOptions (apiType, options) logutils.logger.error('readFileSync error for ca file' + e); } } - /* If strictSSL is set to false, then if response.client.authorized - * is set as false, a secure connection is established. - */ + /* https://github.com/mscdex/node-imap/issues/181 */ + options['rejectUnauthorized'] = false; var strictSSL = getHttpsOptionsByAPIType(apiType, 'strictSSL'); if (null != strictSSL) { - options['strictSSL'] = strictSSL; + options['rejectUnauthorized'] = strictSSL; } } return options; diff --git a/src/serverroot/common/rest.api.js b/src/serverroot/common/rest.api.js index e141f16de..885e88a0f 100644 --- a/src/serverroot/common/rest.api.js +++ b/src/serverroot/common/rest.api.js @@ -3,6 +3,7 @@ */ var http = require('http'), + https = require('https'), config = process.mainModule.exports.config, logutils = require('../utils/log.utils'), messages = require('./messages'), @@ -133,9 +134,31 @@ APIServer.prototype.updateDiscoveryServiceParams = function (params) APIServer.prototype.makeHttpsRestCall = function (options, callback) { - request(options, function(err, response, data) { - callback(err, data, response); + var method = options['method']; + var req = https.request(options, function (res) { + var result = ''; + res.on('data', function (chunk) { + result += chunk; + }); + res.on('end', function () { + callback(null, result, res); + }); + res.on('error', function (err) { + callback(err); + }) }); + + // req error + req.on('error', function (err) { + logutils.logger.error(err.stack); + callback(err); + }); + + //send request with the postData form + if (('POST' == method) || ('PUT' == method)) { + req.write(options['data']); + } + req.end(); } /** Retry the REST API Call, once it fails @@ -222,11 +245,10 @@ APIServer.prototype.makeCall = function (restApi, params, callback, isRetry) var self = this; var reqUrl = null; var options = {}; - var data = commonUtils.getApiPostData(params['path'], params['data']); var method = params['method']; var xml2jsSettings = params['xml2jsSettings']; + var data = commonUtils.getApiPostData(params['path'], params['data']); options['headers'] = params['headers'] || {}; - options['data'] = data || {}; options['method'] = method; options['headers']['Content-Length'] = (data) ? data.toString().length : 0; @@ -235,24 +257,29 @@ APIServer.prototype.makeCall = function (restApi, params, callback, isRetry) we need to specify the Content-Type as App/JSON with JSON.stringify of the data, otherwise, restler treats it as application/x-www-form-urlencoded as Content-Type and encodes - the data accordingly + the data accordingly. Restler also changes Content-Type when + an empty data object is passed for GET queries, so make sure + we are don't pass it. */ + options['data'] = data || {}; options['headers']['Content-Type'] = 'application/json'; } params = self.updateDiscoveryServiceParams(params); - options['parser'] = restler.parsers.auto; options = httpsOp.updateHttpsSecureOptions(self.name, options); if ((null != options['headers']) && (null != options['headers']['protocol']) && (global.PROTOCOL_HTTPS == options['headers']['protocol'])) { delete options['headers']['protocol']; reqUrl = global.HTTPS_URL + params.url + ':' + params.port + params.path; - options['uri'] = reqUrl; options['body'] = options['data']; if (('POST' != method) && ('PUT' != method)) { delete options['data']; delete options['body']; } + options['hostname'] = params.url; + options['port'] = params.port; + options['path'] = params.path; + self.makeHttpsRestCall(options, function(err, data, response) { if (null != err) { try {