Commit c409aca0 authored by John Crepezzi's avatar John Crepezzi
Browse files

Add support for HEAD requests

On regular document endpoints, and on raw endpoints
parent 21942455
Loading
Loading
Loading
Loading
+28 −6
Original line number Diff line number Diff line
@@ -16,34 +16,56 @@ var DocumentHandler = function(options) {
DocumentHandler.defaultKeyLength = 10;

// Handle retrieving a document
DocumentHandler.prototype.handleGet = function(key, response, skipExpire) {
DocumentHandler.prototype.handleGet = function(request, response, config) {
  const key = request.params.id.split('.')[0];
  const skipExpire = !!config.documents[key];

  this.store.get(key, function(ret) {
    if (ret) {
      winston.verbose('retrieved document', { key: key });
      response.writeHead(200, { 'content-type': 'application/json' });
      if (request.method === 'HEAD') {
        response.end();
      } else {
        response.end(JSON.stringify({ data: ret, key: key }));
      }
    }
    else {
      winston.warn('document not found', { key: key });
      response.writeHead(404, { 'content-type': 'application/json' });
      if (request.method === 'HEAD') {
        response.end();
      } else {
        response.end(JSON.stringify({ message: 'Document not found.' }));
      }
    }
  }, skipExpire);
};

// Handle retrieving the raw version of a document
DocumentHandler.prototype.handleRawGet = function(key, response, skipExpire) {
DocumentHandler.prototype.handleRawGet = function(request, response, config) {
  const key = request.params.id.split('.')[0];
  const skipExpire = !!config.documents[key];

  this.store.get(key, function(ret) {
    if (ret) {
      winston.verbose('retrieved raw document', { key: key });
      response.writeHead(200, { 'content-type': 'text/plain; charset=UTF-8' });
      if (request.method === 'HEAD') {
        response.end();
      } else {
        response.end(ret);
      }
    }
    else {
      winston.warn('raw document not found', { key: key });
      response.writeHead(404, { 'content-type': 'application/json' });
      if (request.method === 'HEAD') {
        response.end();
      } else {
        response.end(JSON.stringify({ message: 'Document not found.' }));
      }
    }
  }, skipExpire);
};

+14 −6
Original line number Diff line number Diff line
@@ -109,20 +109,28 @@ if (config.rateLimits) {
// first look at API calls
app.use(route(function(router) {
  // get raw documents - support getting with extension

  router.get('/raw/:id', function(request, response) {
    var key = request.params.id.split('.')[0];
    var skipExpire = !!config.documents[key];
    return documentHandler.handleRawGet(key, response, skipExpire);
    return documentHandler.handleRawGet(request, response, config);
  });

  router.head('/raw/:id', function(request, response) {
    return documentHandler.handleRawGet(request, response, config);
  });

  // add documents

  router.post('/documents', function(request, response) {
    return documentHandler.handlePost(request, response);
  });

  // get documents
  router.get('/documents/:id', function(request, response) {
    var key = request.params.id.split('.')[0];
    var skipExpire = !!config.documents[key];
    return documentHandler.handleGet(key, response, skipExpire);
    return documentHandler.handleGet(request, response, config);
  });

  router.head('/documents/:id', function(request, response) {
    return documentHandler.handleGet(request, response, config);
  });
}));