| // 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'); |
| }; |