walnut.js/holepunch/helpers/update-ip.js

83 lines
1.9 KiB
JavaScript
Raw Normal View History

2015-02-12 09:40:37 +00:00
#!/usr/bin/env node
'use strict';
2015-08-14 17:00:28 +00:00
var PromiseA = require('bluebird').Promise;
var https = require('https');
var fs = require('fs');
var path = require('path');
2015-02-12 09:40:37 +00:00
module.exports.update = function (opts) {
return new PromiseA(function (resolve, reject) {
2015-08-14 17:00:28 +00:00
var options;
var hostname = opts.updater || 'redirect-www.org';
var port = opts.port || 65443;
2015-10-05 19:51:58 +00:00
var req;
2015-02-12 09:40:37 +00:00
options = {
host: hostname
, port: port
, method: 'POST'
, headers: {
'Content-Type': 'application/json'
}
, path: '/api/ddns'
2015-08-14 21:09:32 +00:00
//, auth: opts.auth || 'admin:secret'
2015-02-12 09:40:37 +00:00
};
2015-08-14 17:00:28 +00:00
2015-08-14 21:09:32 +00:00
if (opts.cacert) {
if (!Array.isArray(opts.cacert)) {
opts.cacert = [opts.cacert];
}
options.ca = opts.cacert;
} else {
options.ca = [path.join(__dirname, '..', 'certs', 'ca', 'my-root-ca.crt.pem')]
}
options.ca = options.ca.map(function (str) {
if ('string' === typeof str && str.length < 1000) {
str = fs.readFileSync(str);
}
return str;
});
if (opts.token || opts.jwt) {
options.headers['Authorization'] = 'Bearer ' + (opts.token || opts.jwt);
}
if (false === opts.cacert) {
options.rejectUnauthorized = false;
2015-08-14 17:00:28 +00:00
}
2015-02-12 09:40:37 +00:00
options.agent = new https.Agent(options);
2015-10-05 19:51:58 +00:00
req = https.request(options, function(res) {
2015-02-12 09:40:37 +00:00
var textData = '';
res.on('error', function (err) {
reject(err);
});
res.on('data', function (chunk) {
textData += chunk.toString();
// console.log(chunk.toString());
});
res.on('end', function () {
2015-10-05 19:51:58 +00:00
var err;
try {
resolve(JSON.parse(textData));
} catch(e) {
err = new Error("Unparsable Server Response");
err.code = 'E_INVALID_SERVER_RESPONSE';
err.data = textData;
reject(err);
}
2015-02-12 09:40:37 +00:00
});
2015-10-05 19:51:58 +00:00
});
2015-11-12 11:10:57 +00:00
req.on('error', function (err) {
2015-10-05 19:51:58 +00:00
reject(err);
});
req.end(JSON.stringify(opts.ddns, null, ' '));
2015-02-12 09:40:37 +00:00
});
};