| 
									
										
										
										
											2018-12-16 21:19:20 -07:00
										 |  |  | // Copyright 2018 AJ ONeal. All rights reserved
 | 
					
						
							|  |  |  | /* This Source Code Form is subject to the terms of the Mozilla Public | 
					
						
							|  |  |  |  * License, v. 2.0. If a copy of the MPL was not distributed with this | 
					
						
							|  |  |  |  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
					
						
							| 
									
										
										
										
											2018-04-05 01:31:57 -06:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* global Promise */ | 
					
						
							| 
									
										
										
										
											2019-06-13 01:55:25 -06:00
										 |  |  | module.exports.run = function run( | 
					
						
							|  |  |  | 	directoryUrl, | 
					
						
							|  |  |  | 	RSA, | 
					
						
							|  |  |  | 	web, | 
					
						
							|  |  |  | 	chType, | 
					
						
							|  |  |  | 	email, | 
					
						
							|  |  |  | 	accountKeypair, | 
					
						
							|  |  |  | 	domainKeypair | 
					
						
							|  |  |  | ) { | 
					
						
							|  |  |  | 	var acme2 = require('../').ACME.create({ RSA: RSA }); | 
					
						
							|  |  |  | 	// [ 'test.ppl.family' ] 'coolaj86@gmail.com''http-01'
 | 
					
						
							|  |  |  | 	acme2.init(directoryUrl).then(function() { | 
					
						
							|  |  |  | 		var options = { | 
					
						
							|  |  |  | 			agreeToTerms: function(tosUrl) { | 
					
						
							|  |  |  | 				return Promise.resolve(tosUrl); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			setChallenge: function(opts) { | 
					
						
							|  |  |  | 				return new Promise(function(resolve, reject) { | 
					
						
							|  |  |  | 					var pathname; | 
					
						
							| 
									
										
										
										
											2018-04-05 01:31:57 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-13 01:55:25 -06:00
										 |  |  | 					console.log(''); | 
					
						
							|  |  |  | 					console.log('identifier:'); | 
					
						
							|  |  |  | 					console.log(opts.identifier); | 
					
						
							|  |  |  | 					console.log('hostname:'); | 
					
						
							|  |  |  | 					console.log(opts.hostname); | 
					
						
							|  |  |  | 					console.log('type:'); | 
					
						
							|  |  |  | 					console.log(opts.type); | 
					
						
							|  |  |  | 					console.log('token:'); | 
					
						
							|  |  |  | 					console.log(opts.token); | 
					
						
							|  |  |  | 					console.log('thumbprint:'); | 
					
						
							|  |  |  | 					console.log(opts.thumbprint); | 
					
						
							|  |  |  | 					console.log('keyAuthorization:'); | 
					
						
							|  |  |  | 					console.log(opts.keyAuthorization); | 
					
						
							|  |  |  | 					console.log('dnsAuthorization:'); | 
					
						
							|  |  |  | 					console.log(opts.dnsAuthorization); | 
					
						
							|  |  |  | 					console.log(''); | 
					
						
							| 
									
										
										
										
											2018-04-05 01:31:57 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-13 01:55:25 -06:00
										 |  |  | 					if ('http-01' === opts.type) { | 
					
						
							|  |  |  | 						pathname = | 
					
						
							|  |  |  | 							opts.hostname + | 
					
						
							|  |  |  | 							acme2.challengePrefixes['http-01'] + | 
					
						
							|  |  |  | 							'/' + | 
					
						
							|  |  |  | 							opts.token; | 
					
						
							|  |  |  | 						console.log( | 
					
						
							|  |  |  | 							"Put the string '" + | 
					
						
							|  |  |  | 								opts.keyAuthorization + | 
					
						
							|  |  |  | 								"' into a file at '" + | 
					
						
							|  |  |  | 								pathname + | 
					
						
							|  |  |  | 								"'" | 
					
						
							|  |  |  | 						); | 
					
						
							|  |  |  | 						console.log( | 
					
						
							|  |  |  | 							"echo '" + opts.keyAuthorization + "' > '" + pathname + "'" | 
					
						
							|  |  |  | 						); | 
					
						
							|  |  |  | 					} else if ('dns-01' === opts.type) { | 
					
						
							|  |  |  | 						pathname = | 
					
						
							|  |  |  | 							acme2.challengePrefixes['dns-01'] + | 
					
						
							|  |  |  | 							'.' + | 
					
						
							|  |  |  | 							opts.hostname.replace(/^\*\./, ''); | 
					
						
							|  |  |  | 						console.log( | 
					
						
							|  |  |  | 							"Put the string '" + | 
					
						
							|  |  |  | 								opts.dnsAuthorization + | 
					
						
							|  |  |  | 								"' into the TXT record '" + | 
					
						
							|  |  |  | 								pathname + | 
					
						
							|  |  |  | 								"'" | 
					
						
							|  |  |  | 						); | 
					
						
							|  |  |  | 						console.log( | 
					
						
							|  |  |  | 							'dig TXT ' + pathname + " '" + opts.dnsAuthorization + "'" | 
					
						
							|  |  |  | 						); | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 						reject(new Error('[acme-v2] unrecognized challenge type')); | 
					
						
							|  |  |  | 						return; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					console.log("\nThen hit the 'any' key to continue..."); | 
					
						
							| 
									
										
										
										
											2018-04-05 01:31:57 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-13 01:55:25 -06:00
										 |  |  | 					function onAny() { | 
					
						
							|  |  |  | 						console.log("'any' key was hit"); | 
					
						
							|  |  |  | 						process.stdin.pause(); | 
					
						
							|  |  |  | 						process.stdin.removeListener('data', onAny); | 
					
						
							|  |  |  | 						process.stdin.setRawMode(false); | 
					
						
							|  |  |  | 						resolve(); | 
					
						
							|  |  |  | 						return; | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2018-04-05 02:28:29 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-13 01:55:25 -06:00
										 |  |  | 					process.stdin.setRawMode(true); | 
					
						
							|  |  |  | 					process.stdin.resume(); | 
					
						
							|  |  |  | 					process.stdin.on('data', onAny); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			removeChallenge: function(opts) { | 
					
						
							|  |  |  | 				console.log( | 
					
						
							|  |  |  | 					'[acme-v2] remove challenge', | 
					
						
							|  |  |  | 					opts.hostname, | 
					
						
							|  |  |  | 					opts.keyAuthorization | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				return new Promise(function(resolve) { | 
					
						
							|  |  |  | 					// hostname, key
 | 
					
						
							|  |  |  | 					setTimeout(resolve, 1 * 1000); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			challengeType: chType, | 
					
						
							|  |  |  | 			email: email, | 
					
						
							|  |  |  | 			accountKeypair: accountKeypair, | 
					
						
							|  |  |  | 			domainKeypair: domainKeypair, | 
					
						
							|  |  |  | 			domains: web | 
					
						
							|  |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2018-04-05 01:31:57 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-13 01:55:25 -06:00
										 |  |  | 		acme2.accounts.create(options).then(function(account) { | 
					
						
							|  |  |  | 			console.log('[acme-v2] account:'); | 
					
						
							|  |  |  | 			console.log(account); | 
					
						
							| 
									
										
										
										
											2018-04-05 01:31:57 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-13 01:55:25 -06:00
										 |  |  | 			acme2.certificates.create(options).then(function(fullchainPem) { | 
					
						
							|  |  |  | 				console.log('[acme-v2] fullchain.pem:'); | 
					
						
							|  |  |  | 				console.log(fullchainPem); | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2018-04-05 01:31:57 -06:00
										 |  |  | }; |