mirror of
				https://github.com/therootcompany/greenlock-express.js.git
				synced 2024-11-16 17:28:59 +00:00 
			
		
		
		
	listener works
This commit is contained in:
		
							parent
							
								
									9f88e8b146
								
							
						
					
					
						commit
						00dd7bd6f1
					
				
							
								
								
									
										12
									
								
								examples/serve.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								examples/serve.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| //var le = require('letsencrypt-express');
 | ||||
| var le = require('../'); | ||||
| var express = require('express'); | ||||
| var app = express(); | ||||
| 
 | ||||
| app.use(function (req, res) { | ||||
|   res.send({ success: true }); | ||||
| }); | ||||
| 
 | ||||
| le.create(app).listen([80], [443, 5001]); | ||||
							
								
								
									
										152
									
								
								lib/standalone.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								lib/standalone.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,152 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| var path = require('path'); | ||||
| 
 | ||||
| function getChallenge(args, hostname, key, cb) { | ||||
|   var fs = require('fs'); | ||||
|   var keyfile = path.join((args.webrootPath || args.webrootTpl).replace(':hostname', hostname), key); | ||||
| 
 | ||||
|   fs.readFile(keyfile, 'utf8', function (err, text) { | ||||
|     if (err) { | ||||
|       cb(err); | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     cb(null, text); | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| function create(obj) { | ||||
|   var https = require('https'); | ||||
|   var http = require('http'); | ||||
| 
 | ||||
|   var httpsOptions = obj.httpsOptions || {}; | ||||
|   var defaultPems = require('localhost.daplie.com-certificates'); | ||||
| 
 | ||||
|   if (!obj) { | ||||
|     obj = {}; | ||||
|   } | ||||
|   else if ('function' === typeof obj) { | ||||
|     obj = { | ||||
|       onRequest: obj | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
|   if (!obj.getChallenge) { | ||||
|     obj.getChallenge = getChallenge; | ||||
|     if (!obj.webrootPath) { | ||||
|       obj.webrootPath = path.join(require('os').tmpdir(), 'acme-challenge'); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   if (!obj.onRequest) { | ||||
|     console.warn("You did not specify args.onRequest, using 'Hello, World!'"); | ||||
|     obj.onRequest = function (req, res) { | ||||
|       res.end('Hello, World!'); | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
|   function acmeResponder(req, res) { | ||||
|     var acmeChallengePrefix = '/.well-known/acme-challenge/'; | ||||
| 
 | ||||
|     if (0 !== req.url.indexOf(acmeChallengePrefix)) { | ||||
|       obj.onRequest(req, res); | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     var key = req.url.slice(acmeChallengePrefix.length); | ||||
| 
 | ||||
|     obj.getChallenge(obj, req.headers.host, key, function (err, val) { | ||||
|       res.end(val || '_'); | ||||
|     }); | ||||
|   } | ||||
| 
 | ||||
|   // https://nodejs.org/api/https.html
 | ||||
|   // pfx, key, cert, passphrase, ca, ciphers, rejectUnauthorized, secureProtocol
 | ||||
|   if (!httpsOptions.pfx) { | ||||
|     if (!(httpsOptions.cert || httpsOptions.key)) { | ||||
|       httpsOptions.key = defaultPems.key; | ||||
|       httpsOptions.cert = defaultPems.cert; | ||||
|     } | ||||
|     else if (!(httpsOptions.cert && httpsOptions.key)) { | ||||
|       if (!httpsOptions.cert) { | ||||
|         console.warn("You specified httpsOptions.cert, but not httpsOptions.key"); | ||||
|       } | ||||
|       if (!httpsOptions.key) { | ||||
|         console.warn("You specified httpsOptions.key, but not httpsOptions.cert"); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function listen(plainPorts, tlsPorts, onListening) { | ||||
|     var results = { | ||||
|       plainServers: [] | ||||
|     , tlsServers: [] | ||||
|     }; | ||||
| 
 | ||||
|     plainPorts = plainPorts || [80]; | ||||
|     tlsPorts = tlsPorts || [443, 5001]; | ||||
| 
 | ||||
|     function defaultOnListening() { | ||||
|       /*jshint validthis: true*/ | ||||
|       var server = this; | ||||
|       var protocol = ('honorCipherOrder' in server || 'rejectUnauthorized' in server) ? 'https': 'http'; | ||||
|       var addr = server.address(); | ||||
|       var port; | ||||
| 
 | ||||
|       if (80 === addr.port || 443 === addr.port) { | ||||
|         port = ''; | ||||
|       } else { | ||||
|         port = ':' + addr.port; | ||||
|       } | ||||
|       console.info('Listening ' + protocol + '://' + addr.address + port + '/'); | ||||
|     } | ||||
| 
 | ||||
|     console.log(plainPorts); | ||||
|     plainPorts.forEach(function (addr) { | ||||
|       var port = addr.port || addr; | ||||
|       var address = addr.address || ''; | ||||
|       var server = http.createServer(acmeResponder); | ||||
| 
 | ||||
|       server.__le_onListening = addr.onListen; | ||||
|       server.__le_port = port; | ||||
|       server.__le_address = address; | ||||
| 
 | ||||
|       results.plainServers.push(server); | ||||
|     }); | ||||
| 
 | ||||
|     tlsPorts.forEach(function (addr) { | ||||
|       var port = addr.port || addr; | ||||
|       var address = addr.address || ''; | ||||
|       var options = addr.httpsOptions || httpsOptions; | ||||
|       var server = https.createServer(options, acmeResponder); | ||||
| 
 | ||||
|       server.__le_onListen = addr.onListen; | ||||
|       server.__le_port = port; | ||||
|       server.__le_address = address; | ||||
| 
 | ||||
|       results.tlsServers.push(server); | ||||
|     }); | ||||
| 
 | ||||
|     results.plainServers.forEach(function (server) { | ||||
|       var listen = server.__le_onListening || onListening || defaultOnListening; | ||||
|       server.listen(server.__le_port, server.__le_address, listen); | ||||
|     }); | ||||
| 
 | ||||
|     results.tlsServers.forEach(function (server) { | ||||
|       var listen = server.__le_onListening || onListening || defaultOnListening; | ||||
|       server.listen(server.__le_port, server.__le_address, listen); | ||||
|     }); | ||||
| 
 | ||||
|     // deleting creates a "slow object", but that's okay (we only use it once)
 | ||||
|     return results; | ||||
|   }; | ||||
| 
 | ||||
|   return { | ||||
|     listen: listen | ||||
|   }; | ||||
| } | ||||
| 
 | ||||
| module.exports = create; | ||||
| module.exports.create = create; | ||||
| module.exports.getChallenge = getChallenge; | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user