wip: simpler config and defaults
This commit is contained in:
parent
48b892c323
commit
28aad4f29d
27
README.md
27
README.md
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
|
@ -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
131
init.js
|
@ -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
39
rc.js
|
@ -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;
|
|
||||||
};
|
|
Loading…
Reference in New Issue