mirror of
				https://github.com/therootcompany/greenlock-express.js.git
				synced 2024-11-16 17:28:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| // opts.approveDomains(options, certs, cb)
 | |
| module.exports.create = function (opts) {
 | |
|   // accept all defaults for greenlock.challenges, greenlock.store, greenlock.middleware
 | |
|   opts._communityPackage = opts._communityPackage || 'greenlock-express.js';
 | |
|   var greenlock = require('greenlock').create(opts);
 | |
| 
 | |
|   opts.app = opts.app || function (req, res) {
 | |
|     res.end("Hello, World!\nWith Love,\nGreenlock for Express.js");
 | |
|   };
 | |
| 
 | |
|   opts.listen = function (plainPort, port) {
 | |
|     var PromiseA;
 | |
|     try {
 | |
|       PromiseA = require('bluebird');
 | |
|     } catch(e) {
 | |
|       console.warn("Package 'bluebird' not installed. Using global.Promise instead");
 | |
|       console.warn("(want bluebird instead? npm install --save bluebird)");
 | |
|       PromiseA = global.Promise;
 | |
|     }
 | |
|     var promises = [];
 | |
|     var plainPorts = plainPort;
 | |
|     var ports = port;
 | |
|     var servers = [];
 | |
| 
 | |
|     function explainError(e) {
 | |
|       console.error('Error:' + e.message);
 | |
|       if ('EACCES' === e.errno) {
 | |
|         console.error("You don't have prmission to access '" + e.address + ":" + e.port + "'.");
 | |
|         console.error("You probably need to use \"sudo\" or \"sudo setcap 'cap_net_bind_service=+ep' $(which node)\"");
 | |
|         return;
 | |
|       }
 | |
|       if ('EADDRINUSE' === e.errno) {
 | |
|         console.error("'" + e.address + ":" + e.port + "' is already being used by some other program.");
 | |
|         console.error("You probably need to stop that program or restart your computer.");
 | |
|         return;
 | |
|       }
 | |
|       console.error(e.code + ": '" + e.address + ":" + e.port + "'");
 | |
|     }
 | |
| 
 | |
|     if (!plainPorts) {
 | |
|       plainPorts = 80;
 | |
|     }
 | |
|     if (!ports) {
 | |
|       ports = 443;
 | |
|     }
 | |
| 
 | |
|     if (!Array.isArray(plainPorts)) {
 | |
|       plainPorts = [ plainPorts ];
 | |
|       ports = [ ports ];
 | |
|     }
 | |
| 
 | |
|     plainPorts.forEach(function (p) {
 | |
|       if (!(parseInt(p, 10) >= 0)) { console.warn("'" + p + "' doesn't seem to be a valid port number for http"); }
 | |
|       promises.push(new PromiseA(function (resolve) {
 | |
|         require('http').createServer(greenlock.middleware(require('redirect-https')())).listen(p, function () {
 | |
|           console.log("Success! Bound to port '" + p + "' to handle ACME challenges and redirect to https");
 | |
|           resolve();
 | |
|         }).on('error', function (e) {
 | |
|           console.log("Did not successfully create http server and bind to port '" + p + "':");
 | |
|           explainError(e);
 | |
|           process.exit(0);
 | |
|         });
 | |
|       }));
 | |
|     });
 | |
| 
 | |
|     ports.forEach(function (p) {
 | |
|       if (!(parseInt(p, 10) >= 0)) { console.warn("'" + p + "' doesn't seem to be a valid port number for https"); }
 | |
|       promises.push(new PromiseA(function (resolve) {
 | |
|         var https;
 | |
|         try {
 | |
|           https = require('spdy');
 | |
|           greenlock.tlsOptions.spdy = { protocols: [ 'h2', 'http/1.1' ], plain: false };
 | |
|         } catch(e) {
 | |
|           https = require('https');
 | |
|         }
 | |
|         var server = https.createServer(greenlock.tlsOptions, greenlock.middleware(greenlock.app)).listen(p, function () {
 | |
|           console.log("Success! Serving https on port '" + p + "'");
 | |
|           resolve();
 | |
|         }).on('error', function (e) {
 | |
|           console.log("Did not successfully create https server and bind to port '" + p + "':");
 | |
|           explainError(e);
 | |
|           process.exit(0);
 | |
|         });
 | |
|         servers.push(server);
 | |
|       }));
 | |
|     });
 | |
| 
 | |
|     if (!Array.isArray(port)) {
 | |
|       servers = servers[0];
 | |
|     }
 | |
| 
 | |
|     return servers;
 | |
|   };
 | |
| 
 | |
| 
 | |
|   return greenlock;
 | |
| };
 |