90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var NOBJ = {};
 | |
| 
 | |
| module.exports.create = function (challenge) {
 | |
|   var servers = {
 | |
|     _servers: []
 | |
| 
 | |
|   , httpResponder: function (req, res) {
 | |
|       console.log('[LE-CLI] httpResponder');
 | |
|       var acmeChallengePrefix = '/.well-known/acme-challenge/';
 | |
| 
 | |
|       if (0 !== req.url.indexOf(acmeChallengePrefix)) {
 | |
|         res.end("Let's Encrypt! Command line tool");
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       var token = req.url.slice(acmeChallengePrefix.length);
 | |
| 
 | |
|       challenge.get(NOBJ, req.headers.host.replace(/:.*/, ''), token, function (err, val) {
 | |
|         res.end(val || '_ ERROR challenge not found _');
 | |
|       });
 | |
|     }
 | |
| 
 | |
|   , startServers: function (plainPorts, tlsPorts, opts) {
 | |
|       opts = opts || {};
 | |
| 
 | |
|       var httpsOptions = require('localhost.daplie.com-certificates');
 | |
|       var https = require('https');
 | |
|       var http = require('http');
 | |
| 
 | |
|       if (servers._servers.length) {
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       // http-01-port
 | |
|       plainPorts.forEach(function (port) {
 | |
|         var server = http.createServer(servers.httpResponder);
 | |
| 
 | |
|         servers._servers.push(server);
 | |
|         server.listen(port, function () {
 | |
|           if (opts.debug) {
 | |
|             console.info('Listening http on', this.address());
 | |
|           }
 | |
|         });
 | |
|         server.on('error', function (err) {
 | |
|           if ('EADDRINUSE' === err.code) {
 | |
|             console.error("");
 | |
|             console.error("You already have a different server running on port '" + port + "'.");
 | |
|             console.error("You should probably use the --webroot-path option instead of --standalone.");
 | |
|             return;
 | |
|           }
 | |
|           throw err;
 | |
|         });
 | |
|       });
 | |
| 
 | |
|       // tls-sni-01-port
 | |
|       tlsPorts.forEach(function (port) {
 | |
|         var server = https.createServer(httpsOptions, servers.httpResponder);
 | |
| 
 | |
|         servers._servers.push(server);
 | |
|         servers.listen(port, function () {
 | |
|           if (opts.debug) {
 | |
|             console.info('Listening https on', this.address());
 | |
|           }
 | |
|         });
 | |
|         servers.on('error', function (err) {
 | |
|           if ('EADDRINUSE' === err.code) {
 | |
|             console.error("");
 | |
|             console.error("You already have a different server running on port '" + port + "'.");
 | |
|             console.error("You should probably use the --webroot-path option instead of --standalone.");
 | |
|             return;
 | |
|           }
 | |
|           throw err;
 | |
|         });
 | |
|       });
 | |
| 
 | |
|     }
 | |
| 
 | |
|   , closeServers: function () {
 | |
|       servers._servers.forEach(function (server) {
 | |
|         server.close();
 | |
|       });
 | |
|       servers._servers = [];
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   return servers;
 | |
| };
 |