132 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 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/. */
 | |
| 'use strict';
 | |
| 
 | |
| var RSA = require('rsa-compat').RSA;
 | |
| var readline = require('readline');
 | |
| var rl = readline.createInterface({
 | |
| 	input: process.stdin,
 | |
| 	output: process.stdout
 | |
| });
 | |
| 
 | |
| require('./genkeypair.js');
 | |
| 
 | |
| function getWeb() {
 | |
| 	rl.question(
 | |
| 		'What web address(es) would you like to get certificates for? (ex: example.com,*.example.com) ',
 | |
| 		function(web) {
 | |
| 			web = (web || '').trim().split(/,/g);
 | |
| 			if (!web[0]) {
 | |
| 				getWeb();
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			if (
 | |
| 				web.some(function(w) {
 | |
| 					return '*' === w[0];
 | |
| 				})
 | |
| 			) {
 | |
| 				console.log('Wildcard domains must use dns-01');
 | |
| 				getEmail(web, 'dns-01');
 | |
| 			} else {
 | |
| 				getChallengeType(web);
 | |
| 			}
 | |
| 		}
 | |
| 	);
 | |
| }
 | |
| 
 | |
| function getChallengeType(web) {
 | |
| 	rl.question(
 | |
| 		'What challenge will you be testing today? http-01 or dns-01? [http-01] ',
 | |
| 		function(chType) {
 | |
| 			chType = (chType || '').trim();
 | |
| 			if (!chType) {
 | |
| 				chType = 'http-01';
 | |
| 			}
 | |
| 
 | |
| 			getEmail(web, chType);
 | |
| 		}
 | |
| 	);
 | |
| }
 | |
| 
 | |
| function getEmail(web, chType) {
 | |
| 	rl.question('What email should we use? (optional) ', function(email) {
 | |
| 		email = (email || '').trim();
 | |
| 		if (!email) {
 | |
| 			email = null;
 | |
| 		}
 | |
| 
 | |
| 		getApiStyle(web, chType, email);
 | |
| 	});
 | |
| }
 | |
| 
 | |
| function getApiStyle(web, chType, email) {
 | |
| 	var defaultStyle = 'compat';
 | |
| 	rl.question(
 | |
| 		'What API style would you like to test? v1-compat or promise? [v1-compat] ',
 | |
| 		function(apiStyle) {
 | |
| 			apiStyle = (apiStyle || '').trim();
 | |
| 			if (!apiStyle) {
 | |
| 				apiStyle = 'v1-compat';
 | |
| 			}
 | |
| 
 | |
| 			rl.close();
 | |
| 
 | |
| 			var RSA = require('rsa-compat').RSA;
 | |
| 			var accountKeypair = RSA.import({
 | |
| 				privateKeyPem: require('fs').readFileSync(
 | |
| 					__dirname + '/../tests/account.privkey.pem'
 | |
| 				)
 | |
| 			});
 | |
| 			var domainKeypair = RSA.import({
 | |
| 				privateKeyPem: require('fs').readFileSync(
 | |
| 					__dirname + '/../tests/privkey.pem'
 | |
| 				)
 | |
| 			});
 | |
| 			var directoryUrl =
 | |
| 				'https://acme-staging-v02.api.letsencrypt.org/directory';
 | |
| 
 | |
| 			if ('promise' === apiStyle) {
 | |
| 				require('../tests/promise.js').run(
 | |
| 					directoryUrl,
 | |
| 					RSA,
 | |
| 					web,
 | |
| 					chType,
 | |
| 					email,
 | |
| 					accountKeypair,
 | |
| 					domainKeypair
 | |
| 				);
 | |
| 			} else if ('cb' === apiStyle) {
 | |
| 				require('../tests/cb.js').run(
 | |
| 					directoryUrl,
 | |
| 					RSA,
 | |
| 					web,
 | |
| 					chType,
 | |
| 					email,
 | |
| 					accountKeypair,
 | |
| 					domainKeypair
 | |
| 				);
 | |
| 			} else {
 | |
| 				if ('v1-compat' !== apiStyle) {
 | |
| 					console.warn(
 | |
| 						"Didn't understand '" + apiStyle + "', using 'v1-compat' instead..."
 | |
| 					);
 | |
| 				}
 | |
| 				require('../tests/compat.js').run(
 | |
| 					directoryUrl,
 | |
| 					RSA,
 | |
| 					web,
 | |
| 					chType,
 | |
| 					email,
 | |
| 					accountKeypair,
 | |
| 					domainKeypair
 | |
| 				);
 | |
| 			}
 | |
| 		}
 | |
| 	);
 | |
| }
 | |
| 
 | |
| getWeb();
 |