wip: simpler config and defaults

This commit is contained in:
AJ ONeal 2019-11-18 00:53:26 -07:00
parent 48b892c323
commit 28aad4f29d
4 changed files with 29 additions and 185 deletions

View File

@ -29,7 +29,7 @@ npm install --save greenlock-express@v3
``` ```
```bash ```bash
npx greenlock init --maintainer-email 'jon@example.com' --manager-config-file ./greenlock.json npx greenlock init --maintainer-email 'jon@example.com'
``` ```
<details> <details>
@ -39,13 +39,11 @@ npx greenlock init --maintainer-email 'jon@example.com' --manager-config-file ./
"use strict"; "use strict";
require("greenlock-express") require("greenlock-express")
.init(function() { .init({
return { packageRoot: __dirname,
greenlock: require("./greenlock.js"),
// whether or not to run at cloudscale // whether or not to run at cloudscale
cluster: false cluster: false
};
}) })
.ready(function(glx) { .ready(function(glx) {
var app = require("./app.js"); var app = require("./app.js");
@ -83,6 +81,8 @@ module.exports = require("@root/greenlock").create({
<summary>app.js</summary> <summary>app.js</summary>
```js ```js
"use strict";
var app = function(req, res) { var app = function(req, res) {
res.end("Hello, Encrypted World!"); res.end("Hello, Encrypted World!");
}; };
@ -92,14 +92,19 @@ module.exports = app;
</details> </details>
```bash
npx greenlock defaults --subscriber-email 'jon@example.com' --agree-to-terms
```
```bash ```bash
npx greenlock add --subject example.com --altnames example.com npx greenlock add --subject example.com --altnames example.com
``` ```
<details>
<summary>greenlock.json</summary>
```json
{ "sites": [{ "subject": "example.com", "altnames": ["example.com"] }] }
```
</details>
```bash ```bash
npm start -- --staging npm start -- --staging
``` ```

View File

@ -1,11 +1,8 @@
"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 Init = require("./init.js"); var Init = require("@root/greenlock/init.js");
var greenlock = opts.greenlock; var greenlock = opts.greenlock;
/* /*
@ -24,6 +21,7 @@ module.exports.create = function(opts) {
opts = Init._init(opts); opts = Init._init(opts);
greenlock = Greenlock.create(opts); greenlock = Greenlock.create(opts);
} }
opts.packageAgent = addGreenlockAgent(opts);
try { try {
if (opts.notify) { if (opts.notify) {
@ -59,3 +57,14 @@ 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();
}

131
init.js
View File

@ -1,131 +0,0 @@
"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
View File

@ -1,39 +0,0 @@
"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;
};