From 6cfbe6003151f15a298a80043b8f72fccb61d602 Mon Sep 17 00:00:00 2001 From: Michelle Bu Date: Fri, 29 Aug 2014 02:06:20 -0400 Subject: [PATCH] Hack to fix #49 until we can move to express. --- lib/server.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/server.js b/lib/server.js index 68ec6aa..8b5ae47 100644 --- a/lib/server.js +++ b/lib/server.js @@ -192,6 +192,26 @@ PeerServer.prototype._initializeHTTP = function() { this._app.use(restify.queryParser()); this._app.use(util.allowCrossDomain); + /** Hack from https://github.com/mcavage/node-restify/issues/284, until we switch to express */ + function unknownMethodHandler(req, res) { + if (req.method.toLowerCase() === 'options') { + var allowHeaders = ['Accept', 'Accept-Version', 'Content-Type', 'Api-Version']; + + if (res.methods.indexOf('OPTIONS') === -1) res.methods.push('OPTIONS'); + + res.header('Access-Control-Allow-Credentials', true); + res.header('Access-Control-Allow-Headers', allowHeaders.join(', ')); + res.header('Access-Control-Allow-Methods', res.methods.join(', ')); + res.header('Access-Control-Allow-Origin', req.headers.origin); + + return res.send(204); + } else { + return res.send(new restify.MethodNotAllowedError()); + } + } + + this._app.on('MethodNotAllowed', unknownMethodHandler); + // Retrieve guaranteed random ID. this._app.get(this._options.path + ':key/id', function(req, res, next) { res.contentType = 'text/html';