Skip to content

Commit

Permalink
Adds the If-Modified-Since header parsing to api/v1/enties/:spec: cal…
Browse files Browse the repository at this point in the history
  • Loading branch information
sulkaharo committed May 18, 2018
1 parent 57beae5 commit a354405
Showing 1 changed file with 37 additions and 1 deletion.
38 changes: 37 additions & 1 deletion lib/api/entries/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,11 @@ function configure (app, wares, ctx) {
res.setHeader('Last-Modified', lastEntryDate.toUTCString());
}

var ifModifiedSince = req.get('If-Modified-Since');
var ifModifiedSince = req.get('If-Modified-Since');
if (!ifModifiedSince) { return next(); }

console.log("CGM Entry request with If-Modified-Since: ", ifModifiedSince);

if (lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) {
res.status(304).send({status:304, message: 'Not modified', type:'internal'});
return;
Expand Down Expand Up @@ -114,6 +116,40 @@ function configure (app, wares, ctx) {
if (res.entries_err) {
return res.sendJSONStatus(res, consts.HTTP_INTERNAL_ERROR, 'Mongo Error', res.entries_err);
}

// IF-Modified-Since support

function compare(a,b) {
var a_field = a.mills ? a.mills : a.date;
var b_field = b.mills ? b.mills : b.date;

if (a_field < b_field)
return -1;
if (a_field > b_field)
return 1;
return 0;
}

res.entries.sort(compare);

var lastEntry = _.last(res.entries);
var lastEntryDate = null;

if (!_.isNil(lastEntry)) {
if (lastEntry.mills) lastEntryDate = new Date(lastEntry.mills);
if (!lastEntry.mills && lastEntry.date ) lastEntryDate = new Date(lastEntry.date);
res.setHeader('Last-Modified', lastEntryDate.toUTCString());
}

var ifModifiedSince = req.get('If-Modified-Since');

console.log('If-Modified-Since: ' + new Date(ifModifiedSince) + ' Last-Modified', lastEntryDate);

if (lastEntryDate !== null && ifModifiedSince !== null && lastEntryDate.getTime() <= new Date(ifModifiedSince).getTime()) {
res.status(304).send({status:304, message: 'Not modified', type:'internal'});
return;
}

// if no error, format the payload
// The general pattern here is to create an output stream that reformats
// the data correctly into the desired representation.
Expand Down

0 comments on commit a354405

Please sign in to comment.