diff --git a/lib/document_handler.js b/lib/document_handler.js index 0ecc773..2f993ec 100644 --- a/lib/document_handler.js +++ b/lib/document_handler.js @@ -15,12 +15,23 @@ var DocumentHandler = function(options) { DocumentHandler.defaultKeyLength = 10; // Handle retrieving a document -DocumentHandler.prototype.handleGet = function(key, response, skipExpire) { +DocumentHandler.prototype.handleGet = function(key, callback, response, skipExpire) { this.store.get(key, function(ret) { if (ret) { winston.verbose('retrieved document', { key: key }); - response.writeHead(200, { 'content-type': 'application/json' }); - response.end(JSON.stringify({ data: ret, key: key })); + var responseData = JSON.stringify({ data: ret, key: key }); + if (callback) { + if (callback.match(/^[a-z0-9]+$/i)) { + response.writeHead(200, { 'content-type': 'application/javascript' }); + response.end(callback + '(' + responseData + ');'); + } else { + response.writeHead(400, { 'content-type': 'application/json' }); + response.end(JSON.stringify({ message: 'invalid callback function name' })); + } + } else { + response.writeHead(200, { 'content-type': 'application/json' }); + response.end(responseData); + } } else { winston.warn('document not found', { key: key }); diff --git a/server.js b/server.js index aaf1583..08974f3 100644 --- a/server.js +++ b/server.js @@ -116,8 +116,10 @@ connect.createServer( // get documents app.get('/documents/:id', function(request, response, next) { var skipExpire = !!config.documents[request.params.id]; + var parsedUrl = url.parse(request.url, true); return documentHandler.handleGet( request.params.id, + parsedUrl.query.callback, response, skipExpire );