mirror of
				https://github.com/therootcompany/greenlock.js.git
				synced 2024-11-16 17:29:00 +00:00 
			
		
		
		
	non-lossy python config parser
This commit is contained in:
		
							parent
							
								
									0bb800dd85
								
							
						
					
					
						commit
						efcc2b3bac
					
				
							
								
								
									
										62
									
								
								examples/renewal-example.com.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								examples/renewal-example.com.conf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | ||||
| cert = /etc/letsencrypt/live/example.com/cert.pem | ||||
| privkey = /etc/letsencrypt/live/example.com/privkey.pem | ||||
| chain = /etc/letsencrypt/live/example.com/chain.pem | ||||
| fullchain = /etc/letsencrypt/live/example.com/fullchain.pem | ||||
| 
 | ||||
| # Options and defaults used in the renewal process | ||||
| [renewalparams] | ||||
| apache_enmod = a2enmod | ||||
| no_verify_ssl = False | ||||
| ifaces = None | ||||
| apache_dismod = a2dismod | ||||
| register_unsafely_without_email = False | ||||
| uir = None | ||||
| installer = none | ||||
| config_dir = /etc/letsencrypt | ||||
| text_mode = False | ||||
| func = <function obtain_cert at 0x30c9500> | ||||
| prepare = False | ||||
| work_dir = /var/lib/letsencrypt | ||||
| tos = True | ||||
| init = False | ||||
| http01_port = 80 | ||||
| duplicate = False | ||||
| key_path = None | ||||
| nginx = False | ||||
| fullchain_path = /home/user/letsencrypt/chain.pem | ||||
| email = user@example.com | ||||
| csr = None | ||||
| agree_dev_preview = None | ||||
| redirect = None | ||||
| verbose_count = -3 | ||||
| config_file = None | ||||
| renew_by_default = False | ||||
| hsts = False | ||||
| authenticator = webroot | ||||
| domains = example.com, | ||||
| rsa_key_size = 2048 | ||||
| checkpoints = 1 | ||||
| manual_test_mode = False | ||||
| apache = False | ||||
| cert_path = /home/user/letsencrypt/cert.pem | ||||
| webroot_path = /srv/www/example.com/, | ||||
| strict_permissions = False | ||||
| apache_server_root = /etc/apache2 | ||||
| account = f4c33502df3789849f617944253b35ae | ||||
| manual_public_ip_logging_ok = False | ||||
| chain_path = /home/user/letsencrypt/chain.pem | ||||
| standalone = False | ||||
| manual = False | ||||
| server = https://acme-v01.api.letsencrypt.org/directory | ||||
| standalone_supported_challenges = "http-01,tls-sni-01" | ||||
| webroot = True | ||||
| apache_init_script = None | ||||
| user_agent = None | ||||
| apache_ctl = apache2ctl | ||||
| apache_le_vhost_ext = -le-ssl.conf | ||||
| debug = False | ||||
| tls_sni_01_port = 443 | ||||
| logs_dir = /var/log/letsencrypt | ||||
| configurator = None | ||||
| [[webroot_map]] | ||||
| example.com = /srv/www/example.com/ | ||||
							
								
								
									
										94
									
								
								pyconf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								pyconf.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,94 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| var fs = require('fs'); | ||||
| 
 | ||||
| function snakeCase(key) { | ||||
|   if ('tlsSni01Port' === key) { | ||||
|     return 'tls_sni_01_port'; | ||||
|   } | ||||
|   /* | ||||
|   else if ('http01Port' === key) { | ||||
|     return 'http01-port'; | ||||
|   } | ||||
|   */ | ||||
|   else { | ||||
|     return key.replace(/([A-Z])/g, '_$1').toLowerCase(); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| function uc(match, c) { | ||||
|   return c.toUpperCase(); | ||||
| } | ||||
| 
 | ||||
| function camelCase(key) { | ||||
|   return key.replace(/_([a-z0-9])/g, uc); | ||||
| } | ||||
| 
 | ||||
| function parsePythonConf(str, cb) { | ||||
|   var keys = {}; | ||||
|   var obj = {}; | ||||
|   var lines = str.split('\n'); | ||||
| 
 | ||||
|   lines.forEach(function (line, i) { | ||||
|     line = line.replace(/#.*/, '').trim(); | ||||
| 
 | ||||
|     if (!line) { return; } | ||||
| 
 | ||||
|     var parts = line.trim().split('='); | ||||
|     var pykey = parts.shift().trim(); | ||||
|     var key = camelCase(pykey); | ||||
|     var val = parts.join('='); | ||||
| 
 | ||||
|     if ('True' === val) { | ||||
|       val = true; | ||||
|     } | ||||
|     else if ('False' === val) { | ||||
|       val = false; | ||||
|     } | ||||
|     else if ('None' === val) { | ||||
|       val = null; | ||||
|     } | ||||
|     else if (/,/.test(val) && !/^"[^"]*"$/.test(val)) { | ||||
|       val = val.split(','); | ||||
|     } | ||||
|     else if (/^[0-9]+$/.test(val)) { | ||||
|       val = parseInt(val, 10); | ||||
|     } | ||||
| 
 | ||||
|     obj[key] = val; | ||||
|     if ('undefined' !== typeof keys[key]) { | ||||
|       console.warn("unexpected duplicate key '" + key + "': '" + val + "'"); | ||||
|     } | ||||
| 
 | ||||
|     keys[key] = i; | ||||
|   }); | ||||
| 
 | ||||
|   // we want to be able to rewrite the file with comments, etc
 | ||||
|   obj.__keys = keys; | ||||
|   obj.__lines = lines; | ||||
| 
 | ||||
|   cb(null, obj); | ||||
| } | ||||
| 
 | ||||
| function parsePythonConfFile(pathname, cb) { | ||||
|   fs.readFile(pathname, 'utf8', function (err, text) { | ||||
|     if (err) { | ||||
|       cb(err); | ||||
|       return; | ||||
|     } | ||||
| 
 | ||||
|     parsePythonConf(text, cb); | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| module.exports.parse = parsePythonConf; | ||||
| module.exports.parseFile = parsePythonConfFile; | ||||
| 
 | ||||
| parsePythonConfFile('examples/renewal-example.com.conf', function (err, obj) { | ||||
|   if (err) { | ||||
|     console.error(err.stack); | ||||
|     return; | ||||
|   } | ||||
| 
 | ||||
|   console.log(obj); | ||||
| }); | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user