61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| // tradeoff - lazy load certs vs DOS invalid sni
 | |
| 
 | |
| var Manager = module.exports;
 | |
| 
 | |
| var Cache = {};
 | |
| 
 | |
| Manager.create = function(conf) {
 | |
| 	var domains = conf.domains;
 | |
| 	var manager = {};
 | |
| 
 | |
| 	// { servername, wildname }
 | |
| 	manager.getSubject = function(opts) {
 | |
| 		if (
 | |
| 			!opts.domains.includes(opts.domain) &&
 | |
| 			!opts.domains.includes(opts.wildname)
 | |
| 		) {
 | |
| 			throw new Error('not a registered domain');
 | |
| 		}
 | |
| 		return opts.domains[0];
 | |
| 	};
 | |
| 
 | |
| 	manager.add = function() {};
 | |
| 
 | |
| 	// { servername, wildname }
 | |
| 	manager.configure = function(opts) {};
 | |
| 
 | |
| 	// { servername }
 | |
| 	manager._contexts = {};
 | |
| };
 | |
| 
 | |
| var manager = Manager.create({
 | |
| 	domains: ['example.com', '*.example.com']
 | |
| });
 | |
| 
 | |
| Cache.getTlsContext = function(servername) {
 | |
| 	// TODO exponential fallback certificate renewal
 | |
| 	if (Cache._contexts[servername]) {
 | |
| 		// may be a context, or a promise for a context
 | |
| 		return Cache._contexts[servername];
 | |
| 	}
 | |
| 
 | |
| 	var wildname =
 | |
| 		'*.' +
 | |
| 		(servername || '')
 | |
| 			.split('.')
 | |
| 			.slice(1)
 | |
| 			.join('.');
 | |
| 
 | |
| 	var opts = {
 | |
| 		servername: servername,
 | |
| 		domain: servername,
 | |
| 		wildname: wildname
 | |
| 	};
 | |
| 	manager._contexts[servername] = manager
 | |
| 		.orderCertificate(opts)
 | |
| 		.then(function() {})
 | |
| 		.catch(function(e) {});
 | |
| };
 |