flatten modules, eager load sessions
This commit is contained in:
parent
a21c503b6e
commit
7151868c62
73
bin/walnut
73
bin/walnut
|
@ -2,3 +2,76 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
require('../walnut.js');
|
require('../walnut.js');
|
||||||
|
|
||||||
|
function eagerLoad() {
|
||||||
|
var PromiseA = require('bluebird').Promise
|
||||||
|
var promise = PromiseA.resolve();
|
||||||
|
|
||||||
|
[ 'passport'
|
||||||
|
, 'knex'
|
||||||
|
, 'bookshelf'
|
||||||
|
, 'express'
|
||||||
|
, 'request'
|
||||||
|
, 'sqlite3'
|
||||||
|
, 'body-parser'
|
||||||
|
, 'express-session'
|
||||||
|
, 'urlrouter'
|
||||||
|
, 'express-lazy'
|
||||||
|
, 'connect-send-error'
|
||||||
|
, 'underscore.string'
|
||||||
|
, 'bookshelf'
|
||||||
|
, 'secret-utils'
|
||||||
|
, 'connect-cors'
|
||||||
|
, 'uuid'
|
||||||
|
, 'connect-recase'
|
||||||
|
, 'passport-local'
|
||||||
|
, 'passport-strategy'
|
||||||
|
, 'passport-http'
|
||||||
|
, 'passport-http-bearer'
|
||||||
|
, 'escape-string-regexp'
|
||||||
|
, 'connect-query'
|
||||||
|
, 'recase'
|
||||||
|
].forEach(function (name, i) {
|
||||||
|
promise = promise.then(function () {
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
setTimeout(function () {
|
||||||
|
require(name);
|
||||||
|
resolve();
|
||||||
|
}, 4);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
[ function () {
|
||||||
|
return require('knex').initialize({
|
||||||
|
client: 'sqlite3'
|
||||||
|
, connection: {
|
||||||
|
filename : ':memory:'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
, function (knex) {
|
||||||
|
require('bookshelf').initialize(knex);
|
||||||
|
}
|
||||||
|
, function () {
|
||||||
|
require('body-parser').json();
|
||||||
|
}
|
||||||
|
, function () {
|
||||||
|
require('body-parser').urlencoded();
|
||||||
|
}
|
||||||
|
].forEach(function (fn) {
|
||||||
|
promise = promise.then(function (thing) {
|
||||||
|
return new Promise(function (resolve) {
|
||||||
|
setTimeout(function () {
|
||||||
|
resolve(fn(thing));
|
||||||
|
}, 4);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
promise.then(function () {
|
||||||
|
console.log('Eager Loading Complete');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
setTimeout(eagerLoad, 100);
|
||||||
|
|
117
package.json
117
package.json
|
@ -37,31 +37,96 @@
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/Daplie/walnut",
|
"homepage": "https://github.com/Daplie/walnut",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bluebird": "^2.9.9",
|
"accepts": "^1.2.5",
|
||||||
"body-parser": "^1.12.0",
|
"bluebird": "2.x",
|
||||||
"check-ip-address": "^1.1.0",
|
"body-parser": "1.x",
|
||||||
"cli": "^0.6.5",
|
"btoa": "1.x",
|
||||||
"compression": "^1.4.1",
|
"bytes": "^1.0.0",
|
||||||
"connect": "^3.3.4",
|
"compression": "1.x",
|
||||||
"connect-cors": "^0.5.6",
|
"connect": "3.x",
|
||||||
"connect-query": "^0.2.0",
|
"connect-cors": "0.5.x",
|
||||||
"cookie-parser": "^1.3.4",
|
"connect-query": "0.2.x",
|
||||||
"errorhandler": "^1.3.4",
|
"connect-recase": "1.x",
|
||||||
"escape-string-regexp": "^1.0.2",
|
"connect-send-error": "1.x",
|
||||||
"express": "^4.11.2",
|
"content-type": "^1.0.1",
|
||||||
"express-session": "^1.10.3",
|
"cookie": "^0.1.2",
|
||||||
"foreachasync": "^5.0.5",
|
"cookie-parser": "1.x",
|
||||||
"http-proxy": "^1.8.1",
|
"cookie-session": "1.x",
|
||||||
"human-readable-ids": "^1.0.1",
|
"cookie-signature": "^1.0.6",
|
||||||
"nat-pmp": "0.0.3",
|
"crc": "^3.2.1",
|
||||||
"node-acme": "0.0.1",
|
"debug": "^2.1.3",
|
||||||
"request": "^2.53.0",
|
"depd": "^1.0.0",
|
||||||
"serve-favicon": "^2.2.0",
|
"destroy": "^1.0.3",
|
||||||
"serve-index": "^1.6.2",
|
"dom-storage": "2.x",
|
||||||
"serve-static": "^1.9.1",
|
"ee-first": "^1.1.0",
|
||||||
"ssl-root-cas": "^1.1.7",
|
"errorhandler": "1.x",
|
||||||
"urlrouter": "^0.5.4",
|
"es6-promise": "2.x",
|
||||||
"vhost": "^3.0.0",
|
"escape-html": "^1.0.1",
|
||||||
"xml2js": "^0.4.5"
|
"escape-string-regexp": "1.x",
|
||||||
|
"etag": "^1.5.1",
|
||||||
|
"express": "4.x",
|
||||||
|
"express-lazy": "1.x",
|
||||||
|
"express-session": "1.x",
|
||||||
|
"finalhandler": "^0.3.4",
|
||||||
|
"foreachasync": "5.x",
|
||||||
|
"fresh": "^0.2.4",
|
||||||
|
"human-readable-ids": "1.x",
|
||||||
|
"inherits": "^2.0.1",
|
||||||
|
"jarson": "1.x",
|
||||||
|
"json-storage": "2.x",
|
||||||
|
"lodash": "2.x",
|
||||||
|
"media-typer": "^0.3.0",
|
||||||
|
"methods": "^1.1.1",
|
||||||
|
"mime": "^1.3.4",
|
||||||
|
"mime-db": "^1.8.0",
|
||||||
|
"mime-types": "^2.0.10",
|
||||||
|
"ms": "^0.7.0",
|
||||||
|
"negotiator": "^0.5.1",
|
||||||
|
"node-pre-gyp": "^0.6.4",
|
||||||
|
"node-uuid": "1.x",
|
||||||
|
"nodemailer": "1.x",
|
||||||
|
"nodemailer-mailgun-transport": "1.x",
|
||||||
|
"oauth": "0.9.x",
|
||||||
|
"oauth2orize": "git://github.com/coolaj86/oauth2orize.git#v1.0.1+scope.1",
|
||||||
|
"on-finished": "^2.2.0",
|
||||||
|
"on-headers": "^1.0.0",
|
||||||
|
"parseurl": "^1.3.0",
|
||||||
|
"passport": "0.1.x",
|
||||||
|
"passport-facebook": "1.x",
|
||||||
|
"passport-google-plus": "0.2.x",
|
||||||
|
"passport-http": "0.2.x",
|
||||||
|
"passport-http-bearer": "1.x",
|
||||||
|
"passport-lds-connect": "1.x",
|
||||||
|
"passport-local": "1.x",
|
||||||
|
"passport-oauth": "1.x",
|
||||||
|
"passport-oauth1": "^1.0.1",
|
||||||
|
"passport-oauth2-client-password": "0.1.x",
|
||||||
|
"passport-oauth2-resource-owner-password": "1.x",
|
||||||
|
"passport-strategy": "^1.0.0",
|
||||||
|
"passport-twitter": "1.x",
|
||||||
|
"pkginfo": "^0.3.0",
|
||||||
|
"qs": "^2.4.1",
|
||||||
|
"range-parser": "^1.0.2",
|
||||||
|
"recase": "1.x",
|
||||||
|
"request": "2.44.0",
|
||||||
|
"scmp": "1.x",
|
||||||
|
"secret-utils": "1.x",
|
||||||
|
"semver": "^4.3.1",
|
||||||
|
"send": "^0.12.2",
|
||||||
|
"serve-favicon": "2.x",
|
||||||
|
"serve-static": "1.x",
|
||||||
|
"sqlite3": "3.x",
|
||||||
|
"ssl-root-cas": "1.x",
|
||||||
|
"twilio": "1.x",
|
||||||
|
"type-is": "^1.6.1",
|
||||||
|
"underscore.string": "2.x",
|
||||||
|
"urlrouter": "0.5.x",
|
||||||
|
"urlsafe-base64": "1.x",
|
||||||
|
"useragent": "2.x",
|
||||||
|
"utils-merge": "^1.0.0",
|
||||||
|
"uuid": "2.x",
|
||||||
|
"validator": "3.x",
|
||||||
|
"vary": "^1.0.0",
|
||||||
|
"vhost": "3.x"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
102
serve.js
102
serve.js
|
@ -1,102 +0,0 @@
|
||||||
#!/usr/bin/env node
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var https = require('https')
|
|
||||||
, http = require('http')
|
|
||||||
, path = require('path')
|
|
||||||
, port = process.argv[2] || 65443
|
|
||||||
, insecurePort = process.argv[3] || 65080
|
|
||||||
, fs = require('fs')
|
|
||||||
, path = require('path')
|
|
||||||
, checkip = require('check-ip-address')
|
|
||||||
, server
|
|
||||||
, insecureServer
|
|
||||||
, options
|
|
||||||
, certsPath = path.join(__dirname, 'certs', 'server')
|
|
||||||
, caCertsPath = path.join(__dirname, 'certs', 'ca')
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// SSL Certificates
|
|
||||||
//
|
|
||||||
options = {
|
|
||||||
key: fs.readFileSync(path.join(certsPath, 'my-server.key.pem'))
|
|
||||||
, ca: [ fs.readFileSync(path.join(caCertsPath, 'my-root-ca.crt.pem')) ]
|
|
||||||
, cert: fs.readFileSync(path.join(certsPath, 'my-server.crt.pem'))
|
|
||||||
, requestCert: false
|
|
||||||
, rejectUnauthorized: false
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Serve an Express App securely with HTTPS
|
|
||||||
//
|
|
||||||
server = https.createServer(options);
|
|
||||||
checkip.getExternalIp().then(function (ip) {
|
|
||||||
var host = ip || 'local.helloworld3000.com'
|
|
||||||
;
|
|
||||||
|
|
||||||
function listen(app) {
|
|
||||||
server.on('request', app);
|
|
||||||
server.listen(port, function () {
|
|
||||||
port = server.address().port;
|
|
||||||
console.log('Listening on https://127.0.0.1:' + port);
|
|
||||||
console.log('Listening on https://local.helloworld3000.com:' + port);
|
|
||||||
if (ip) {
|
|
||||||
console.log('Listening on https://' + ip + ':' + port);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var publicDir = path.join(__dirname, 'public');
|
|
||||||
var app = require('./app').create(server, host, port, publicDir);
|
|
||||||
listen(app);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Redirect HTTP ot HTTPS
|
|
||||||
//
|
|
||||||
// This simply redirects from the current insecure location to the encrypted location
|
|
||||||
//
|
|
||||||
insecureServer = http.createServer();
|
|
||||||
insecureServer.on('request', function (req, res) {
|
|
||||||
var newLocation = 'https://'
|
|
||||||
+ req.headers.host.replace(/:\d+/, ':' + port) + req.url
|
|
||||||
;
|
|
||||||
|
|
||||||
var metaRedirect = ''
|
|
||||||
+ '<html>\n'
|
|
||||||
+ '<head>\n'
|
|
||||||
+ ' <style>* { background-color: white; color: white; text-decoration: none; }</style>\n'
|
|
||||||
+ ' <META http-equiv="refresh" content="0;URL=' + newLocation + '">\n'
|
|
||||||
+ '</head>\n'
|
|
||||||
+ '<body style="display: none;">\n'
|
|
||||||
+ ' <p>You requested an insecure resource. Please use this instead: \n'
|
|
||||||
+ ' <a href="' + newLocation + '">' + newLocation + '</a></p>\n'
|
|
||||||
+ '</body>\n'
|
|
||||||
+ '</html>\n'
|
|
||||||
;
|
|
||||||
|
|
||||||
// DO NOT HTTP REDIRECT
|
|
||||||
/*
|
|
||||||
res.setHeader('Location', newLocation);
|
|
||||||
res.statusCode = 302;
|
|
||||||
*/
|
|
||||||
|
|
||||||
// BAD NEWS BEARS
|
|
||||||
//
|
|
||||||
// When people are experimenting with the API and posting tutorials
|
|
||||||
// they'll use cURL and they'll forget to prefix with https://
|
|
||||||
// If we allow that, then many users will be sending private tokens
|
|
||||||
// and such with POSTs in clear text and, worse, it will work!
|
|
||||||
// To minimize this, we give browser users a mostly optimal experience,
|
|
||||||
// but people experimenting with the API get a message letting them know
|
|
||||||
// that they're doing it wrong and thus forces them to ensure they encrypt.
|
|
||||||
res.setHeader('Content-Type', 'text/html');
|
|
||||||
res.end(metaRedirect);
|
|
||||||
});
|
|
||||||
insecureServer.listen(insecurePort, function(){
|
|
||||||
console.log("\nRedirecting all http traffic to https\n");
|
|
||||||
});
|
|
Loading…
Reference in New Issue