mirror of
				https://github.com/therootcompany/greenlock.js.git
				synced 2024-11-16 17:29:00 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var PromiseA = require('bluebird');
 | |
| var path = require('path');
 | |
| var requestAsync = PromiseA.promisify(require('request'));
 | |
| var LE = require('../').LE;
 | |
| var le = LE.create({
 | |
|   server: 'staging'
 | |
| , acme: require('le-acme-core').ACME.create()
 | |
| , store: require('le-store-certbot').create({
 | |
|     configDir: '~/letsencrypt.test/etc'.split('/').join(path.sep)
 | |
|   , webrootPath: '~/letsencrypt.test/var/:hostname'.split('/').join(path.sep)
 | |
|   })
 | |
| , challenge: require('le-challenge-fs').create({
 | |
|     webrootPath: '~/letsencrypt.test/var/:hostname'.split('/').join(path.sep)
 | |
|   })
 | |
| , debug: true
 | |
| });
 | |
| var utils = require('../lib/utils');
 | |
| 
 | |
| if ('/.well-known/acme-challenge/' !== LE.acmeChallengePrefix) {
 | |
|   throw new Error("Bad constant 'acmeChallengePrefix'");
 | |
| }
 | |
| 
 | |
| var baseUrl;
 | |
| // could use localhost as well, but for the sake of an FQDN for testing, we use this
 | |
| // also, example.com is just a junk domain to make sure that it is ignored
 | |
| // (even though it should always be an array of only one element in lib/core.js)
 | |
| var domains = [ 'localhost.daplie.com', 'example.com' ]; // or just localhost
 | |
| var token = 'token-id';
 | |
| var secret = 'key-secret';
 | |
| 
 | |
| var tests = [
 | |
|   function () {
 | |
|     console.log('Test Url:', baseUrl + token);
 | |
|     return requestAsync({ url: baseUrl + token }).then(function (req) {
 | |
|       if (404 !== req.statusCode) {
 | |
|         console.log(req.statusCode);
 | |
|         throw new Error("Should be status 404");
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| 
 | |
| , function () {
 | |
|     var copy = utils.merge({ domains: domains }, le);
 | |
|     copy = utils.tplCopy(copy);
 | |
|     return PromiseA.promisify(le.challenge.set)(copy, domains[0], token, secret);
 | |
|   }
 | |
| 
 | |
| , function () {
 | |
|     return requestAsync(baseUrl + token).then(function (req) {
 | |
|       if (200 !== req.statusCode) {
 | |
|         console.log(req.statusCode, req.body);
 | |
|         throw new Error("Should be status 200");
 | |
|       }
 | |
| 
 | |
|       if (req.body !== secret) {
 | |
|         console.error(token, secret, req.body);
 | |
|         throw new Error("req.body should be secret");
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| 
 | |
| , function () {
 | |
|     var copy = utils.merge({ domains: domains }, le);
 | |
|     copy = utils.tplCopy(copy);
 | |
|     return PromiseA.promisify(le.challenge.remove)(copy, domains[0], token);
 | |
|   }
 | |
| 
 | |
| , function () {
 | |
|     return requestAsync(baseUrl + token).then(function (req) {
 | |
|       if (404 !== req.statusCode) {
 | |
|         console.log(req.statusCode);
 | |
|         throw new Error("Should be status 404");
 | |
|       }
 | |
|     });
 | |
|   }
 | |
| ];
 | |
| 
 | |
| function run() {
 | |
|   //var express = require(express);
 | |
|   var server = require('http').createServer(le.middleware());
 | |
|   server.listen(0, function () {
 | |
|     console.log('Server running, proceeding to test.');
 | |
|     baseUrl = 'http://' + domains[0] + ':' + server.address().port + LE.acmeChallengePrefix;
 | |
| 
 | |
|     function next() {
 | |
|       var test = tests.shift();
 | |
|       if (!test) {
 | |
|         console.info('All tests passed');
 | |
|         server.close();
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       test().then(next, function (err) {
 | |
|         console.error('ERROR');
 | |
|         console.error(err.stack);
 | |
|         server.close();
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     next();
 | |
|   });
 | |
| }
 | |
| 
 | |
| run();
 |