UNPKG

the-shepherd

Version:

Control a herd of wild processes.

156 lines (138 loc) 3.9 kB
// Generated by CoffeeScript 1.8.0 (function() { var $, BasicAuth, Express, Helpers, Http, Opts, app, basicAuth, http_password, http_username, log, method, plain, server, _fn, _i, _len, _ref, _ref1, _ref2; $ = require('bling'); Express = require('express'); BasicAuth = require("basic-auth"); Http = require('http'); Helpers = require('./helpers'); Opts = require("./opts"); log = $.logger("[http]"); app = Express(); http_username = (_ref = Opts.username) != null ? _ref : "demo"; http_password = (_ref1 = Opts.password) != null ? _ref1 : "demo"; plain = function(next) { return basicAuth(http_username, http_password, function(req, res) { res.contentType = "text/plain"; res.send = function(status, content, enc) { var err; if (enc == null) { enc = "utf8"; } res.statusCode = status; try { return res.end(content, enc); } catch (_error) { err = _error; res.statusCode = 500; return res.end(String(err), enc); } }; res.pass = function(content) { return res.send(200, (function() { switch ($.type(content)) { case "string": case "buffer": return content; case "object": case "array": case "bling": return JSON.stringify(content, null, " "); default: return $.toRepr(content); } })()); }; res.fail = function(err) { return res.send(500, (function() { switch ($.type(err)) { case "error": return err.stack; case "string": case "buffer": return err; case "object": case "array": case "bling": return JSON.stringify(err); default: return $.toRepr(content); } })()); }; return next(req, res); }); }; basicAuth = function(user, pass, next) { return function(req, res) { var credentials; credentials = BasicAuth(req); if (!((credentials != null) && credentials.name === user && credentials.pass === pass)) { res.writeHead(401, { "WWW-Authenticate": 'Basic realm="shepherd"' }); return res.end(); } else { return next(req, res); } }; }; $.subscribe('http-route', function(method, path, handler) { method = method.toLowerCase(); if (Opts.verbose) { log("adding published route:", method, path); } return app[method].call(app, path, plain(handler)); }); server = Http.createServer(app); $.extend(module.exports, { listen: function(port) { var p, _err; try { return p = $.Promise(); } finally { try { server.listen(port, function(err) { if (err) { return p.reject(err); } else { return p.resolve(port); } }); } catch (_error) { _err = _error; p.reject(_err); } } }, close: function() { var p, _err; try { return p = $.Promise(); } finally { try { server.close(function(err) { if (err) { return p.reject(err); } else { return p.resolve(); } }); } catch (_error) { _err = _error; p.reject(_err); } } } }); _ref2 = ["get", "put", "post", "delete"]; _fn = function(method) { return module.exports[method] = function(path, handler) { return $.publish("http-route", method, path, handler); }; }; for (_i = 0, _len = _ref2.length; _i < _len; _i++) { method = _ref2[_i]; _fn(method); } }).call(this);