mirror of
				https://github.com/therootcompany/greenlock-express.js.git
				synced 2024-11-16 17:28:59 +00:00 
			
		
		
		
	WIP cleanup
This commit is contained in:
		
							parent
							
								
									aac54d63f2
								
							
						
					
					
						commit
						0285f9b40f
					
				
							
								
								
									
										154
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										154
									
								
								index.js
									
									
									
									
									
								
							| @ -10,7 +10,85 @@ try { | |||||||
| // opts.approveDomains(options, certs, cb)
 | // opts.approveDomains(options, certs, cb)
 | ||||||
| module.exports.create = function (opts) { | module.exports.create = function (opts) { | ||||||
|   // accept all defaults for greenlock.challenges, greenlock.store, greenlock.middleware
 |   // accept all defaults for greenlock.challenges, greenlock.store, greenlock.middleware
 | ||||||
|   opts._communityPackage = opts._communityPackage || 'greenlock-express.js'; |   if (!opts._communityPackage) { | ||||||
|  |     opts._communityPackage = 'greenlock-express.js'; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   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 + "'"); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   function _listenHttp(plainPort) { | ||||||
|  |     if (!plainPort) { plainPort = 80; } | ||||||
|  |     var p = plainPort; | ||||||
|  |     var validHttpPort = (parseInt(p, 10) >= 0); | ||||||
|  |     if (!validHttpPort) { console.warn("'" + p + "' doesn't seem to be a valid port number for http"); } | ||||||
|  |     var plainServer = require('http').createServer( | ||||||
|  |       greenlock.middleware.sanitizeHost(greenlock.middleware(require('redirect-https')())) | ||||||
|  |     ); | ||||||
|  |     var promise = new PromiseA(function (resolve) { | ||||||
|  |       plainServer.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); | ||||||
|  |       }); | ||||||
|  |     }); | ||||||
|  |     promise.server = plainServer; | ||||||
|  |     return promise; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   function _listenHttps(port) { | ||||||
|  |     if (!port) { port = 443; } | ||||||
|  | 
 | ||||||
|  |     var p = port; | ||||||
|  |     var validHttpsPort = (parseInt(p, 10) >= 0); | ||||||
|  |     if (!validHttpsPort) { console.warn("'" + p + "' doesn't seem to be a valid port number for https"); } | ||||||
|  |     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.sanitizeHost(function (req, res) { | ||||||
|  |         try { | ||||||
|  |           greenlock.app(req, res); | ||||||
|  |         } catch(e) { | ||||||
|  |           console.error("[error] [greenlock.app] Your HTTP handler had an uncaught error:"); | ||||||
|  |           console.error(e); | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     ); | ||||||
|  |     var promise = new PromiseA(function (resolve) { | ||||||
|  |       server.listen(p, function () { | ||||||
|  |         console.log("Success! Serving https on port '" + p + "'"); | ||||||
|  |         resolve(server); | ||||||
|  |       }).on('error', function (e) { | ||||||
|  |         console.log("Did not successfully create https server and bind to port '" + p + "':"); | ||||||
|  |         explainError(e); | ||||||
|  |         process.exit(0); | ||||||
|  |       }); | ||||||
|  |     }); | ||||||
|  |     promise.server = server; | ||||||
|  |     return promise; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   var greenlock = require('greenlock').create(opts); |   var greenlock = require('greenlock').create(opts); | ||||||
| 
 | 
 | ||||||
|   opts.app = opts.app || function (req, res) { |   opts.app = opts.app || function (req, res) { | ||||||
| @ -19,78 +97,8 @@ module.exports.create = function (opts) { | |||||||
| 
 | 
 | ||||||
|   opts.listen = function (plainPort, port) { |   opts.listen = function (plainPort, port) { | ||||||
|     var promises = []; |     var promises = []; | ||||||
|     var plainPorts = plainPort; |     promises.push(_listenHttp(plainPort)); | ||||||
|     var ports = port; |     promises.push(_listenHttps(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; |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "greenlock-express", |   "name": "greenlock-express", | ||||||
|   "version": "2.3.2", |   "version": "2.3.3", | ||||||
|   "description": "Free SSL and managed or automatic HTTPS for node.js with Express, Koa, Connect, Hapi, and all other middleware systems.", |   "description": "Free SSL and managed or automatic HTTPS for node.js with Express, Koa, Connect, Hapi, and all other middleware systems.", | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "homepage": "https://git.coolaj86.com/coolaj86/greenlock-express.js", |   "homepage": "https://git.coolaj86.com/coolaj86/greenlock-express.js", | ||||||
| @ -8,7 +8,7 @@ | |||||||
|     "example": "examples" |     "example": "examples" | ||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "greenlock": "^2.3.7", |     "greenlock": "^2.3.10", | ||||||
|     "le-challenge-fs": "^2.0.8", |     "le-challenge-fs": "^2.0.8", | ||||||
|     "le-sni-auto": "^2.1.4", |     "le-sni-auto": "^2.1.4", | ||||||
|     "le-store-certbot": "^2.1.0", |     "le-store-certbot": "^2.1.0", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user