mirror of
				https://github.com/therootcompany/greenlock-express.js.git
				synced 2025-11-04 05:52:47 +00:00 
			
		
		
		
	wip: move to configDir
This commit is contained in:
		
							parent
							
								
									01ff1d7da5
								
							
						
					
					
						commit
						48b892c323
					
				@ -5,19 +5,10 @@ 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 Init = require("./init.js");
 | 
				
			||||||
    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) {
 | 
					    if (!greenlock && opts.packageRoot) {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            greenlock = require(path.resolve(opts.packageRoot, "greenlock.js"));
 | 
					            greenlock = require(path.resolve(opts.packageRoot, "greenlock.js"));
 | 
				
			||||||
@ -27,115 +18,19 @@ module.exports.create = function(opts) {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!greenlock) {
 | 
					    if (!greenlock) {
 | 
				
			||||||
        if (opts.packageRoot) {
 | 
					        opts = Init._init(opts);
 | 
				
			||||||
            try {
 | 
					        greenlock = Greenlock.create(opts);
 | 
				
			||||||
                pkgText = fs.readFileSync(path.resolve(opts.packageRoot, "package.json"), "utf8");
 | 
					    }
 | 
				
			||||||
            } catch (e) {
 | 
					
 | 
				
			||||||
                pkgErr = e;
 | 
					    try {
 | 
				
			||||||
                console.warn("`packageRoot` should be the root of the package (probably `__dirname`)");
 | 
					        if (opts.notify) {
 | 
				
			||||||
            }
 | 
					            greenlock._defaults.notify = opts.notify;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        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);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        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 {
 | 
					 | 
				
			||||||
            if (opts.notify) {
 | 
					 | 
				
			||||||
                greenlock._defaults.notify = opts.notify;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } catch (e) {
 | 
					 | 
				
			||||||
            console.error("Developer Error: notify not attached correctly");
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					        console.error("Developer Error: notify not attached correctly");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // re-export as top-level function to simplify rpc with workers
 | 
					    // re-export as top-level function to simplify rpc with workers
 | 
				
			||||||
@ -164,29 +59,3 @@ module.exports.create = function(opts) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return greenlock;
 | 
					    return greenlock;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					 | 
				
			||||||
function addGreenlockAgent(opts) {
 | 
					 | 
				
			||||||
    // Add greenlock as part of Agent, unless this is greenlock
 | 
					 | 
				
			||||||
    var packageAgent = opts.packageAgent || "";
 | 
					 | 
				
			||||||
    if (!/greenlock(-express|-pro)?/i.test(packageAgent)) {
 | 
					 | 
				
			||||||
        var pkg = require("./package.json");
 | 
					 | 
				
			||||||
        packageAgent += " Greenlock_Express/" + pkg.version;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return packageAgent.trim();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ex: "John Doe <john@example.com> (https://john.doe)"
 | 
					 | 
				
			||||||
// ex: "John Doe <john@example.com>"
 | 
					 | 
				
			||||||
// ex: "<john@example.com>"
 | 
					 | 
				
			||||||
// ex: "john@example.com"
 | 
					 | 
				
			||||||
var looseEmailRe = /(^|[\s<])([^'" <>:;`]+@[^'" <>:;`]+\.[^'" <>:;`]+)/;
 | 
					 | 
				
			||||||
function parseMaintainer(maintainerEmail) {
 | 
					 | 
				
			||||||
    try {
 | 
					 | 
				
			||||||
        maintainerEmail = maintainerEmail.match(looseEmailRe)[2];
 | 
					 | 
				
			||||||
    } catch (e) {
 | 
					 | 
				
			||||||
        maintainerEmail = null;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return maintainerEmail;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										131
									
								
								init.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								init.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,131 @@
 | 
				
			|||||||
 | 
					"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var Init = module.exports;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var fs = require("fs");
 | 
				
			||||||
 | 
					var path = require("path");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Init.init = function(opts) {
 | 
				
			||||||
 | 
					    //var Rc = require("@root/greenlock/rc");
 | 
				
			||||||
 | 
					    var Rc = require("./rc.js");
 | 
				
			||||||
 | 
					    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 = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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.author;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (opts.packageRoot) {
 | 
				
			||||||
 | 
					        // Place the rc file in the packageroot
 | 
				
			||||||
 | 
					        opts.configDir = Rc._initSync(opts.packageRoot, opts.configDir);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!opts.configDir) {
 | 
				
			||||||
 | 
					        throw new Error("missing `packageRoot` and `configDir`");
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Place the rc file in the configDir itself
 | 
				
			||||||
 | 
					    //Rc._initSync(opts.configDir, opts.configDir);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function addGreenlockAgent(opts) {
 | 
				
			||||||
 | 
					    // Add greenlock as part of Agent, unless this is greenlock
 | 
				
			||||||
 | 
					    var packageAgent = opts.packageAgent || "";
 | 
				
			||||||
 | 
					    if (!/greenlock(-express|-pro)?/i.test(packageAgent)) {
 | 
				
			||||||
 | 
					        var pkg = require("./package.json");
 | 
				
			||||||
 | 
					        packageAgent += " Greenlock_Express/" + pkg.version;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return packageAgent.trim();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ex: "John Doe <john@example.com> (https://john.doe)"
 | 
				
			||||||
 | 
					// ex: "John Doe <john@example.com>"
 | 
				
			||||||
 | 
					// ex: "<john@example.com>"
 | 
				
			||||||
 | 
					// ex: "john@example.com"
 | 
				
			||||||
 | 
					var looseEmailRe = /(^|[\s<])([^'" <>:;`]+@[^'" <>:;`]+\.[^'" <>:;`]+)/;
 | 
				
			||||||
 | 
					function parseMaintainer(maintainerEmail) {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        maintainerEmail = maintainerEmail.match(looseEmailRe)[2];
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					        maintainerEmail = null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return maintainerEmail;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										39
									
								
								rc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								rc.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					"use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var Rc = module.exports;
 | 
				
			||||||
 | 
					var fs = require("fs");
 | 
				
			||||||
 | 
					var path = require("path");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Rc._initSync = function(dirname, configDir) {
 | 
				
			||||||
 | 
					    // dirname / opts.packageRoot
 | 
				
			||||||
 | 
					    var rcpath = path.resolve(dirname, ".greenlockrc");
 | 
				
			||||||
 | 
					    var rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        rc = JSON.parse(fs.readFileSync(rcpath));
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					        if ("ENOENT" !== e.code) {
 | 
				
			||||||
 | 
					            throw e;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        rc = {};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!configDir) {
 | 
				
			||||||
 | 
					        configDir = rc.configDir;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (configDir && configDir !== rc.configDir) {
 | 
				
			||||||
 | 
					        if (rc.configDir) {
 | 
				
			||||||
 | 
					            console.info("changing `configDir` from '%s' to '%s'", rc.configDir, configDir);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        rc.configDir = configDir;
 | 
				
			||||||
 | 
					        /* if (!rc.manager) { rc.manager = "@greenlock/manager"; } */
 | 
				
			||||||
 | 
					        fs.writeFileSync(rcpath, JSON.stringify(rc));
 | 
				
			||||||
 | 
					    } else if (!rc.configDir) {
 | 
				
			||||||
 | 
					        configDir = path.resolve(dirname, "greenlock.d");
 | 
				
			||||||
 | 
					        rc.configDir = configDir;
 | 
				
			||||||
 | 
					        fs.writeFileSync(rcpath, JSON.stringify(rc));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return configDir;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user