131 lines
4.0 KiB
JavaScript
131 lines
4.0 KiB
JavaScript
// Generated by CoffeeScript 1.8.0
|
|
var Channel, HttpChannelHandler, channelManager, handleCreate, handleError, handleGet, handleOptions, handlePost, setCORSHeaders, setCacheHeaders, utils, _;
|
|
|
|
_ = require('underscore');
|
|
|
|
utils = require('./utils');
|
|
|
|
Channel = require('./Channel');
|
|
|
|
channelManager = require('./channelManager');
|
|
|
|
module.exports = utils.registerClass(HttpChannelHandler = (function() {
|
|
function HttpChannelHandler(pathPrefix) {
|
|
this.pathPrefix = pathPrefix;
|
|
if (this.pathPrefix === '/ws/client') {
|
|
this.isClient = true;
|
|
} else if (this.pathPrefix === '/ws/target') {
|
|
this.isClient = false;
|
|
} else {
|
|
utils.pitch("invalid pathPrefix: " + this.pathPrefix);
|
|
}
|
|
this.isTarget = !this.isClient;
|
|
}
|
|
|
|
HttpChannelHandler.prototype.handle = function(request, response, uri) {
|
|
var channelName, parts;
|
|
setCORSHeaders(request, response);
|
|
setCacheHeaders(request, response);
|
|
if (uri[0] !== '/') {
|
|
return handleError(request, response, 404);
|
|
}
|
|
if (uri === '/') {
|
|
if (request.method === 'OPTIONS') {
|
|
return handleOptions(request, response);
|
|
}
|
|
if (request.method === 'POST') {
|
|
return handleCreate(this.pathPrefix, this.isClient, request, response);
|
|
}
|
|
return handleError(request, response, 405);
|
|
}
|
|
parts = uri.split('/');
|
|
if (parts.length > 2) {
|
|
return handleError(request, response, 404);
|
|
}
|
|
channelName = parts[1];
|
|
if (request.method === 'OPTIONS') {
|
|
return handleOptions(request, response);
|
|
}
|
|
if (request.method === 'GET') {
|
|
return handleGet(request, response, channelName);
|
|
}
|
|
if (request.method === 'POST') {
|
|
return handlePost(request, response, channelName);
|
|
}
|
|
return handleError(request, response, 405);
|
|
};
|
|
|
|
return HttpChannelHandler;
|
|
|
|
})());
|
|
|
|
handleCreate = function(pathPrefix, isClient, request, response) {
|
|
var channel, id, remoteAddress, _ref, _ref1;
|
|
id = (_ref = request.body) != null ? _ref.id : void 0;
|
|
remoteAddress = ((_ref1 = request.connection) != null ? _ref1.remoteAddress : void 0) || "";
|
|
channel = new Channel(pathPrefix, id, remoteAddress, isClient);
|
|
response.contentType('application/json');
|
|
return response.send(JSON.stringify({
|
|
channel: channel.name,
|
|
id: channel.id
|
|
}));
|
|
};
|
|
|
|
handleGet = function(request, response, channelName) {
|
|
var channel, remoteAddress, _ref;
|
|
remoteAddress = ((_ref = request.connection) != null ? _ref.remoteAddress : void 0) || "";
|
|
channel = channelManager.getChannel(channelName, remoteAddress);
|
|
if (!channel) {
|
|
return handleError(request, response, 404);
|
|
}
|
|
return channel.getMessages((function(_this) {
|
|
return function(messages) {
|
|
if (channel.isClosed) {
|
|
return handleError(request, response, 404);
|
|
}
|
|
if (!messages) {
|
|
return handleError(request, response, 404);
|
|
}
|
|
response.contentType('application/json');
|
|
return response.send(JSON.stringify(messages));
|
|
};
|
|
})(this));
|
|
};
|
|
|
|
handlePost = function(request, response, channelName) {
|
|
var channel, remoteAddress, _ref;
|
|
remoteAddress = ((_ref = request.connection) != null ? _ref.remoteAddress : void 0) || "";
|
|
channel = channelManager.getChannel(channelName, remoteAddress);
|
|
if (!channel) {
|
|
return handleError(request, response, 404);
|
|
}
|
|
channel.handleMessages(request.body);
|
|
return response.send('');
|
|
};
|
|
|
|
handleOptions = function(request, response) {
|
|
return response.send('');
|
|
};
|
|
|
|
handleError = function(request, response, status) {
|
|
return response.send(status);
|
|
};
|
|
|
|
setCORSHeaders = function(request, response) {
|
|
var origin;
|
|
origin = request.header('Origin');
|
|
if (!origin) {
|
|
return;
|
|
}
|
|
response.header('Access-Control-Allow-Origin', origin);
|
|
response.header('Access-Control-Max-Age', '600');
|
|
return response.header('Access-Control-Allow-Methods', 'GET, POST');
|
|
};
|
|
|
|
setCacheHeaders = function(request, response) {
|
|
response.header('Pragma', 'no-cache');
|
|
response.header('Expires', '0');
|
|
response.header('Cache-Control', 'no-cache');
|
|
return response.header('Cache-Control', 'no-store');
|
|
};
|