wip: set zone record
This commit is contained in:
parent
564a9d3e20
commit
68b91a27a2
17
.jshintrc
Normal file
17
.jshintrc
Normal file
@ -0,0 +1,17 @@
|
||||
{ "node": true
|
||||
, "browser": true
|
||||
, "jquery": true
|
||||
, "globals": { "Promise": true }
|
||||
|
||||
, "indent": 2
|
||||
, "onevar": true
|
||||
, "laxcomma": true
|
||||
, "laxbreak": true
|
||||
, "curly": true
|
||||
, "nonbsp": true
|
||||
|
||||
, "eqeqeq": true
|
||||
, "immed": true
|
||||
, "undef": true
|
||||
, "latedef": "nofunc"
|
||||
}
|
17
.prettierrc
Normal file
17
.prettierrc
Normal file
@ -0,0 +1,17 @@
|
||||
{ "node": true
|
||||
, "browser": true
|
||||
, "jquery": true
|
||||
, "globals": { "Promise": true }
|
||||
|
||||
, "indent": 2
|
||||
, "onevar": true
|
||||
, "laxcomma": true
|
||||
, "laxbreak": true
|
||||
, "curly": true
|
||||
, "nonbsp": true
|
||||
|
||||
, "eqeqeq": true
|
||||
, "immed": true
|
||||
, "undef": true
|
||||
, "latedef": "nofunc"
|
||||
}
|
93
lib/index.js
93
lib/index.js
@ -1,17 +1,17 @@
|
||||
'use strict';
|
||||
"use strict";
|
||||
|
||||
//var auth = require('./auth.js');
|
||||
var defaults = {
|
||||
baseUrl: 'https://www.googleapis.com/dns/v1/'
|
||||
baseUrl: "https://www.googleapis.com/dns/v1/"
|
||||
};
|
||||
|
||||
module.exports.create = function(config) {
|
||||
var request;
|
||||
var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, '');
|
||||
var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, "");
|
||||
var token = config.token;
|
||||
var sa = getServiceAccount(config);
|
||||
|
||||
return {
|
||||
var plugin = {
|
||||
init: function(opts) {
|
||||
request = opts.request;
|
||||
return null;
|
||||
@ -19,87 +19,108 @@ module.exports.create = function(config) {
|
||||
zones: function(data) {
|
||||
//console.info('List Zones', data);
|
||||
return api({
|
||||
url: baseUrl + '/projects/' + sa.project_id + '/managedZones',
|
||||
url: baseUrl + "/projects/" + sa.project_id + "/managedZones",
|
||||
json: true
|
||||
}).then(function(resp) {
|
||||
return resp.body.managedZones.map(function(zone) {
|
||||
// slice out the leading and trailing single quotes, and the trailing dot
|
||||
// slice out the trailing dot.
|
||||
// ex: "example.com." => "example.com"
|
||||
// (assuming that all 'dnsName's probably look the same)
|
||||
var name = zone.dnsName.slice(0, zone.dnsName.length - 1);
|
||||
console.log(`the is name ${name}`);
|
||||
console.log("the is name", name);
|
||||
return name;
|
||||
});
|
||||
});
|
||||
},
|
||||
set: function(data) {
|
||||
console.info('Add TXT', data);
|
||||
console.info("Add TXT", data);
|
||||
var ch = data.challenge;
|
||||
return getZoneNameByDnsName(ch.dnsZone)
|
||||
.then(function(gZoneName) {
|
||||
return api({
|
||||
method: 'POST',
|
||||
url: baseUrl + '/projects/' + sa.project_id + '/managedZones/' + ch.dnsZone + '/changes',
|
||||
method: "POST",
|
||||
url:
|
||||
baseUrl +
|
||||
"/projects/" +
|
||||
sa.project_id +
|
||||
"/managedZones/" +
|
||||
gZoneName +
|
||||
"/changes",
|
||||
json: {
|
||||
"kind": "dns#change",
|
||||
"additions": [
|
||||
kind: "dns#change",
|
||||
additions: [
|
||||
{
|
||||
"kind": "dns#resourceRecordSet",
|
||||
"name": ch.dnsHost,
|
||||
"type": "TXT",
|
||||
"ttl": 300, // TODO test for lowest allowed value
|
||||
"rrdatas": [ ch.dnsAuthorization ],
|
||||
"signatureRrdatas": []
|
||||
kind: "dns#resourceRecordSet",
|
||||
name: ch.dnsHost,
|
||||
type: "TXT",
|
||||
ttl: 300, // TODO test for lowest allowed value
|
||||
rrdatas: [ch.dnsAuthorization],
|
||||
signatureRrdatas: []
|
||||
}
|
||||
],
|
||||
"deletions": [],
|
||||
deletions: []
|
||||
//"startTime": "string",
|
||||
//"id": "string",
|
||||
//"status": "string",
|
||||
//"isServing": true
|
||||
}
|
||||
});
|
||||
})
|
||||
throw Error('setting TXT not implemented');
|
||||
|
||||
.then(function(resp) {
|
||||
if (resp.body.error) {
|
||||
console.error(resp.headers);
|
||||
console.error(resp.body);
|
||||
throw new Error(resp.body.error);
|
||||
}
|
||||
});
|
||||
},
|
||||
remove: function(data) {
|
||||
// console.info('Remove TXT', data);
|
||||
throw Error('removing TXT not implemented');
|
||||
throw Error("removing TXT not implemented");
|
||||
},
|
||||
get: function(data) {
|
||||
// console.info('List TXT', data);
|
||||
throw Error('listing TXTs not implemented');
|
||||
throw Error("listing TXTs not implemented");
|
||||
}
|
||||
};
|
||||
|
||||
return plugin;
|
||||
|
||||
function api(opts) {
|
||||
//return auth.getToken(sa).then(function(token) {
|
||||
opts.headers = opts.headers || {};
|
||||
opts.headers.Authorization = 'Bearer ' + token;
|
||||
opts.headers.Authorization = "Bearer " + token;
|
||||
return request(opts).then(function(resp) {
|
||||
console.log(resp.headers);
|
||||
console.log(resp.body);
|
||||
return resp
|
||||
return resp;
|
||||
});
|
||||
//});
|
||||
}
|
||||
|
||||
);
|
||||
//});
|
||||
function getZoneNameByDnsName(dnsZone) {
|
||||
return api({
|
||||
url: baseUrl + "/projects/" + sa.project_id + "/managedZones",
|
||||
json: true
|
||||
}).then(function(resp) {
|
||||
// Google Zone Name is NOT the DNS Name, but an arbitrary string
|
||||
return resp.body.managedZones.filter(function(zone) {
|
||||
return dnsZone + "." === zone.dnsName;
|
||||
})[0].name;
|
||||
});
|
||||
}
|
||||
|
||||
function getServiceAccount(config) {
|
||||
var saPath =
|
||||
config.serviceAccountPath ||
|
||||
process.env.GOOGLE_APPLICATION_CREDENTIALS;
|
||||
config.serviceAccountPath || process.env.GOOGLE_APPLICATION_CREDENTIALS;
|
||||
var sa = config.serviceAccount || require(saPath);
|
||||
|
||||
if (
|
||||
!sa ||
|
||||
!(
|
||||
sa.private_key &&
|
||||
sa.private_key_id &&
|
||||
sa.client_email &&
|
||||
sa.project_id
|
||||
)
|
||||
!(sa.private_key && sa.private_key_id && sa.client_email && sa.project_id)
|
||||
) {
|
||||
throw new Error(
|
||||
'missing or incomplete service_account.json: set serviceAccount serviceAccountPath'
|
||||
"missing or incomplete service_account.json: set serviceAccount serviceAccountPath"
|
||||
);
|
||||
}
|
||||
return sa;
|
||||
|
Loading…
x
Reference in New Issue
Block a user