forked from coolaj86/walnut.js
		
	
		
			
	
	
		
			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
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								};
							 |