mirror of
				https://github.com/therootcompany/greenlock-express.js.git
				synced 2024-11-16 17:28:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			75 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | "use strict"; | ||
|  | 
 | ||
|  | var Worker = module.exports; | ||
|  | 
 | ||
|  | Worker.create = function(opts) { | ||
|  | 	var greenlock = { | ||
|  | 		// rename presentChallenge?
 | ||
|  | 		getAcmeHttp01ChallengeResponse: presentChallenge, | ||
|  | 		notify: notifyMaster, | ||
|  | 		get: greenlockRenew | ||
|  | 	}; | ||
|  | 
 | ||
|  | 	var worker = { | ||
|  | 		worker: function(fn) { | ||
|  | 			var servers = require("./servers.js").create(greenlock, opts); | ||
|  | 			fn(servers); | ||
|  | 			return worker; | ||
|  | 		}, | ||
|  | 		master: function() { | ||
|  | 			// ignore
 | ||
|  | 			return worker; | ||
|  | 		} | ||
|  | 	}; | ||
|  | 	return worker; | ||
|  | }; | ||
|  | 
 | ||
|  | function greenlockRenew(args) { | ||
|  | 	return request("renew", { | ||
|  | 		servername: args.servername | ||
|  | 	}); | ||
|  | } | ||
|  | 
 | ||
|  | function presentChallenge(args) { | ||
|  | 	return request("challenge-response", { | ||
|  | 		servername: args.servername, | ||
|  | 		token: args.token | ||
|  | 	}); | ||
|  | } | ||
|  | 
 | ||
|  | function request(typename, msg) { | ||
|  | 	return new Promise(function(resolve, reject) { | ||
|  | 		var rnd = Math.random() | ||
|  | 			.slice(2) | ||
|  | 			.toString(16); | ||
|  | 		var id = "greenlock:" + rnd; | ||
|  | 		var timeout; | ||
|  | 
 | ||
|  | 		function getResponse(msg) { | ||
|  | 			if (msg.id !== id) { | ||
|  | 				return; | ||
|  | 			} | ||
|  | 			clearTimeout(timeout); | ||
|  | 			resolve(msg); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		process.on("message", getResponse); | ||
|  | 		msg.id = msg; | ||
|  | 		msg.type = typename; | ||
|  | 		process.send(msg); | ||
|  | 
 | ||
|  | 		timeout = setTimeout(function() { | ||
|  | 			process.removeListener("message", getResponse); | ||
|  | 			reject(new Error("process message timeout")); | ||
|  | 		}, 30 * 1000); | ||
|  | 	}); | ||
|  | } | ||
|  | 
 | ||
|  | function notifyMaster(ev, args) { | ||
|  | 	process.on("message", { | ||
|  | 		type: "notification", | ||
|  | 		event: ev, | ||
|  | 		parameters: args | ||
|  | 	}); | ||
|  | } |