57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*!
 | |
|  * letiny-core
 | |
|  * Copyright(c) 2015 AJ ONeal <aj@daplie.com> https://daplie.com
 | |
|  * Apache-2.0 OR MIT (and hence also MPL 2.0)
 | |
| */
 | |
| 'use strict';
 | |
| 
 | |
| module.exports.create = function (deps) {
 | |
|   var request = deps.request;
 | |
|   var knownUrls = deps.LeCore.knownEndpoints;
 | |
| 
 | |
|   function getAcmeUrls(acmeDiscoveryUrl, cb) {
 | |
| 
 | |
|     // TODO check response header on request for cache time
 | |
|     return request({
 | |
|       url: acmeDiscoveryUrl
 | |
|     }, function (err, resp) {
 | |
|       if (err) {
 | |
|         cb(err);
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       var data = resp.body;
 | |
| 
 | |
|       if ('string' === typeof data) {
 | |
|         try {
 | |
|           data = JSON.parse(data);
 | |
|         } catch(e) {
 | |
|           cb(e);
 | |
|           return;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       if (4 !== Object.keys(data).length) {
 | |
|         console.warn("This Let's Encrypt / ACME server has been updated with urls that this client doesn't understand");
 | |
|         console.warn(data);
 | |
|       }
 | |
| 
 | |
|       if (!knownUrls.every(function (url) {
 | |
|         return data[url];
 | |
|       })) {
 | |
|         console.warn("This Let's Encrypt / ACME server is missing urls that this client may need.");
 | |
|         console.warn(data);
 | |
|       }
 | |
| 
 | |
|       return {
 | |
|         newAuthz: data['new-authz']
 | |
|       , newCert: data['new-cert']
 | |
|       , newReg: data['new-reg']
 | |
|       , revokeCert: data['revoke-cert']
 | |
|       };
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   return getAcmeUrls;
 | |
| };
 |