mirror of
				https://git.coolaj86.com/coolaj86/greenlock-manager-fs.js.git
				synced 2025-11-04 10:32:47 +00:00 
			
		
		
		
	v0.6.4: allow override of find function
This commit is contained in:
		
							parent
							
								
									0c88e09d7d
								
							
						
					
					
						commit
						7fb336f989
					
				
							
								
								
									
										102
									
								
								manager.js
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								manager.js
									
									
									
									
									
								
							@ -111,9 +111,10 @@ Manage.create = function(opts) {
 | 
			
		||||
					config.sites = {};
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				var site = config.sites[primary];
 | 
			
		||||
				if (!site) {
 | 
			
		||||
					site = config.sites[primary] = { altnames: [] };
 | 
			
		||||
				var existing = config.sites[primary];
 | 
			
		||||
				var site = existing;
 | 
			
		||||
				if (!existing) {
 | 
			
		||||
					site = config.sites[primary] = { altnames: [primary] };
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// The goal is to make this decently easy to manage by hand without mistakes
 | 
			
		||||
@ -125,6 +126,17 @@ Manage.create = function(opts) {
 | 
			
		||||
					site.subscriberEmail = subscriberEmail;
 | 
			
		||||
				}
 | 
			
		||||
				site.subject = subject;
 | 
			
		||||
				site.renewAt = args.renewAt || site.renewAt || 0;
 | 
			
		||||
				if (
 | 
			
		||||
					altnames
 | 
			
		||||
						.slice(0)
 | 
			
		||||
						.sort()
 | 
			
		||||
						.join(' ') !== site.altnames.slice(0).sort.join(' ')
 | 
			
		||||
				) {
 | 
			
		||||
					// TODO signal to wait for renewal?
 | 
			
		||||
					// it will definitely be renewed on the first request anyway
 | 
			
		||||
					site.renewAt = 0;
 | 
			
		||||
				}
 | 
			
		||||
				site.altnames = altnames;
 | 
			
		||||
				if (!site.issuedAt) {
 | 
			
		||||
					site.issuedAt = 0;
 | 
			
		||||
@ -167,13 +179,85 @@ Manage.create = function(opts) {
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	manage.find = function(args) {
 | 
			
		||||
		var some = _find(args);
 | 
			
		||||
		if (!opts.find) {
 | 
			
		||||
			return some;
 | 
			
		||||
		}
 | 
			
		||||
		// TODO function to always add
 | 
			
		||||
		throw new Error('TODO: use the given find');
 | 
			
		||||
		return _find(args).then(function(existing) {
 | 
			
		||||
			if (!opts.find) {
 | 
			
		||||
				return existing;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return Promise.resolve(opts.find(args)).then(function(results) {
 | 
			
		||||
				// TODO also detect and delete stale (just ignoring them for now)
 | 
			
		||||
				var changed = [];
 | 
			
		||||
				var same = [];
 | 
			
		||||
				results.forEach(function(_newer) {
 | 
			
		||||
					// Check lowercase subject names
 | 
			
		||||
					var subject = (_newer.subject || '').toLowerCase();
 | 
			
		||||
					// Set the default altnames to the subject, just in case
 | 
			
		||||
					var altnames = _newer.altnames || [];
 | 
			
		||||
					if (!altnames.includes(subject)) {
 | 
			
		||||
						console.warn(
 | 
			
		||||
							"all site configs should include 'subject' and 'altnames': " +
 | 
			
		||||
								subject
 | 
			
		||||
						);
 | 
			
		||||
						altnames.push(subject);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					existing.some(function(_older) {
 | 
			
		||||
						if (subject !== (_older.subject || '').toLowerCase()) {
 | 
			
		||||
							return false;
 | 
			
		||||
						}
 | 
			
		||||
						_newer._exists = true;
 | 
			
		||||
 | 
			
		||||
						// Compare the altnames and update if needed
 | 
			
		||||
						if (
 | 
			
		||||
							altnames
 | 
			
		||||
								.slice(0)
 | 
			
		||||
								.sort()
 | 
			
		||||
								.join(' ') !==
 | 
			
		||||
							(_older.altnames || [])
 | 
			
		||||
								.slice(0)
 | 
			
		||||
								.sort()
 | 
			
		||||
								.join(' ')
 | 
			
		||||
						) {
 | 
			
		||||
							_older.renewAt = 0;
 | 
			
		||||
							_older.altnames = altnames;
 | 
			
		||||
							// TODO signal waitForRenewal (although it'll update on the first access automatically)
 | 
			
		||||
							changed.push(_older);
 | 
			
		||||
						} else {
 | 
			
		||||
							same.push(_older);
 | 
			
		||||
						}
 | 
			
		||||
 | 
			
		||||
						return true;
 | 
			
		||||
					});
 | 
			
		||||
 | 
			
		||||
					if (!_newer._exists) {
 | 
			
		||||
						changed.push({
 | 
			
		||||
							subject: subject,
 | 
			
		||||
							altnames: altnames,
 | 
			
		||||
							renewAt: 0
 | 
			
		||||
						});
 | 
			
		||||
					}
 | 
			
		||||
				});
 | 
			
		||||
 | 
			
		||||
				if (!changed.length) {
 | 
			
		||||
					return same;
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				// kinda redundant to pull again, but whatever...
 | 
			
		||||
				return Manage._getLatest(manage, opts).then(function(config) {
 | 
			
		||||
					changed.forEach(function(site) {
 | 
			
		||||
						config.sites[site.subject] = site;
 | 
			
		||||
					});
 | 
			
		||||
					return manage._save(config).then(function() {
 | 
			
		||||
						// everything was either added, updated, or not different
 | 
			
		||||
						// hence, this is everything
 | 
			
		||||
						var all = changed.concat(same);
 | 
			
		||||
						return all;
 | 
			
		||||
					});
 | 
			
		||||
				});
 | 
			
		||||
			});
 | 
			
		||||
		});
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	function _find(args) {
 | 
			
		||||
		return Manage._getLatest(manage, opts).then(function(config) {
 | 
			
		||||
			// i.e. find certs more than 30 days old
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
	"name": "greenlock-manager-fs",
 | 
			
		||||
	"version": "0.6.3",
 | 
			
		||||
	"version": "0.6.4",
 | 
			
		||||
	"description": "A simple file-based management strategy for Greenlock",
 | 
			
		||||
	"main": "manager.js",
 | 
			
		||||
	"scripts": {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user