84 lines
2.6 KiB
JavaScript
84 lines
2.6 KiB
JavaScript
/* jslint node:true */
|
|
|
|
'use strict';
|
|
|
|
var assert = require('assert'),
|
|
caas = require('./dns/caas.js'),
|
|
config = require('./config.js'),
|
|
route53 = require('./dns/route53.js'),
|
|
SubdomainError = require('./subdomainerror.js'),
|
|
util = require('util');
|
|
|
|
module.exports = exports = {
|
|
add: add,
|
|
remove: remove,
|
|
status: status,
|
|
update: update, // unlike add, this fetches latest value, compares and adds if necessary. atomicity depends on backend
|
|
get: get
|
|
};
|
|
|
|
// choose which subdomain backend we use for test purpose we use route53
|
|
function api() {
|
|
return config.isCustomDomain() || config.TEST ? route53 : caas;
|
|
}
|
|
|
|
function add(subdomain, type, values, callback) {
|
|
assert.strictEqual(typeof subdomain, 'string');
|
|
assert.strictEqual(typeof type, 'string');
|
|
assert(util.isArray(values));
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
api().add(config.zoneName(), subdomain, type, values, function (error, changeId) {
|
|
if (error) return callback(error);
|
|
callback(null, changeId);
|
|
});
|
|
}
|
|
|
|
function get(subdomain, type, callback) {
|
|
assert.strictEqual(typeof subdomain, 'string');
|
|
assert.strictEqual(typeof type, 'string');
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
api().get(config.zoneName(), subdomain, type, function (error, values) {
|
|
if (error) return callback(error);
|
|
|
|
callback(null, values);
|
|
});
|
|
}
|
|
|
|
function update(subdomain, type, values, callback) {
|
|
assert.strictEqual(typeof subdomain, 'string');
|
|
assert.strictEqual(typeof type, 'string');
|
|
assert(util.isArray(values));
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
api().update(config.zoneName(), subdomain, type, values, function (error) {
|
|
if (error) return callback(error);
|
|
|
|
callback(null);
|
|
});
|
|
}
|
|
|
|
function remove(subdomain, type, values, callback) {
|
|
assert.strictEqual(typeof subdomain, 'string');
|
|
assert.strictEqual(typeof type, 'string');
|
|
assert(util.isArray(values));
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
api().del(config.zoneName(), subdomain, type, values, function (error) {
|
|
if (error && error.reason !== SubdomainError.NOT_FOUND) return callback(error);
|
|
|
|
callback(null);
|
|
});
|
|
}
|
|
|
|
function status(changeId, callback) {
|
|
assert.strictEqual(typeof changeId, 'string');
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
api().getChangeStatus(changeId, function (error, status) {
|
|
if (error) return callback(new SubdomainError(SubdomainError.EXTERNAL_ERROR, error));
|
|
callback(null, status === 'INSYNC' ? 'done' : 'pending');
|
|
});
|
|
}
|