Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
c381bd782a | |||
|
8535a4c73a | ||
68b91a27a2 | |||
|
564a9d3e20 |
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"
|
||||||
|
}
|
86
lib/error.html
Normal file
86
lib/error.html
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<!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>That’s 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>That’s all we know.</ins>
|
182
lib/index.js
182
lib/index.js
@ -1,75 +1,129 @@
|
|||||||
'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);
|
||||||
|
|
||||||
return {
|
var plugin = {
|
||||||
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 leading and trailing single quotes, and the trailing dot
|
// slice out the trailing dot.
|
||||||
// (assuming that all 'dnsName's probably look the same)
|
// ex: "example.com." => "example.com"
|
||||||
return zone.dnsName.slice(1, zone.dnsName.length - 2);
|
// (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);
|
});
|
||||||
throw Error('setting TXT not implemented');
|
},
|
||||||
},
|
set: function(data) {
|
||||||
remove: function(data) {
|
console.info("Add TXT", data);
|
||||||
// console.info('Remove TXT', data);
|
var ch = data.challenge;
|
||||||
throw Error('removing TXT not implemented');
|
return getZoneNameByDnsName(ch.dnsZone)
|
||||||
},
|
.then(function(gZoneName) {
|
||||||
get: function(data) {
|
return api({
|
||||||
// console.info('List TXT', data);
|
method: "POST",
|
||||||
throw Error('listing TXTs not implemented');
|
url:
|
||||||
}
|
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");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
function api(opts) {
|
return plugin;
|
||||||
//return auth.getToken(sa).then(function(token) {
|
|
||||||
opts.headers = opts.headers || {};
|
|
||||||
opts.headers.Authorization = 'Bearer ' + token;
|
|
||||||
return request(opts);
|
|
||||||
//});
|
|
||||||
}
|
|
||||||
|
|
||||||
function getServiceAccount(config) {
|
function api(opts) {
|
||||||
var saPath =
|
//return auth.getToken(sa).then(function(token) {
|
||||||
config.serviceAccountPath ||
|
opts.headers = opts.headers || {};
|
||||||
process.env.GOOGLE_APPLICATION_CREDENTIALS;
|
opts.headers.Authorization = "Bearer " + token;
|
||||||
var sa = config.serviceAccount || require(saPath);
|
return request(opts).then(function(resp) {
|
||||||
|
console.log(resp.headers);
|
||||||
|
console.log(resp.body);
|
||||||
|
return resp;
|
||||||
|
});
|
||||||
|
//});
|
||||||
|
}
|
||||||
|
|
||||||
if (
|
function getZoneNameByDnsName(dnsZone) {
|
||||||
!sa ||
|
return api({
|
||||||
!(
|
url: baseUrl + "/projects/" + sa.project_id + "/managedZones",
|
||||||
sa.private_key &&
|
json: true
|
||||||
sa.private_key_id &&
|
}).then(function(resp) {
|
||||||
sa.client_email &&
|
// Google Zone Name is NOT the DNS Name, but an arbitrary string
|
||||||
sa.project_id
|
return resp.body.managedZones.filter(function(zone) {
|
||||||
)
|
return dnsZone + "." === zone.dnsName;
|
||||||
) {
|
})[0].name;
|
||||||
throw new Error(
|
});
|
||||||
'missing or incomplete service_account.json: set serviceAccount serviceAccountPath'
|
}
|
||||||
);
|
|
||||||
}
|
function getServiceAccount(config) {
|
||||||
return sa;
|
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;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user