97 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			97 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict'; | ||
|  | 
 | ||
|  | var Greenlock = require('./'); | ||
|  | 
 | ||
|  | module.exports.wrap = function(greenlock) { | ||
|  |     greenlock.challenges.get = function(chall) { | ||
|  |         // TODO pick one and warn on the others
 | ||
|  |         // (just here due to some backwards compat issues with early v3 plugins)
 | ||
|  |         var servername = | ||
|  |             chall.servername || | ||
|  |             chall.altname || | ||
|  |             (chall.identifier && chall.identifier.value); | ||
|  | 
 | ||
|  |         // TODO some sort of caching to prevent database hits?
 | ||
|  |         return greenlock | ||
|  |             ._config({ servername: servername }) | ||
|  |             .then(function(site) { | ||
|  |                 if (!site) { | ||
|  |                     return null; | ||
|  |                 } | ||
|  | 
 | ||
|  |                 // Hmm... this _should_ be impossible
 | ||
|  |                 if (!site.challenges || !site.challenges['http-01']) { | ||
|  |                     var copy = JSON.parse(JSON.stringify(site)); | ||
|  |                     sanitizeCopiedConf(copy); | ||
|  |                     sanitizeCopiedConf(copy.store); | ||
|  |                     if (site.challenges) { | ||
|  |                         sanitizeCopiedConf(copy.challenges['http-01']); | ||
|  |                         sanitizeCopiedConf(copy.challenges['dns-01']); | ||
|  |                         sanitizeCopiedConf(copy.challenges['tls-alpn-01']); | ||
|  |                     } | ||
|  |                     console.warn('[Bug] Please report this error:'); | ||
|  |                     console.warn( | ||
|  |                         '\terror: http-01 challenge requested, but not even a default http-01 config exists' | ||
|  |                     ); | ||
|  |                     console.warn('\tservername:', JSON.stringify(servername)); | ||
|  |                     console.warn('\tsite:', JSON.stringify(copy)); | ||
|  |                     return null; | ||
|  |                 } | ||
|  | 
 | ||
|  |                 return Greenlock._loadChallenge(site.challenges, 'http-01'); | ||
|  |             }) | ||
|  |             .then(function(plugin) { | ||
|  |                 if (!plugin) { | ||
|  |                     return null; | ||
|  |                 } | ||
|  |                 return plugin | ||
|  |                     .get({ | ||
|  |                         challenge: { | ||
|  |                             type: chall.type, | ||
|  |                             //hostname: chall.servername,
 | ||
|  |                             altname: chall.servername, | ||
|  |                             identifier: { value: chall.servername }, | ||
|  |                             token: chall.token | ||
|  |                         } | ||
|  |                     }) | ||
|  |                     .then(function(result) { | ||
|  |                         var keyAuth; | ||
|  |                         var keyAuthDigest; | ||
|  |                         if (result) { | ||
|  |                             // backwards compat that shouldn't be dropped
 | ||
|  |                             // because new v3 modules had to do this to be
 | ||
|  |                             // backwards compatible with Greenlock v2.7 at
 | ||
|  |                             // the time.
 | ||
|  |                             if (result.challenge) { | ||
|  |                                 result = result.challenge; | ||
|  |                             } | ||
|  |                             keyAuth = result.keyAuthorization; | ||
|  |                             keyAuthDigest = result.keyAuthorizationDigest; | ||
|  |                         } | ||
|  |                         if (/dns/.test(chall.type)) { | ||
|  |                             return { | ||
|  |                                 keyAuthorizationDigest: keyAuthDigest | ||
|  |                             }; | ||
|  |                         } | ||
|  |                         return { | ||
|  |                             keyAuthorization: keyAuth | ||
|  |                         }; | ||
|  |                     }); | ||
|  |             }); | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | function sanitizeCopiedConf(copy) { | ||
|  |     if (!copy) { | ||
|  |         return; | ||
|  |     } | ||
|  | 
 | ||
|  |     Object.keys(copy).forEach(function(k) { | ||
|  |         if (/(api|key|token)/i.test(k) && 'string' === typeof copy[k]) { | ||
|  |             copy[k] = '**redacted**'; | ||
|  |         } | ||
|  |     }); | ||
|  | 
 | ||
|  |     return copy; | ||
|  | } |