cloudflare/dist/cflare.classes.cflareaccount.js
2016-06-18 15:36:15 +02:00

139 lines
17 KiB
JavaScript

"use strict";
require("typings-global");
var plugins = require("./cflare.plugins");
var CflareAccount = (function () {
function CflareAccount() {
}
CflareAccount.prototype.authCheck = function () {
return (this.authEmail && this.authKey); //check if auth is available
};
;
CflareAccount.prototype.auth = function (optionsArg) {
this.authEmail = optionsArg.email;
this.authKey = optionsArg.key;
};
CflareAccount.prototype.getZoneId = function (domainName) {
var done = plugins.q.defer();
this.listZones(domainName)
.then(function (responseArg) {
var filteredResponse = responseArg.result.filter(function (zoneArg) {
return zoneArg.name === domainName;
});
if (filteredResponse.length >= 1) {
done.resolve(filteredResponse[0].id);
}
else {
plugins.beautylog.error("the domain " + domainName.blue + " does not appear to be in this account!");
done.reject(undefined);
}
});
return done.promise;
};
CflareAccount.prototype.getRecord = function (domainNameArg, typeArg) {
var done = plugins.q.defer();
var domain = new plugins.smartstring.Domain(domainNameArg);
this.listRecords(domain.zoneName)
.then(function (responseArg) {
var filteredResponse = responseArg.result.filter(function (recordArg) {
return (recordArg.type == typeArg && recordArg.name == domainNameArg);
});
});
return done.promise;
};
;
CflareAccount.prototype.createRecord = function (domainNameArg, typeArg, contentArg) {
var _this = this;
var done = plugins.q.defer();
var domain = new plugins.smartstring.Domain(domainNameArg);
this.getZoneId(domain.zoneName)
.then(function (domainIdArg) {
var dataObject = {
name: domain.fullName,
type: typeArg,
content: contentArg
};
_this.request("POST", "/zones/" + domainIdArg + "/dns_records", dataObject)
.then(function (responseArg) {
done.resolve(responseArg);
});
});
return done.promise;
};
;
CflareAccount.prototype.removeRecord = function (domainNameArg, typeArg) {
var done = plugins.q.defer();
var domain = new plugins.smartstring.Domain(domainNameArg);
this.getRecord(domain.zoneName, typeArg)
.then(function (responseArg) {
});
return done.promise;
};
;
CflareAccount.prototype.updateRecord = function (domainNameArg, typeArg, valueArg) {
var done = plugins.q.defer();
var domain = new plugins.smartstring.Domain(domainNameArg);
return done.promise;
};
;
CflareAccount.prototype.listRecords = function (domainNameArg) {
var _this = this;
var done = plugins.q.defer();
var domain = new plugins.smartstring.Domain(domainNameArg);
this.getZoneId(domain.zoneName)
.then(function (domainIdArg) {
_this.request("GET", "/zones/" + domainIdArg + "/dns_records?per_page=100")
.then(function (responseArg) {
done.resolve(responseArg);
});
});
return done.promise;
};
CflareAccount.prototype.listZones = function (domainName) {
var done = plugins.q.defer();
var requestRoute = "/zones?per_page=50";
if (domainName)
requestRoute = requestRoute + "&name=" + domainName;
var result = {};
this.request("GET", requestRoute)
.then(function (responseArg) {
result = responseArg;
done.resolve(result);
});
return done.promise;
};
;
CflareAccount.prototype.request = function (methodArg, routeArg, dataArg) {
if (dataArg === void 0) { dataArg = {}; }
var done = plugins.q.defer();
var jsonArg = JSON.stringify(dataArg);
var options = {
method: methodArg,
url: "https://api.cloudflare.com/client/v4" + routeArg,
headers: {
"Content-Type": "application/json",
"X-Auth-Email": this.authEmail,
"X-Auth-Key": this.authKey
},
body: jsonArg
};
plugins.request(options, function (err, res, body) {
if (!err && res.statusCode == 200) {
var responseObj = JSON.parse(body);
done.resolve(responseObj);
}
else {
console.log(err);
console.log(res);
done.reject(err);
}
;
});
return done.promise;
};
return CflareAccount;
}());
exports.CflareAccount = CflareAccount;
;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNmbGFyZS5jbGFzc2VzLmNmbGFyZWFjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLFFBQU8sZ0JBQWdCLENBQUMsQ0FBQTtBQUN4QixJQUFPLE9BQU8sV0FBVyxrQkFBa0IsQ0FBQyxDQUFDO0FBRzdDO0lBTUk7SUFFQSxDQUFDO0lBTE8saUNBQVMsR0FBakI7UUFDSSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtJQUN6RSxDQUFDOztJQUlELDRCQUFJLEdBQUosVUFBSyxVQUFvQztRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxpQ0FBUyxHQUFULFVBQVUsVUFBaUI7UUFDdkIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQzthQUNyQixJQUFJLENBQUMsVUFBQyxXQUFXO1lBQ2QsSUFBSSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFDLE9BQU87Z0JBQ3JELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQSxDQUFDO2dCQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLElB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bGFzc2VzLmNmbGFyZWFjY291bnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJ0eXBpbmdzLWdsb2JhbFwiO1xuaW1wb3J0IHBsdWdpbnMgPSByZXF1aXJlKFwiLi9jZmxhcmUucGx1Z2luc1wiKTtcbmltcG9ydCBoZWxwZXJzID0gcmVxdWlyZShcIi4vY2ZsYXJlLmNsYXNzZXMuaGVscGVyc1wiKTtcblxuZXhwb3J0IGNsYXNzIENmbGFyZUFjY291bnQge1xuICAgIHByaXZhdGUgYXV0aEVtYWlsOnN0cmluZztcbiAgICBwcml2YXRlIGF1dGhLZXk6c3RyaW5nO1xuICAgIHByaXZhdGUgYXV0aENoZWNrKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5hdXRoRW1haWwgJiYgdGhpcy5hdXRoS2V5KTsgLy9jaGVjayBpZiBhdXRoIGlzIGF2YWlsYWJsZVxuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICBcbiAgICB9O1xuICAgIGF1dGgob3B0aW9uc0FyZzp7ZW1haWw6c3RyaW5nLGtleTpzdHJpbmd9KXtcbiAgICAgICAgdGhpcy5hdXRoRW1haWwgPSBvcHRpb25zQXJnLmVtYWlsO1xuICAgICAgICB0aGlzLmF1dGhLZXkgPSBvcHRpb25zQXJnLmtleTsgICAgICAgXG4gICAgfVxuICAgIGdldFpvbmVJZChkb21haW5OYW1lOnN0cmluZyl7XG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgICAgIHRoaXMubGlzdFpvbmVzKGRvbWFpbk5hbWUpXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2VBcmcpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyZWRSZXNwb25zZSA9IHJlc3BvbnNlQXJnLnJlc3VsdC5maWx0ZXIoKHpvbmVBcmcpPT57XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB6b25lQXJnLm5hbWUgPT09IGRvbWFpbk5hbWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkUmVzcG9uc2UubGVuZ3RoID49IDEpe1xuICAgICAgICAgICAgICAgICAgICBkb25lLnJlc29sdmUoZmlsdGVyZWRSZXNwb25zZVswXS5pZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2lucy5iZWF1dHlsb2cuZXJyb3IoXCJ0aGUgZG9tYWluIFwiICsgZG9tYWluTmFtZS5ibHVlICsgXCIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGluIHRoaXMgYWNjb3VudCFcIik7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUucmVqZWN0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkb25lLnByb21pc2U7XG4gICAgfVxuICAgIGdldFJlY29yZChkb21haW5OYW1lQXJnOnN0cmluZyx0eXBlQXJnOnN0cmluZyl7XG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgICAgIGxldCBkb21haW4gPSBuZXcgcGx1Z2lucy5zbWFydHN0cmluZy5Eb21haW4oZG9tYWluTmFtZUFyZyk7XG4gICAgICAgIHRoaXMubGlzdFJlY29yZHMoZG9tYWluLnpvbmVOYW1lKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlQXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcmVkUmVzcG9uc2UgPSByZXNwb25zZUFyZy5yZXN1bHQuZmlsdGVyKChyZWNvcmRBcmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChyZWNvcmRBcmcudHlwZSA9PSB0eXBlQXJnICYmIHJlY29yZEFyZy5uYW1lID09IGRvbWFpbk5hbWVBcmcpOyBcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbiAgICB9O1xuICAgIGNyZWF0ZVJlY29yZChkb21haW5OYW1lQXJnOnN0cmluZyx0eXBlQXJnOnN0cmluZyxjb250ZW50QXJnOnN0cmluZyl7XG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgICAgIGxldCBkb21haW4gPSBuZXcgcGx1Z2lucy5zbWFydHN0cmluZy5Eb21haW4oZG9tYWluTmFtZUFyZyk7XG4gICAgICAgIHRoaXMuZ2V0Wm9uZUlkKGRvbWFpbi56b25lTmFtZSlcbiAgICAgICAgICAgIC50aGVuKChkb21haW5JZEFyZyk9PntcbiAgICAgICAgICAgICAgICBsZXQgZGF0YU9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZG9tYWluLmZ1bGxOYW1lLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlQXJnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50QXJnXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3QoXCJQT1NUXCIsXCIvem9uZXMvXCIgKyBkb21haW5JZEFyZyArIFwiL2Ruc19yZWNvcmRzXCIsZGF0YU9iamVjdClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2VBcmcpe1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHJlc3BvbnNlQXJnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbiAgICB9O1xuICAgIHJlbW92ZVJlY29yZChkb21haW5OYW1lQXJnOnN0cmluZyx0eXBlQXJnOnN0cmluZyl7XG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgICAgIGxldCBkb21haW4gPSBuZXcgcGx1Z2lucy5zbWFydHN0cmluZy5Eb21haW4oZG9tYWluTmFtZUFyZyk7XG4gICAgICAgIHRoaXMuZ2V0UmVjb3JkKGRvbWFpbi56b25lTmFtZSx0eXBlQXJnKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlQXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTtcbiAgICB9O1xuICAgIHVwZGF0ZVJlY29yZChkb21haW5OYW1lQXJnOnN0cmluZyx0eXBlQXJnOnN0cmluZyx2YWx1ZUFyZyl7XG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgICAgIGxldCBkb21haW4gPSBuZXcgcGx1Z2lucy5zbWFydHN0cmluZy5Eb21haW4oZG9tYWluTmFtZUFyZyk7XG4gICAgICAgIHJldHVybiBkb25lLnByb21pc2U7XG4gICAgfTtcbiAgICBsaXN0UmVjb3Jkcyhkb21haW5OYW1lQXJnOnN0cmluZyl7XG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgICAgIGxldCBkb21haW4gPSBuZXcgcGx1Z2lucy5zbWFydHN0cmluZy5Eb21haW4oZG9tYWluTmFtZUFyZyk7XG4gICAgICAgIHRoaXMuZ2V0Wm9uZUlkKGRvbWFpbi56b25lTmFtZSlcbiAgICAgICAgICAgIC50aGVuKChkb21haW5JZEFyZyk9PntcbiAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3QoXCJHRVRcIixcIi96b25lcy9cIiArIGRvbWFpbklkQXJnICsgXCIvZG5zX3JlY29yZHM/cGVyX3BhZ2U9MTAwXCIpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlQXJnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUucmVzb2x2ZShyZXNwb25zZUFyZyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkb25lLnByb21pc2U7XG4gICAgfVxuICAgIGxpc3Rab25lcyhkb21haW5OYW1lPzpzdHJpbmcpeyAvLyBUT0RPOiBoYW5kbGUgcGFnaW5hdGlvblxuICAgICAgICBsZXQgZG9uZSA9IHBsdWdpbnMucS5kZWZlcigpO1xuICAgICAgICBsZXQgcmVxdWVzdFJvdXRlID0gXCIvem9uZXM/cGVyX3BhZ2U9NTBcIlxuICAgICAgICBpZihkb21haW5OYW1lKSByZXF1ZXN0Um91dGUgPSByZXF1ZXN0Um91dGUgKyBcIiZuYW1lPVwiICsgZG9tYWluTmFtZTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHt9OyBcbiAgICAgICAgdGhpcy5yZXF1ZXN0KFwiR0VUXCIscmVxdWVzdFJvdXRlKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2VBcmcpe1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3BvbnNlQXJnO1xuICAgICAgICAgICAgICAgIGRvbmUucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkb25lLnByb21pc2U7XG4gICAgfTtcbiAgICByZXF1ZXN0KG1ldGhvZEFyZzpzdHJpbmcscm91dGVBcmc6c3RyaW5nLGRhdGFBcmcgPSB7fSl7XG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgICAgIGxldCBqc29uQXJnOnN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGFBcmcpO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1ldGhvZDptZXRob2RBcmcsXG4gICAgICAgICAgICB1cmw6XCJodHRwczovL2FwaS5jbG91ZGZsYXJlLmNvbS9jbGllbnQvdjRcIiArIHJvdXRlQXJnLFxuICAgICAgICAgICAgaGVhZGVyczp7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgICBcIlgtQXV0aC1FbWFpbFwiOnRoaXMuYXV0aEVtYWlsLFxuICAgICAgICAgICAgICAgIFwiWC1BdXRoLUtleVwiOnRoaXMuYXV0aEtleVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6anNvbkFyZ1xuICAgICAgICB9O1xuICAgICAgICBwbHVnaW5zLnJlcXVlc3Qob3B0aW9ucyxmdW5jdGlvbihlcnIsIHJlcywgYm9keSl7XG4gICAgICAgICAgICBpZiAoIWVyciAmJiByZXMuc3RhdHVzQ29kZSA9PSAyMDApIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2VPYmogPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICAgICAgICAgIGRvbmUucmVzb2x2ZShyZXNwb25zZU9iaik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgICAgICBkb25lLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkb25lLnByb21pc2U7XG4gICAgfVxufTsiXX0=