mirror of
				https://github.com/therootcompany/greenlock-express.js.git
				synced 2024-11-16 17:28:59 +00:00 
			
		
		
		
	made testable and tested server example
This commit is contained in:
		
							parent
							
								
									c73ad565a3
								
							
						
					
					
						commit
						778416d49b
					
				
							
								
								
									
										46
									
								
								server.js
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								server.js
									
									
									
									
									
								
							| @ -50,10 +50,12 @@ var glx = require("./").create({ | |||||||
| 	store: require("greenlock-store-fs") | 	store: require("greenlock-store-fs") | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| var server = glx.listen(80, 443); | if (require.main === module) { | ||||||
| server.on("listening", function() { | 	var server = glx.listen(80, 443); | ||||||
| 	console.info(server.type + " listening on", server.address()); | 	server.on("listening", function() { | ||||||
| }); | 		console.info(server.type + " listening on", server.address()); | ||||||
|  | 	}); | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| function myApproveDomains(opts) { | function myApproveDomains(opts) { | ||||||
| 	console.info("SNI:", opts.domain); | 	console.info("SNI:", opts.domain); | ||||||
| @ -62,14 +64,26 @@ function myApproveDomains(opts) { | |||||||
| 	// SECURITY Greenlock validates opts.domains ahead-of-time so you don't have to
 | 	// SECURITY Greenlock validates opts.domains ahead-of-time so you don't have to
 | ||||||
| 
 | 
 | ||||||
| 	var domains = []; | 	var domains = []; | ||||||
| 	var domain = opts.domain.replace(/^(www|api)\./, ""); | 	var original = opts.domain; | ||||||
| 	return checkWwws(domain) | 	var bare = original.replace(/^(www|api)\./, ""); | ||||||
|  | 	// The goal here is to support both bare and www domains
 | ||||||
|  | 	//
 | ||||||
|  | 	// dns:example.com + fs:www.example.com => both
 | ||||||
|  | 	// dns:www.example.com + fs:example.com => both
 | ||||||
|  | 	//
 | ||||||
|  | 	// dns:api.example.com + fs:www.example.com => www.example.com
 | ||||||
|  | 	// dns:api.example.com + fs:example.com => example.com
 | ||||||
|  | 	//
 | ||||||
|  | 	// dns:example.com + fs:example.com => example.com
 | ||||||
|  | 	// dns:www.example.com + fs:www.example.com => www.example.com
 | ||||||
|  | 	//
 | ||||||
|  | 	return checkWwws(bare) | ||||||
| 		.then(function(hostname) { | 		.then(function(hostname) { | ||||||
| 			// this is either example.com or www.example.com
 | 			// hostname is either example.com or www.example.com
 | ||||||
| 			domains.push(hostname); | 			domains.push(hostname); | ||||||
| 			if ("api." + domain !== opts.domain) { | 			if ("api." + bare !== original) { | ||||||
| 				if (!domains.includes(opts.domain)) { | 				if (!domains.includes(original)) { | ||||||
| 					domains.push(opts.domain); | 					domains.push(original); | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}) | 		}) | ||||||
| @ -79,10 +93,7 @@ function myApproveDomains(opts) { | |||||||
| 		}) | 		}) | ||||||
| 		.then(function() { | 		.then(function() { | ||||||
| 			// check for api prefix
 | 			// check for api prefix
 | ||||||
| 			var apiname = domain; | 			var apiname = "api." + bare; | ||||||
| 			if (domains.length) { |  | ||||||
| 				apiname = "api." + domain; |  | ||||||
| 			} |  | ||||||
| 			return checkApi(apiname) | 			return checkApi(apiname) | ||||||
| 				.then(function(app) { | 				.then(function(app) { | ||||||
| 					if (!app) { | 					if (!app) { | ||||||
| @ -95,7 +106,9 @@ function myApproveDomains(opts) { | |||||||
| 				}); | 				}); | ||||||
| 		}) | 		}) | ||||||
| 		.then(function() { | 		.then(function() { | ||||||
| 			if (0 === domains.length) { | 			// It's possible that example.com could have been requested,
 | ||||||
|  | 			// and not found, but api.example.com was found
 | ||||||
|  | 			if (!domains.includes(original)) { | ||||||
| 				return Promise.reject(new Error("no bare, www., or api. domain matching '" + opts.domain + "'")); | 				return Promise.reject(new Error("no bare, www., or api. domain matching '" + opts.domain + "'")); | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| @ -129,6 +142,7 @@ function myApproveDomains(opts) { | |||||||
| 			return Promise.resolve(opts); | 			return Promise.resolve(opts); | ||||||
| 		}); | 		}); | ||||||
| } | } | ||||||
|  | exports.myApproveDomains = myApproveDomains; | ||||||
| 
 | 
 | ||||||
| function checkApi(hostname) { | function checkApi(hostname) { | ||||||
| 	var apipath = path.join(config.api, hostname); | 	var apipath = path.join(config.api, hostname); | ||||||
| @ -153,6 +167,7 @@ function checkApi(hostname) { | |||||||
| 			throw new Error("rejecting '" + hostname + "' because '" + apipath + link + "' failed at require()"); | 			throw new Error("rejecting '" + hostname + "' because '" + apipath + link + "' failed at require()"); | ||||||
| 		}); | 		}); | ||||||
| } | } | ||||||
|  | exports.checkApi = checkApi; | ||||||
| 
 | 
 | ||||||
| function checkWwws(_hostname) { | function checkWwws(_hostname) { | ||||||
| 	if (!_hostname) { | 	if (!_hostname) { | ||||||
| @ -192,6 +207,7 @@ function checkWwws(_hostname) { | |||||||
| 			throw new Error("rejecting '" + _hostname + "' because '" + hostdir + "' could not be read"); | 			throw new Error("rejecting '" + _hostname + "' because '" + hostdir + "' could not be read"); | ||||||
| 		}); | 		}); | ||||||
| } | } | ||||||
|  | exports.checkWwws = checkWwws; | ||||||
| 
 | 
 | ||||||
| function myVhostApp(req, res) { | function myVhostApp(req, res) { | ||||||
| 	// SECURITY greenlock pre-sanitizes hostnames to prevent unauthorized fs access so you don't have to
 | 	// SECURITY greenlock pre-sanitizes hostnames to prevent unauthorized fs access so you don't have to
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user