Compare commits

..

No commits in common. "maxbranch" and "master" have entirely different histories.

4 changed files with 64 additions and 238 deletions

View File

@ -1,17 +0,0 @@
{ "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"
}

View File

@ -1,17 +0,0 @@
{ "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"
}

View File

@ -1,86 +0,0 @@
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
* {
margin: 0;
padding: 0
}
html,
code {
font: 15px/22px arial, sans-serif
}
html {
background: #fff;
color: #222;
padding: 15px
}
body {
margin: 7% auto 0;
max-width: 390px;
min-height: 180px;
padding: 30px 0 15px
}
*>body {
background: url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;
padding-right: 205px
}
p {
margin: 11px 0 22px;
overflow: hidden
}
ins {
color: #777;
text-decoration: none
}
a img {
border: 0
}
@media screen and (max-width:772px) {
body {
background: none;
margin-top: 0;
max-width: none;
padding-right: 0
}
}
#logo {
background: url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;
margin-left: -5px
}
@media only screen and (min-resolution:192dpi) {
#logo {
background: url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;
-moz-border-image: url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0
}
}
@media only screen and (-webkit-min-device-pixel-ratio:2) {
#logo {
background: url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;
-webkit-background-size: 100% 100%
}
}
#logo {
display: inline-block;
height: 54px;
width: 150px
}
</style>
<a href=//www.google.com/> <span id=logo aria-label=Google></span></a>
<p><b>404.</b> <ins>Thats an error.</ins>
<p>The requested URL <code>/dns/v1/even-flight-244020/managedZones/supporteasthigh.com/changes</code> was not found
on this server. <ins>Thats all we know.</ins>

View File

@ -1,129 +1,75 @@
"use strict"; 'use strict';
//var auth = require('./auth.js'); //var auth = require('./auth.js');
var defaults = { var defaults = {
baseUrl: "https://www.googleapis.com/dns/v1/" baseUrl: 'https://www.googleapis.com/dns/v1/'
}; };
module.exports.create = function(config) { module.exports.create = function(config) {
var request; var request;
var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, ""); var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, '');
var token = config.token; var token = config.token;
var sa = getServiceAccount(config); var sa = getServiceAccount(config);
var plugin = { return {
init: function(opts) { init: function(opts) {
request = opts.request; request = opts.request;
return null; return null;
}, },
zones: function(data) { zones: function(data) {
//console.info('List Zones', data); //console.info('List Zones', data);
return api({ return api({
url: baseUrl + "/projects/" + sa.project_id + "/managedZones", url: baseUrl + '/projects/' + sa.project_id + '/managedZones',
json: true json: true
}).then(function(resp) { }).then(function(resp) {
return resp.body.managedZones.map(function(zone) { return resp.body.managedZones.map(function(zone) {
// slice out the trailing dot. // slice out the leading and trailing single quotes, and the trailing dot
// ex: "example.com." => "example.com" // (assuming that all 'dnsName's probably look the same)
// (assuming that all 'dnsName's probably look the same) return zone.dnsName.slice(1, zone.dnsName.length - 2);
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);
}, throw Error('setting TXT not implemented');
set: function(data) { },
console.info("Add TXT", data); remove: function(data) {
var ch = data.challenge; // console.info('Remove TXT', data);
return getZoneNameByDnsName(ch.dnsZone) throw Error('removing TXT not implemented');
.then(function(gZoneName) { },
return api({ get: function(data) {
method: "POST", // console.info('List TXT', data);
url: throw Error('listing TXTs not implemented');
baseUrl + }
"/projects/" + };
sa.project_id +
"/managedZones/" +
gZoneName +
"/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
}
});
})
.then(function(resp) {
if (resp.body.error) {
console.error(resp.headers);
console.error(resp.body);
throw new Error(resp.body.error);
}
return null;
});
},
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");
}
};
return plugin; function api(opts) {
//return auth.getToken(sa).then(function(token) {
opts.headers = opts.headers || {};
opts.headers.Authorization = 'Bearer ' + token;
return request(opts);
//});
}
function api(opts) { function getServiceAccount(config) {
//return auth.getToken(sa).then(function(token) { var saPath =
opts.headers = opts.headers || {}; config.serviceAccountPath ||
opts.headers.Authorization = "Bearer " + token; process.env.GOOGLE_APPLICATION_CREDENTIALS;
return request(opts).then(function(resp) { var sa = config.serviceAccount || require(saPath);
console.log(resp.headers);
console.log(resp.body);
return resp;
});
//});
}
function getZoneNameByDnsName(dnsZone) { if (
return api({ !sa ||
url: baseUrl + "/projects/" + sa.project_id + "/managedZones", !(
json: true sa.private_key &&
}).then(function(resp) { sa.private_key_id &&
// Google Zone Name is NOT the DNS Name, but an arbitrary string sa.client_email &&
return resp.body.managedZones.filter(function(zone) { sa.project_id
return dnsZone + "." === zone.dnsName; )
})[0].name; ) {
}); throw new Error(
} 'missing or incomplete service_account.json: set serviceAccount serviceAccountPath'
);
function getServiceAccount(config) { }
var saPath = return sa;
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;
}
}; };