mirror of
https://git.coolaj86.com/coolaj86/acme-dns-01-namedotcom.js.git
synced 2025-04-20 06:10:49 +00:00
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
de22db43de | |||
7efb7b650b |
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"
|
||||||
|
}
|
49
lib/index.js
49
lib/index.js
@ -1,14 +1,16 @@
|
|||||||
'use strict';
|
"use strict";
|
||||||
|
|
||||||
var request;
|
var request;
|
||||||
var defaults = {
|
var defaults = {
|
||||||
baseUrl: 'https://api.name.com/v4/'
|
baseUrl: "https://api.name.com/v4/",
|
||||||
|
wait: 15 * 1000
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports.create = function(config) {
|
module.exports.create = function(config) {
|
||||||
var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, '');
|
var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, "");
|
||||||
var token = config.token;
|
var token = config.token;
|
||||||
var username = config.username;
|
var username = config.username;
|
||||||
|
var wait = config.wait || defaults.wait;
|
||||||
|
|
||||||
var plugin = {
|
var plugin = {
|
||||||
init: function(opts) {
|
init: function(opts) {
|
||||||
@ -19,7 +21,7 @@ module.exports.create = function(config) {
|
|||||||
// We must list all zones (domains) in the account
|
// We must list all zones (domains) in the account
|
||||||
zones: function(data) {
|
zones: function(data) {
|
||||||
return api({
|
return api({
|
||||||
url: baseUrl + '/domains'
|
url: baseUrl + "/domains"
|
||||||
}).then(function(resp) {
|
}).then(function(resp) {
|
||||||
return resp.body.domains.map(function(d) {
|
return resp.body.domains.map(function(d) {
|
||||||
//#console.log("Domain Name:", d.domainName);
|
//#console.log("Domain Name:", d.domainName);
|
||||||
@ -34,24 +36,28 @@ module.exports.create = function(config) {
|
|||||||
var ch = data.challenge;
|
var ch = data.challenge;
|
||||||
if (!ch.dnsZone) {
|
if (!ch.dnsZone) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
'[Name.com Plugin] Unknown domain: ',
|
"[Name.com Plugin] Unknown domain: ",
|
||||||
data.domain || data.dnsHost
|
data.domain || data.dnsHost
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return api({
|
return api({
|
||||||
method: 'POST',
|
method: "POST",
|
||||||
url: baseUrl + '/domains/' + ch.dnsZone + '/records',
|
url: baseUrl + "/domains/" + ch.dnsZone + "/records",
|
||||||
json: {
|
json: {
|
||||||
host: ch.dnsPrefix,
|
host: ch.dnsPrefix,
|
||||||
type: 'TXT',
|
type: "TXT",
|
||||||
answer: ch.dnsAuthorization,
|
answer: ch.dnsAuthorization,
|
||||||
ttl: 300 // minimum allowed value
|
ttl: 300 // minimum allowed value
|
||||||
}
|
}
|
||||||
}).then(function(resp) {
|
}).then(function(resp) {
|
||||||
if (!resp.body.id) {
|
if (!resp.body.id) {
|
||||||
throw Error('[Name.com API] [set] ' + resp.body);
|
throw Error("[Name.com API] [set] " + resp.body);
|
||||||
}
|
}
|
||||||
return null;
|
// The api returns success long before the record is actually set.
|
||||||
|
// Therefore we wait a bit to make sure the server propagate the response.
|
||||||
|
return new Promise(function(resolve) {
|
||||||
|
setTimeout(resolve, wait, null);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -61,17 +67,17 @@ module.exports.create = function(config) {
|
|||||||
var ch = data.challenge;
|
var ch = data.challenge;
|
||||||
if (!ch.dnsZone) {
|
if (!ch.dnsZone) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
'[Name.com Plugin] Unknown domain: ',
|
"[Name.com Plugin] Unknown domain: ",
|
||||||
data.domain || data.dnsHost
|
data.domain || data.dnsHost
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return api({
|
return api({
|
||||||
url: baseUrl + '/domains/' + ch.dnsZone + '/records'
|
url: baseUrl + "/domains/" + ch.dnsZone + "/records"
|
||||||
}).then(function(resp) {
|
}).then(function(resp) {
|
||||||
var value = resp.body.records.filter(function(r) {
|
var value = resp.body.records.filter(function(r) {
|
||||||
return (
|
return (
|
||||||
r.host === ch.dnsPrefix &&
|
r.host === ch.dnsPrefix &&
|
||||||
'TXT' === r.type &&
|
"TXT" === r.type &&
|
||||||
ch.dnsAuthorization === r.answer
|
ch.dnsAuthorization === r.answer
|
||||||
);
|
);
|
||||||
})[0];
|
})[0];
|
||||||
@ -90,13 +96,12 @@ module.exports.create = function(config) {
|
|||||||
return plugin.get(data).then(function(r) {
|
return plugin.get(data).then(function(r) {
|
||||||
if (!r.id) {
|
if (!r.id) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
'[Name.com Plugin] [del] Did not find TXT record for ' +
|
"[Name.com Plugin] [del] Did not find TXT record for " + ch.dnsHost
|
||||||
ch.dnsHost
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return api({
|
return api({
|
||||||
method: 'DELETE',
|
method: "DELETE",
|
||||||
url: baseUrl + '/domains/' + ch.dnsZone + '/records/' + r.id
|
url: baseUrl + "/domains/" + ch.dnsZone + "/records/" + r.id
|
||||||
}).then(function(resp) {
|
}).then(function(resp) {
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
@ -119,15 +124,15 @@ module.exports.create = function(config) {
|
|||||||
return resp;
|
return resp;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.error(opts.method + ' ' + opts.url);
|
console.error(opts.method + " " + opts.url);
|
||||||
console.error(resp.headers);
|
console.error(resp.headers);
|
||||||
console.error(resp.body);
|
console.error(resp.body);
|
||||||
throw new Error(
|
throw new Error(
|
||||||
'[Name.com API] ' +
|
"[Name.com API] " +
|
||||||
(opts.method || 'GET') +
|
(opts.method || "GET") +
|
||||||
' ' +
|
" " +
|
||||||
opts.url +
|
opts.url +
|
||||||
' : ' +
|
" : " +
|
||||||
resp.body.message
|
resp.body.message
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "acme-dns-01-namedotcom",
|
"name": "acme-dns-01-namedotcom",
|
||||||
"version": "3.0.0",
|
"version": "3.0.1",
|
||||||
"description": "Name.com + Let's Encrypt for Node.js - ACME dns-01 challenges w/ ACME.js and Greenlock.js",
|
"description": "Name.com + Let's Encrypt for Node.js - ACME dns-01 challenges w/ ACME.js and Greenlock.js",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"files": [
|
"files": [
|
||||||
|
Loading…
x
Reference in New Issue
Block a user