AJ ONeal
5 years ago
9 changed files with 342 additions and 129 deletions
@ -0,0 +1,135 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
var P = require('../plugins.js'); |
||||
|
var args = process.argv.slice(3); |
||||
|
var cli = require('./lib/cli.js'); |
||||
|
//var path = require('path');
|
||||
|
//var pkgpath = path.join(__dirname, '..', 'package.json');
|
||||
|
//var pkgpath = path.join(process.cwd(), 'package.json');
|
||||
|
|
||||
|
var Flags = require('./lib/flags.js'); |
||||
|
|
||||
|
var flagOptions = Flags.flags(); |
||||
|
var myFlags = {}; |
||||
|
['maintainer-email', 'cluster', 'manager', 'manager-xxxx'].forEach(function(k) { |
||||
|
myFlags[k] = flagOptions[k]; |
||||
|
}); |
||||
|
|
||||
|
cli.parse(myFlags); |
||||
|
cli.main(async function(argList, flags) { |
||||
|
var path = require('path'); |
||||
|
var pkgpath = path.join(process.cwd(), 'package.json'); |
||||
|
var pkgdir = path.dirname(pkgpath); |
||||
|
//var rcpath = path.join(pkgpath, '.greenlockrc');
|
||||
|
var configFile = path.join(pkgdir, 'greenlock.d/manager.json'); |
||||
|
var manager = flags.manager; |
||||
|
|
||||
|
// TODO move to bin/lib/greenlockrc.js
|
||||
|
if (!manager) { |
||||
|
manager = 'greenlock-cloud-fs'; |
||||
|
if (!flags.managerOpts.configFile) { |
||||
|
flags.managerOpts.configFile = configFile; |
||||
|
} |
||||
|
} |
||||
|
if (['fs', 'cloud'].includes(manager)) { |
||||
|
// TODO publish the 1st party modules under a secure namespace
|
||||
|
flags.manager = '@greenlock/manager-' + flags.manager; |
||||
|
} |
||||
|
flags.manager = flags.managerOpts; |
||||
|
delete flags.managerOpts; |
||||
|
flags.manager.manager = manager; |
||||
|
|
||||
|
try { |
||||
|
P._loadSync(manager); |
||||
|
} catch (e) { |
||||
|
try { |
||||
|
P._installSync(manager); |
||||
|
} catch (e) { |
||||
|
console.error( |
||||
|
'error:', |
||||
|
JSON.stringify(manager), |
||||
|
'could not be loaded, and could not be installed.' |
||||
|
); |
||||
|
process.exit(1); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
var GreenlockRc = require('./lib/greenlockrc.js'); |
||||
|
//var rc = await GreenlockRc(pkgpath, manager, flags.manager);
|
||||
|
await GreenlockRc(pkgpath, manager, flags.manager); |
||||
|
writeServerJs(pkgdir, flags); |
||||
|
writeAppJs(pkgdir); |
||||
|
|
||||
|
/* |
||||
|
rc._bin_mode = true; |
||||
|
var Greenlock = require('../'); |
||||
|
// this is a copy, so it's safe to modify
|
||||
|
var greenlock = Greenlock.create(rc); |
||||
|
var mconf = await greenlock.manager.defaults(); |
||||
|
var flagOptions = Flags.flags(mconf, myOpts); |
||||
|
*/ |
||||
|
}, args); |
||||
|
|
||||
|
function writeServerJs(pkgdir, flags) { |
||||
|
var serverJs = 'server.js'; |
||||
|
var bakTmpl = 'server-greenlock-tmpl.js'; |
||||
|
var fs = require('fs'); |
||||
|
var path = require('path'); |
||||
|
var tmpl = fs.readFileSync( |
||||
|
path.join(__dirname, 'tmpl/server.tmpl.js'), |
||||
|
'utf8' |
||||
|
); |
||||
|
|
||||
|
try { |
||||
|
fs.accessSync(path.join(pkgdir, serverJs)); |
||||
|
console.warn( |
||||
|
JSON.stringify(serverJs), |
||||
|
' exists, writing to ', |
||||
|
JSON.stringify(bakTmpl), |
||||
|
'instead' |
||||
|
); |
||||
|
serverJs = bakTmpl; |
||||
|
} catch (e) { |
||||
|
// continue
|
||||
|
} |
||||
|
|
||||
|
if (flags.cluster) { |
||||
|
tmpl = tmpl.replace( |
||||
|
/options.cluster = false/g, |
||||
|
'options.cluster = true' |
||||
|
); |
||||
|
} |
||||
|
if (flags.maintainerEmail) { |
||||
|
tmpl = tmpl.replace( |
||||
|
/pkg.author/g, |
||||
|
JSON.stringify(flags.maintainerEmail) |
||||
|
); |
||||
|
} |
||||
|
fs.writeFileSync(path.join(pkgdir, serverJs), tmpl); |
||||
|
} |
||||
|
|
||||
|
function writeAppJs(pkgdir) { |
||||
|
var bakTmpl = 'app-greenlock-tmpl.js'; |
||||
|
var appJs = 'app.js'; |
||||
|
var fs = require('fs'); |
||||
|
var path = require('path'); |
||||
|
var tmpl = fs.readFileSync( |
||||
|
path.join(__dirname, 'tmpl/app.tmpl.js'), |
||||
|
'utf8' |
||||
|
); |
||||
|
|
||||
|
try { |
||||
|
fs.accessSync(path.join(pkgdir, appJs)); |
||||
|
console.warn( |
||||
|
JSON.stringify(appJs), |
||||
|
' exists, writing to ', |
||||
|
JSON.stringify(bakTmpl), |
||||
|
'instead' |
||||
|
); |
||||
|
appJs = bakTmpl; |
||||
|
} catch (e) { |
||||
|
// continue
|
||||
|
} |
||||
|
|
||||
|
fs.writeFileSync(path.join(pkgdir, appJs), tmpl); |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
// Here's a vanilla HTTP app to start,
|
||||
|
// but feel free to replace it with Express, Koa, etc
|
||||
|
var app = function(req, res) { |
||||
|
res.end('Hello, Encrypted World!'); |
||||
|
}; |
||||
|
|
||||
|
module.exports = app; |
@ -0,0 +1,36 @@ |
|||||
|
'use strict'; |
||||
|
|
||||
|
require('greenlock-express') |
||||
|
.init(function() { |
||||
|
// .greenlockrc defines which manager to use
|
||||
|
// (i.e. greenlock-manager-fs or greenlock-manager-cloud)
|
||||
|
var options = getGreenlockRc() || {}; |
||||
|
|
||||
|
// name & version for ACME client user agent
|
||||
|
var pkg = require('./package.json'); |
||||
|
options.packageAgent = pkg.name + '/' + pkg.version; |
||||
|
|
||||
|
// contact for security and critical bug notices
|
||||
|
options.maintainerEmail = pkg.author; |
||||
|
|
||||
|
// whether or not to run at cloudscale
|
||||
|
options.cluster = false; |
||||
|
|
||||
|
return options; |
||||
|
}) |
||||
|
.ready(function(glx) { |
||||
|
var app = require('./app.js'); |
||||
|
|
||||
|
// Serves on 80 and 443
|
||||
|
// Get's SSL certificates magically!
|
||||
|
glx.serveApp(app); |
||||
|
}); |
||||
|
|
||||
|
function getGreenlockRc() { |
||||
|
// The RC file is also used by the (optional) CLI and (optional) Web GUI.
|
||||
|
// You are free to forego CLI and GUI support.
|
||||
|
var fs = require('fs'); |
||||
|
var rcPath = '.greenlockrc'; |
||||
|
var rc = fs.readFileSync(rcPath, 'utf8'); |
||||
|
return JSON.parse(rc); |
||||
|
} |
Loading…
Reference in new issue