Aside from a few external process calls there are now zero external dependencies required as part of the node.js boot process. Yay!
81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
module.exports.create = function () {
|
|
var PromiseA = require('bluebird');
|
|
var express = require('connect');
|
|
|
|
var app = express();
|
|
var promise;
|
|
|
|
promise = new PromiseA(function (resolve) {
|
|
var path = require('path');
|
|
var serveStatic;
|
|
var serveInitStatic;
|
|
var jsonParser;
|
|
//var rootMasterKey;
|
|
|
|
app.use(function (req, res, next) {
|
|
res.setHeader('Connection', 'close');
|
|
next();
|
|
});
|
|
|
|
app.use('/api/unlock-device', function (req, res, next) {
|
|
console.log('[unlock-device]');
|
|
if (!jsonParser) {
|
|
jsonParser = require('body-parser').json({
|
|
strict: true // only objects and arrays
|
|
, inflate: true
|
|
, limit: 100 * 1024
|
|
, reviver: undefined
|
|
, type: 'json'
|
|
, verify: undefined
|
|
});
|
|
}
|
|
|
|
jsonParser(req, res, function (err) {
|
|
if (err) {
|
|
console.log('[unlock-device] err', err, err.stack);
|
|
next(err);
|
|
return;
|
|
}
|
|
|
|
console.log('[unlock-device] with root');
|
|
resolve("ROOT MASTER KEY");
|
|
//setRootMasterKey();
|
|
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
res.setHeader('Location', '/');
|
|
res.statusCode = 302;
|
|
res.end(JSON.stringify({ success: true }));
|
|
});
|
|
});
|
|
|
|
app.use('/api', function (req, res) {
|
|
res.setHeader('Content-Type', 'application/json; charset=utf-8');
|
|
res.statusCode = 200;
|
|
res.end(JSON.stringify({
|
|
error: {
|
|
message: "This device is locked. It must be unlocked with its encryption key at /unlock-device"
|
|
, code: 'E_DEVICE_LOCKED'
|
|
, uri: '/unlock-device' }
|
|
}
|
|
));
|
|
});
|
|
|
|
// TODO break application cache?
|
|
// TODO serve public sites?
|
|
app.use('/', function (req, res, next) {
|
|
if (!serveInitStatic) {
|
|
serveStatic = require('serve-static');
|
|
serveInitStatic = serveStatic(path.join(__dirname, '..', 'init.public'));
|
|
}
|
|
|
|
serveInitStatic(req, res, next);
|
|
});
|
|
});
|
|
|
|
return PromiseA.resolve({
|
|
app: app
|
|
, promise: promise
|
|
});
|
|
};
|