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
 | |
| 	});
 | |
| }
 |