Compare commits
	
		
			7 Commits
		
	
	
		
			b54e8236cb
			...
			138e2ecfae
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 138e2ecfae | |||
| e0548806cf | |||
|  | b385cb2c8f | ||
|  | 0dac689012 | ||
|  | e1c9c0ef08 | ||
|  | 477e3dba33 | ||
|  | 16db087c19 | 
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							| @ -1 +1,2 @@ | |||||||
| AJ ONeal <coolaj86@gmail.com> (https://coolaj86.com/) | AJ ONeal <coolaj86@gmail.com> (https://coolaj86.com/) | ||||||
|  | Hitesh Walia <hiteshwar.walia@gmail.com> | ||||||
| @ -100,6 +100,7 @@ node ./test.js example.com johndoe xxxxxx | |||||||
| # Authors | # Authors | ||||||
| 
 | 
 | ||||||
| -   AJ ONeal | -   AJ ONeal | ||||||
|  | -   Hitesh Walia | ||||||
| 
 | 
 | ||||||
| See AUTHORS for contact info. | See AUTHORS for contact info. | ||||||
| 
 | 
 | ||||||
| @ -107,5 +108,6 @@ See AUTHORS for contact info. | |||||||
| 
 | 
 | ||||||
| [acme-dns-01-dnsimple.js](https://git.coolaj86.com/coolaj86/acme-dns-01-dnsimple.js) | MPL-2.0 | [Terms of Use](https://therootcompany.com/legal/#terms) | [Privacy Policy](https://therootcompany.com/legal/#privacy) | [acme-dns-01-dnsimple.js](https://git.coolaj86.com/coolaj86/acme-dns-01-dnsimple.js) | MPL-2.0 | [Terms of Use](https://therootcompany.com/legal/#terms) | [Privacy Policy](https://therootcompany.com/legal/#privacy) | ||||||
| 
 | 
 | ||||||
|  | Copyright 2019 Hitesh Walia | ||||||
| Copyright 2019 AJ ONeal | Copyright 2019 AJ ONeal | ||||||
| Copyright 2019 The Root Group LLC | Copyright 2019 The Root Group LLC | ||||||
|  | |||||||
							
								
								
									
										125
									
								
								lib/index.js
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								lib/index.js
									
									
									
									
									
								
							| @ -1,9 +1,44 @@ | |||||||
| 'use strict'; | 'use strict'; | ||||||
| 
 | 
 | ||||||
| var request; | var request; | ||||||
| var defaults = {}; | var defaults = { | ||||||
|  | 	baseUrl: 'https://api.dnsimple.com/v2/' | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| module.exports.create = function(config) { | module.exports.create = function(config) { | ||||||
|  | 	var baseUrl = (config.baseUrl || defaults.baseUrl).replace(/\/$/, ''); | ||||||
|  | 	var token = config.token; | ||||||
|  | 	var account = config.account; | ||||||
|  | 
 | ||||||
|  | 	function api(method, path, form) { | ||||||
|  | 		var req = { | ||||||
|  | 			method: method, | ||||||
|  | 			url: baseUrl + path, | ||||||
|  | 			headers: { | ||||||
|  | 				Authorization: 'Bearer ' + token, | ||||||
|  | 				'Content-Type': 'application/json' | ||||||
|  | 			}, | ||||||
|  | 			json: true, | ||||||
|  | 			form: form | ||||||
|  | 		}; | ||||||
|  | 		return request(req).then(function(resp) { | ||||||
|  | 			if (2 !== Math.floor(resp.statusCode / 100)) { | ||||||
|  | 				console.error(resp.statusCode, req.url); | ||||||
|  | 				console.error(); | ||||||
|  | 				console.error('Request:'); | ||||||
|  | 				console.error(req); | ||||||
|  | 				console.error(); | ||||||
|  | 				console.error('Response:'); | ||||||
|  | 				console.error(resp.body); | ||||||
|  | 				console.error(); | ||||||
|  | 				throw new Error( | ||||||
|  | 					'Error response. Check token, baseUrl, domains, etc.' | ||||||
|  | 				); | ||||||
|  | 			} | ||||||
|  | 			return resp; | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	return { | 	return { | ||||||
| 		init: function(opts) { | 		init: function(opts) { | ||||||
| 			request = opts.request; | 			request = opts.request; | ||||||
| @ -11,23 +46,95 @@ module.exports.create = function(config) { | |||||||
| 		}, | 		}, | ||||||
| 		zones: function(data) { | 		zones: function(data) { | ||||||
| 			// console.info('List Zones', data);
 | 			// console.info('List Zones', data);
 | ||||||
| 			throw Error('listing zones not implemented'); | 
 | ||||||
|  | 			return api('GET', '/' + account + '/zones').then(function(resp) { | ||||||
|  | 				return resp['body']['data'].map(function(elem) { | ||||||
|  | 					//console.log('DEBUG >>> elem.name: ' + elem.name);
 | ||||||
|  | 					return elem.name; | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
| 		}, | 		}, | ||||||
| 		set: function(data) { | 		set: function(data) { | ||||||
|  | 			// console.info('Add TXT', data);
 | ||||||
| 			var ch = data.challenge; | 			var ch = data.challenge; | ||||||
|  | 
 | ||||||
| 			if (!ch.dnsZone) { | 			if (!ch.dnsZone) { | ||||||
| 				throw new Error('No matching zone for ' + ch.dnsHost); | 				throw new Error('No matching zone for ' + ch.dnsHost); | ||||||
| 			} | 			} | ||||||
| 			// console.info('Add TXT', data);
 | 			var txt = ch.dnsAuthorization; | ||||||
| 			throw Error('setting TXT not implemented'); | 
 | ||||||
| 		}, | 			return api( | ||||||
| 		remove: function(data) { | 				'POST', | ||||||
| 			// console.info('Remove TXT', data);
 | 				'/' + account + '/zones/' + ch.dnsZone + '/records', | ||||||
| 			throw Error('removing TXT not implemented'); | 				{ | ||||||
|  | 					name: ch.dnsPrefix, | ||||||
|  | 					type: 'TXT', | ||||||
|  | 					content: txt | ||||||
|  | 				} | ||||||
|  | 			).then(function(resp) { | ||||||
|  | 				if (resp.statusCode === 201) { | ||||||
|  | 					return true; | ||||||
|  | 				} | ||||||
|  | 				throw new Error( | ||||||
|  | 					'record did not set. check subdomain, api key, etc' | ||||||
|  | 				); | ||||||
|  | 			}); | ||||||
| 		}, | 		}, | ||||||
| 		get: function(data) { | 		get: function(data) { | ||||||
| 			// console.info('List TXT', data);
 | 			// console.info('List TXT', data);
 | ||||||
| 			throw Error('listing TXTs not implemented'); | 			var ch = data.challenge; | ||||||
|  | 
 | ||||||
|  | 			// TODO use :name_like
 | ||||||
|  | 			// https://developer.dnsimple.com/v2/zones/records/
 | ||||||
|  | 			return api( | ||||||
|  | 				'GET', | ||||||
|  | 				'/' + account + '/zones/' + data.challenge.dnsZone + '/records' | ||||||
|  | 			).then(function(resp) { | ||||||
|  | 				var record = resp.body.data.filter(function(record) { | ||||||
|  | 					return ( | ||||||
|  | 						ch.dnsPrefix === record.name && | ||||||
|  | 						ch.dnsAuthorization === record.content | ||||||
|  | 					); | ||||||
|  | 				})[0]; | ||||||
|  | 
 | ||||||
|  | 				if (record) { | ||||||
|  | 					return { dnsAuthorization: record.content }; | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				return null; | ||||||
|  | 			}); | ||||||
|  | 		}, | ||||||
|  | 		remove: function(data) { | ||||||
|  | 			// console.info('Remove TXT', data);
 | ||||||
|  | 			var ch = data.challenge; | ||||||
|  | 
 | ||||||
|  | 			return api( | ||||||
|  | 				'GET', | ||||||
|  | 				'/' + account + '/zones/' + data.challenge.dnsZone + '/records' | ||||||
|  | 			).then(function(resp) { | ||||||
|  | 				var record = resp.body.data.filter(function(record) { | ||||||
|  | 					return ( | ||||||
|  | 						ch.dnsPrefix === record.name && | ||||||
|  | 						ch.dnsAuthorization === record.content | ||||||
|  | 					); | ||||||
|  | 				})[0]; | ||||||
|  | 
 | ||||||
|  | 				if (!record) { | ||||||
|  | 					throw new Error('Txt Record not found for removal'); | ||||||
|  | 				} | ||||||
|  | 				return api( | ||||||
|  | 					'DELETE', | ||||||
|  | 					'/' + | ||||||
|  | 						account + | ||||||
|  | 						'/zones/' + | ||||||
|  | 						ch.dnsZone + | ||||||
|  | 						'/records/' + | ||||||
|  | 						record.id | ||||||
|  | 				).then(function(resp) { | ||||||
|  | 					// console.info('DEBUG >>> resp: ', JSON.stringify(resp, null, 2));
 | ||||||
|  | 					return true; | ||||||
|  | 				}); | ||||||
|  | 			}); | ||||||
| 		} | 		} | ||||||
| 	}; | 	}; | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
| 	"name": "acme-dns-01-dnsimple", | 	"name": "acme-dns-01-dnsimple", | ||||||
| 	"version": "0.0.1", | 	"version": "3.0.0", | ||||||
| 	"description": "DNSimple + Let's Encrypt for Node.js - ACME dns-01 challenges w/ ACME.js and Greenlock.js", | 	"description": "DNSimple + Let's Encrypt for Node.js - ACME dns-01 challenges w/ ACME.js and Greenlock.js", | ||||||
| 	"main": "index.js", | 	"main": "index.js", | ||||||
| 	"files": [ | 	"files": [ | ||||||
| @ -12,7 +12,7 @@ | |||||||
| 	}, | 	}, | ||||||
| 	"repository": { | 	"repository": { | ||||||
| 		"type": "git", | 		"type": "git", | ||||||
| 		"url": "https://git.coolaj86.com/coolaj86/acme-dns-01-dnsimple.js.git" | 		"url": "https://git.rootprojects.org/root/acme-dns-01-dnsimple.js.git" | ||||||
| 	}, | 	}, | ||||||
| 	"keywords": [ | 	"keywords": [ | ||||||
| 		"dnsimple", | 		"dnsimple", | ||||||
| @ -22,7 +22,10 @@ | |||||||
| 		"acme", | 		"acme", | ||||||
| 		"greenlock" | 		"greenlock" | ||||||
| 	], | 	], | ||||||
| 	"author": "AJ ONeal <coolaj86@gmail.com> (https://coolaj86.com/)", | 	"author": "Hitesh Walia <hiteshwar.walia@gmail.com", | ||||||
|  | 	"contributors": [ | ||||||
|  | 		"AJ ONeal <coolaj86@gmail.com> (https://coolaj86.com/)" | ||||||
|  | 	], | ||||||
| 	"license": "MPL-2.0", | 	"license": "MPL-2.0", | ||||||
| 	"devDependencies": { | 	"devDependencies": { | ||||||
| 		"acme-challenge-test": "^3.3.2", | 		"acme-challenge-test": "^3.3.2", | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								test.js
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								test.js
									
									
									
									
									
								
							| @ -5,11 +5,11 @@ | |||||||
| var tester = require('acme-challenge-test'); | var tester = require('acme-challenge-test'); | ||||||
| require('dotenv').config(); | require('dotenv').config(); | ||||||
| 
 | 
 | ||||||
| // Usage: node ./test.js example.com username xxxxxxxxx
 | // Usage: node ./test.js example.com token account
 | ||||||
| var zone = process.argv[2] || process.env.ZONE; | var zone = process.argv[2] || process.env.ZONE; | ||||||
| var challenger = require('./index.js').create({ | var challenger = require('./index.js').create({ | ||||||
| 	username: process.argv[3] || process.env.USERNAME, | 	token: process.argv[3] || process.env.TOKEN, | ||||||
| 	password: process.argv[4] || process.env.PASSWORD | 	account: process.argv[4] || process.env.ACCOUNT | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| // The dry-run tests can pass on, literally, 'example.com'
 | // The dry-run tests can pass on, literally, 'example.com'
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user