rkeys
Version:
A platform for creating tablet/HTML5 virtual-keyboard apps to send keystrokes to remote X11
146 lines (145 loc) • 4.4 kB
JavaScript
// Generated by LiveScript 1.3.0
(function(){
var Args, Bify, ErrHan, Express, Fs, Http, Https, Lsify, Morgan, Nib, Path, Shell, Stylus, join$ = [].join;
require('./log');
if ((Args = require('./args')).genSslCert) {
return require('./gen-ssl-cert')();
}
Bify = require('browserify');
ErrHan = require('errorhandler');
Express = require('express');
Fs = require('fs');
Http = require('http');
Https = require('https');
Lsify = require('lsify');
Morgan = require('morgan');
Nib = require('nib');
Path = require('path');
Shell = require('shelljs/global');
Stylus = require('stylus');
require('./io/x11/boot')(function(err){
var ApiHttp, ApiWs, dirs, DIRUI, x$, express, i$, ref$, len$, d, y$;
if (err) {
return log(err);
}
ApiHttp = require('./io/api/http');
ApiWs = require('./io/api/ws');
log("dirs: " + join$.call(Args.dirs, ' '));
dirs = Args.dirs.concat(DIRUI = __dirname + "/ui");
if (process.env.NODE_ENV === 'development') {
dirs = dirs.concat(__dirname);
}
x$ = express = Express();
x$.set('port', Args.port);
x$.use(Morgan('dev'));
x$.set('view engine', 'jade');
x$.set('views', dirs);
x$.get(/^\/([_A-Za-z\-\/]+)$/, function(req, res){
return res.render(req.params[0]);
});
for (i$ = 0, len$ = (ref$ = Args.dirs).length; i$ < len$; ++i$) {
d = ref$[i$];
express.use(Express['static'](d));
}
express.use(Express['static'](DIRUI));
for (i$ = 0, len$ = (ref$ = Args.dirs).length; i$ < len$; ++i$) {
d = ref$[i$];
useLivescript(d);
useStylus(d);
}
useStylus(DIRUI);
y$ = express;
y$.use(ErrHan());
y$.locals.basedir = DIRUI;
startHttp(function(err, s0){
if (err) {
return log(err);
}
return startHttps(function(err, s1){
if (err) {
return log(err);
}
ApiHttp.init(express);
return ApiWs.init([s0, s1]);
});
});
function startHttp(cb){
var s, p;
s = Http.createServer(express);
return s.listen(p = Args.port, function(err){
if (!err) {
log0("Express http server listening on port " + p);
}
return cb(err, s);
});
}
function startHttps(cb){
var keys, d, certs, keyPath, certPath, key, cert, s, p;
keys = ls((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = Args.dirs).length; i$ < len$; ++i$) {
d = ref$[i$];
results$.push(Path.join(d, '/*key.pem'));
}
return results$;
}()));
certs = ls((function(){
var i$, ref$, len$, results$ = [];
for (i$ = 0, len$ = (ref$ = Args.dirs).length; i$ < len$; ++i$) {
d = ref$[i$];
results$.push(Path.join(d, '/*cert.pem'));
}
return results$;
}()));
if (!(keys.length && certs.length)) {
return cb();
}
log("found ssl key " + (keyPath = keys[0]));
log("found ssl cert " + (certPath = certs[0]));
key = Fs.readFileSync(keyPath);
cert = Fs.readFileSync(certPath);
s = Https.createServer({
key: key,
cert: cert
}, express);
return s.listen(p = Args.portSsl, function(err){
if (!err) {
log0("Express https server listening on port " + p);
}
return cb(err, s);
});
}
function useLivescript(dir){
return express.use("*.js", function(req, res, next){
var lspath, b;
lspath = Path.resolve(Path.join(dir, req.params[0] + ".ls"));
if (!test('-e', lspath)) {
return next();
}
b = Bify(lspath, {
basedir: dir,
paths: [DIRUI]
});
log("compile " + lspath);
return b.transform(Lsify).bundle(function(err, buf){
if (err) {
return next(err);
}
return res.send(buf.toString());
});
});
}
function useStylus(dir){
var dirCss;
express.use(Stylus.middleware({
src: dir,
dest: dirCss = "/tmp/rkeys/" + dir + "/css",
compile: function(str, path){
return Stylus(str).set('filename', path).set('paths', [dir, DIRUI]).use(Nib());
}
}));
return express.use(Express['static'](dirCss));
}
return useStylus;
});
}).call(this);