Max Wilets 564a9d3e20 tokens
2019-07-23 21:26:32 -06:00

108 lines
2.6 KiB
JavaScript

'use strict';
//var auth = require('./auth.js');
var defaults = {
baseUrl: 'https://www.googleapis.com/dns/v1/'
};
module.exports.create = function(config) {
var request;
var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, '');
var token = config.token;
var sa = getServiceAccount(config);
return {
init: function(opts) {
request = opts.request;
return null;
},
zones: function(data) {
//console.info('List Zones', data);
return api({
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
// (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}`);
return name;
});
});
},
set: function(data) {
console.info('Add TXT', data);
var ch = data.challenge;
return api({
method: 'POST',
url: baseUrl + '/projects/' + sa.project_id + '/managedZones/' + ch.dnsZone + '/changes',
json: {
"kind": "dns#change",
"additions": [
{
"kind": "dns#resourceRecordSet",
"name": ch.dnsHost,
"type": "TXT",
"ttl": 300, // TODO test for lowest allowed value
"rrdatas": [ ch.dnsAuthorization ],
"signatureRrdatas": []
}
],
"deletions": [],
//"startTime": "string",
//"id": "string",
//"status": "string",
//"isServing": true
}
})
throw Error('setting TXT not implemented');
},
remove: function(data) {
// console.info('Remove TXT', data);
throw Error('removing TXT not implemented');
},
get: function(data) {
// console.info('List TXT', data);
throw Error('listing TXTs not implemented');
}
};
function api(opts) {
//return auth.getToken(sa).then(function(token) {
opts.headers = opts.headers || {};
opts.headers.Authorization = 'Bearer ' + token;
return request(opts).then(function(resp){
console.log(resp.headers);
console.log(resp.body);
return resp
}
);
//});
}
function getServiceAccount(config) {
var saPath =
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
)
) {
throw new Error(
'missing or incomplete service_account.json: set serviceAccount serviceAccountPath'
);
}
return sa;
}
};