UNPKG

dnspod-ddns2

Version:

```bash [c]npm install dnspod-ddns2 -g ddns --login_email=[your_login_email_of_dnspod] --login_password=[your_login_password_of_dnspod] ``` Sometimes you may want to run in daemon, just do as below:

196 lines (178 loc) 4.61 kB
var https = require('https'); var util = require('util'); var qs = require('querystring'); var Q = require('q'); var common_params = { login_email: global.login_email, login_password: global.login_password, format: 'json' }; var cfg = {}; /** * get domain info by name if provided * @param {String} domain name * @return */ exports.getDomain = function(name) { return Q .try(function() { var data = qs.stringify(common_params); var opts = { host: 'dnsapi.cn', path: '/Domain.List', method: 'POST', headers: { "Content-Type": 'application/x-www-form-urlencoded', 'Content-Length': data.length } }; var d = Q.defer(); var result = ''; var req = https.request(opts, function(res) { res.setEncoding('utf8'); res.on('data', function(chunk) { result += chunk; }); res.on('end', function() { try { result = JSON.parse(result); if (result.status.code == '1') { if (name) { d.resolve(result.domains.filter(function(domain) { return domain.name == name; })[0]); } else { d.resolve(result.domains[0]); } } else { throw new Error(result.status.message); } } catch (e) { d.reject(e); } }); }); req.write(data + '\n'); req.end(); req.on('error', function(e) { d.reject(e); }); return d.promise; }) .then(function(domain){ cfg.domain_id = domain.id; return domain; }) .catch(function(e) { throw e; }); }; /** * get A record by domain id * @return */ exports.getARecord = function() { return Q .try(function(){ if (!cfg.domain_id) return exports.getDomain(global.domain_name); }) .then(function(){ var data = qs.stringify(util._extend(common_params, {domain_id: cfg.domain_id})); var opts = { host: 'dnsapi.cn', path: '/Record.List', method: 'POST', headers: { "Content-Type": 'application/x-www-form-urlencoded', 'Content-Length': data.length } }; var d = Q.defer(); var result = ''; var req = https.request(opts, function(res){ res.setEncoding('utf8'); res.on('data', function(chunk){ result += chunk; }); res.on('end', function(){ try { result = JSON.parse(result); if (result.status.code == '1') { d.resolve(result.records.filter(function(record){return record.type == 'A';})[0]); } else { throw new Error(result.status.message); } } catch(e) { d.reject(e); } }); }); req.write(data + '\n'); req.end(); req.on('error', function(e){ d.reject(e); }); return d.promise; }) .then(function(record){ cfg.record_id = record.id; return record; }) .catch(function(e){ throw e; }); }; exports.updateARecord = function(ip) { return Q .try(function(){ if (!cfg.record_id) return exports.getARecord(); }) .then(function(){ var data = { domain_id: cfg.domain_id, record_id: cfg.record_id }; data = qs.stringify(util._extend(util._extend(data, common_params), { sub_domain: '@', record_line: '\u9ed8\u8ba4' // 默认 })); var opts = { host: 'dnsapi.cn', path: '/Record.Ddns', method: 'POST', headers: { "Content-Type": 'application/x-www-form-urlencoded', 'Content-Length': data.length } }; var d = Q.defer(); var result = ''; var req = https.request(opts, function(res){ res.setEncoding('utf8'); res.on('data', function(chunk){ result += chunk; }); res.on('end', function(){ try { result = JSON.parse(result); if (result.status.code == '1') { d.resolve(result.record); } else { throw new Error(result.status.message); } } catch(e) { d.reject(e); } }); }); req.write(data + '\n'); req.end(); req.on('error', function(e){ d.reject(e); }); return d.promise; }) .catch(function(e){ throw e; }); };