wip: refining API
This commit is contained in:
		
							parent
							
								
									347402a4d4
								
							
						
					
					
						commit
						01ff1d7da5
					
				| @ -17,7 +17,8 @@ var GLE = module.exports; | |||||||
| // under the hood. That's the hope, anyway.
 | // under the hood. That's the hope, anyway.
 | ||||||
| 
 | 
 | ||||||
| GLE.init = function(fn) { | GLE.init = function(fn) { | ||||||
|     if (false !== fn.cluster && cluster.isWorker) { |     // See https://git.coolaj86.com/coolaj86/greenlock-express.js/issues/80
 | ||||||
|  |     if (fn && false !== fn.cluster && cluster.isWorker) { | ||||||
|         // ignore the init function and launch the worker
 |         // ignore the init function and launch the worker
 | ||||||
|         return require("./worker.js").create(); |         return require("./worker.js").create(); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1,13 +1,134 @@ | |||||||
| "use strict"; | "use strict"; | ||||||
| 
 | 
 | ||||||
|  | var path = require("path"); | ||||||
|  | var fs = require("fs"); | ||||||
|  | 
 | ||||||
| module.exports.create = function(opts) { | module.exports.create = function(opts) { | ||||||
|     var Greenlock = require("@root/greenlock"); |     var Greenlock = require("@root/greenlock"); | ||||||
|     var greenlock = opts.greenlock; |     var greenlock = opts.greenlock; | ||||||
|  |     var pkgText; | ||||||
|  |     var pkgErr; | ||||||
|  |     var msgErr; | ||||||
|  |     //var emailErr;
 | ||||||
|  |     var realPkg; | ||||||
|  |     var userPkg; | ||||||
|  |     var myPkg = {}; | ||||||
|  |     // we want to be SUPER transparent that we're reading from package.json
 | ||||||
|  |     // we don't want anything unexpected
 | ||||||
|  |     var implicitConfig = []; | ||||||
|  |     var rc; | ||||||
|  | 
 | ||||||
|  |     if (!greenlock && opts.packageRoot) { | ||||||
|  |         try { | ||||||
|  |             greenlock = require(path.resolve(opts.packageRoot, "greenlock.js")); | ||||||
|  |         } catch (e) { | ||||||
|  |             if ("MODULE_NOT_FOUND" !== e.code) { | ||||||
|  |                 throw e; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     if (!greenlock) { |     if (!greenlock) { | ||||||
|         opts = parsePackage(opts); |         if (opts.packageRoot) { | ||||||
|  |             try { | ||||||
|  |                 pkgText = fs.readFileSync(path.resolve(opts.packageRoot, "package.json"), "utf8"); | ||||||
|  |             } catch (e) { | ||||||
|  |                 pkgErr = e; | ||||||
|  |                 console.warn("`packageRoot` should be the root of the package (probably `__dirname`)"); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (pkgText) { | ||||||
|  |             try { | ||||||
|  |                 realPkg = JSON.parse(pkgText); | ||||||
|  |             } catch (e) { | ||||||
|  |                 pkgErr = e; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         userPkg = opts.package; | ||||||
|  | 
 | ||||||
|  |         if (realPkg || userPkg) { | ||||||
|  |             userPkg = userPkg || {}; | ||||||
|  |             realPkg = realPkg || {}; | ||||||
|  | 
 | ||||||
|  |             // build package agent
 | ||||||
|  |             if (!opts.packageAgent) { | ||||||
|  |                 // name
 | ||||||
|  |                 myPkg.name = userPkg.name; | ||||||
|  |                 if (!myPkg.name) { | ||||||
|  |                     myPkg.name = realPkg.name; | ||||||
|  |                     implicitConfig.push("name"); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // version
 | ||||||
|  |                 myPkg.version = userPkg.version; | ||||||
|  |                 if (!myPkg.version) { | ||||||
|  |                     myPkg.version = realPkg.version; | ||||||
|  |                     implicitConfig.push("version"); | ||||||
|  |                 } | ||||||
|  |                 if (myPkg.name && myPkg.version) { | ||||||
|  |                     opts.packageAgent = myPkg.name + "/" + myPkg.version; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             // build author
 | ||||||
|  |             myPkg.author = opts.maintainerEmail; | ||||||
|  |             if (!myPkg.author) { | ||||||
|  |                 myPkg.author = (userPkg.author && userPkg.author.email) || userPkg.author; | ||||||
|  |             } | ||||||
|  |             if (!myPkg.author) { | ||||||
|  |                 implicitConfig.push("author"); | ||||||
|  |                 myPkg.author = (realPkg.author && realPkg.author.email) || realPkg.author; | ||||||
|  |             } | ||||||
|  |             opts.maintainerEmail = myPkg.maintainerEmail; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (!opts.packageAgent) { | ||||||
|  |             msgErr = "missing `packageAgent` and also failed to read `name` and/or `version` from `package.json`"; | ||||||
|  |             if (pkgErr) { | ||||||
|  |                 msgErr += ": " + pkgErr.message; | ||||||
|  |             } | ||||||
|  |             throw new Error(msgErr); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         opts.maintainerEmail = parseMaintainer(opts.maintainerEmail); | ||||||
|  |         if (!opts.maintainerEmail) { | ||||||
|  |             msgErr = | ||||||
|  |                 "missing or malformed `maintainerEmail` (or `author` from `package.json`), which is used as the contact for support notices"; | ||||||
|  |             throw new Error(msgErr); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         opts.packageAgent = addGreenlockAgent(opts); |         opts.packageAgent = addGreenlockAgent(opts); | ||||||
|         greenlock = Greenlock.create(opts); | 
 | ||||||
|  |         if (opts.packageRoot) { | ||||||
|  |             try { | ||||||
|  |                 rc = JSON.parse(fs.readFileSync(path.resolve(opts.packageRoot, ".greenlockrc"))); | ||||||
|  |             } catch (e) { | ||||||
|  |                 if ("ENOENT" !== e.code) { | ||||||
|  |                     throw e; | ||||||
|  |                 } | ||||||
|  |                 rc = {}; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             if (opts.configFile && opts.configFile !== rc.configFile) { | ||||||
|  |                 if (rc.configFile) { | ||||||
|  |                     console.info("changing `configFile` from '%s' to '%s'", rc.configFile, opts.configFile); | ||||||
|  |                 } | ||||||
|  |                 rc.configFile = opts.configFile; | ||||||
|  | 
 | ||||||
|  |                 if (!rc.manager) { | ||||||
|  |                     rc.manager = "@greenlock/manager"; | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 fs.writeFileSync(path.resolve(opts.packageRoot, ".greenlockrc"), JSON.stringify(rc)); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         if (!greenlock) { | ||||||
|  |             greenlock = Greenlock.create(opts); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         try { |         try { | ||||||
|             if (opts.notify) { |             if (opts.notify) { | ||||||
|                 greenlock._defaults.notify = opts.notify; |                 greenlock._defaults.notify = opts.notify; | ||||||
| @ -29,6 +150,7 @@ module.exports.create = function(opts) { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         console.info("Ready to Serve:"); |         console.info("Ready to Serve:"); | ||||||
|  | 
 | ||||||
|         var max = 3; |         var max = 3; | ||||||
|         if (sites.length >= 1) { |         if (sites.length >= 1) { | ||||||
|             sites.slice(0, max).forEach(function(site) { |             sites.slice(0, max).forEach(function(site) { | ||||||
| @ -59,47 +181,12 @@ function addGreenlockAgent(opts) { | |||||||
| // ex: "<john@example.com>"
 | // ex: "<john@example.com>"
 | ||||||
| // ex: "john@example.com"
 | // ex: "john@example.com"
 | ||||||
| var looseEmailRe = /(^|[\s<])([^'" <>:;`]+@[^'" <>:;`]+\.[^'" <>:;`]+)/; | var looseEmailRe = /(^|[\s<])([^'" <>:;`]+@[^'" <>:;`]+\.[^'" <>:;`]+)/; | ||||||
| function parsePackage(opts) { |  | ||||||
|     // 'package' is sometimes a reserved word
 |  | ||||||
|     var pkg = opts.package || opts.pkg; |  | ||||||
|     if (!pkg) { |  | ||||||
|         opts.maintainerEmail = parseMaintainer(opts.maintainerEmail); |  | ||||||
|         return opts; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (!opts.packageAgent) { |  | ||||||
|         var err = "missing `package.THING`, which is used for the ACME client user agent string"; |  | ||||||
|         if (!pkg.name) { |  | ||||||
|             throw new Error(err.replace("THING", "name")); |  | ||||||
|         } |  | ||||||
|         if (!pkg.version) { |  | ||||||
|             throw new Error(err.replace("THING", "version")); |  | ||||||
|         } |  | ||||||
|         opts.packageAgent = pkg.name + "/" + pkg.version; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     if (!opts.maintainerEmail) { |  | ||||||
|         try { |  | ||||||
|             opts.maintainerEmail = pkg.author.email || pkg.author.match(looseEmailRe)[2]; |  | ||||||
|         } catch (e) {} |  | ||||||
|     } |  | ||||||
|     if (!opts.maintainerEmail) { |  | ||||||
|         throw new Error("missing or malformed `package.author`, which is used as the contact for support notices"); |  | ||||||
|     } |  | ||||||
|     opts.package = undefined; |  | ||||||
|     opts.maintainerEmail = parseMaintainer(opts.maintainerEmail); |  | ||||||
| 
 |  | ||||||
|     return opts; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| function parseMaintainer(maintainerEmail) { | function parseMaintainer(maintainerEmail) { | ||||||
|     try { |     try { | ||||||
|         maintainerEmail = maintainerEmail.match(looseEmailRe)[2]; |         maintainerEmail = maintainerEmail.match(looseEmailRe)[2]; | ||||||
|     } catch (e) { |     } catch (e) { | ||||||
|         maintainerEmail = null; |         maintainerEmail = null; | ||||||
|     } |     } | ||||||
|     if (!maintainerEmail) { | 
 | ||||||
|         throw new Error("missing or malformed `maintainerEmail`, which is used as the contact for support notices"); |  | ||||||
|     } |  | ||||||
|     return maintainerEmail; |     return maintainerEmail; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user