add max_notification_timestamp

This commit is contained in:
Matias Alejo Garcia 2016-08-24 08:50:26 -03:00
parent f4c4f4a5d1
commit 56ef081c4d
No known key found for this signature in database
GPG Key ID: 02470DB551277AB3
3 changed files with 24 additions and 6 deletions

View File

@ -83,4 +83,9 @@ Defaults.HISTORY_CACHE_ADDRESS_THRESOLD = 100;
// Cache time for blockchain height (in seconds) // Cache time for blockchain height (in seconds)
Defaults.BLOCKHEIGHT_CACHE_TIME = 10 * 60; Defaults.BLOCKHEIGHT_CACHE_TIME = 10 * 60;
// Max allowed timespan for notification queries in seconds
Defaults.MAX_NOTIFICATIONS_TIMESPAN = 60 * 60 * 24 * 14 ; // ~ 2 weeks
Defaults.NOTIFICATIONS_TIMESPAN = 60;
module.exports = Defaults; module.exports = Defaults;

View File

@ -8,6 +8,9 @@ var express = require('express');
var bodyParser = require('body-parser'); var bodyParser = require('body-parser');
var compression = require('compression'); var compression = require('compression');
var Common = require('./common');
var Defaults = Common.Defaults;
var WalletService = require('./server'); var WalletService = require('./server');
var Stats = require('./stats'); var Stats = require('./stats');
@ -551,11 +554,14 @@ ExpressApp.prototype.start = function(opts, cb) {
router.get('/v1/notifications/', function(req, res) { router.get('/v1/notifications/', function(req, res) {
getServerWithAuth(req, res, function(server) { getServerWithAuth(req, res, function(server) {
var timeSpan = req.query.timeSpan ? Math.min(+req.query.timeSpan || 0, 60) : 60; var timeSpan = req.query.timeSpan ? Math.min(+req.query.timeSpan || 0, Defaults.MAX_NOTIFICATIONS_TIMESPAN) : Defaults.NOTIFICATIONS_TIMESPAN;
var opts = { var opts = {
minTs: +Date.now() - (timeSpan * 1000), minTs: +Date.now() - (timeSpan * 1000),
notificationId: req.query.notificationId, notificationId: req.query.notificationId,
}; };
server.getNotifications(opts, function(err, notifications) { server.getNotifications(opts, function(err, notifications) {
if (err) return returnError(err, res, req); if (err) return returnError(err, res, req);
res.json(notifications); res.json(notifications);

View File

@ -8,6 +8,11 @@ var should = chai.should();
var proxyquire = require('proxyquire'); var proxyquire = require('proxyquire');
var config = require('../config.js'); var config = require('../config.js');
var Common = require('../lib/common');
var Defaults = Common.Defaults;
describe('ExpressApp', function() { describe('ExpressApp', function() {
describe('#constructor', function() { describe('#constructor', function() {
it('will set an express app', function() { it('will set an express app', function() {
@ -186,7 +191,7 @@ describe('ExpressApp', function() {
describe('/v1/notifications', function(done) { describe('/v1/notifications', function(done) {
var server, TestExpressApp, clock; var server, TestExpressApp, clock;
beforeEach(function() { beforeEach(function() {
clock = sinon.useFakeTimers(1234000, 'Date'); clock = sinon.useFakeTimers(2000000000, 'Date');
server = { server = {
getNotifications: sinon.stub().callsArgWith(1, null, {}) getNotifications: sinon.stub().callsArgWith(1, null, {})
@ -217,7 +222,7 @@ describe('ExpressApp', function() {
body.should.equal('{}'); body.should.equal('{}');
server.getNotifications.calledWith({ server.getNotifications.calledWith({
notificationId: '123', notificationId: '123',
minTs: +Date.now() - 60000, minTs: +Date.now() - Defaults.NOTIFICATIONS_TIMESPAN * 1000,
}).should.be.true; }).should.be.true;
done(); done();
}); });
@ -243,10 +248,11 @@ describe('ExpressApp', function() {
}); });
}); });
}); });
it('should limit minTs to 60 seconds', function(done) { it('should limit minTs to Defaults.MAX_NOTIFICATIONS_TIMESPAN', function(done) {
start(TestExpressApp, function() { start(TestExpressApp, function() {
var overLimit = Defaults.MAX_NOTIFICATIONS_TIMESPAN * 2;
var requestOptions = { var requestOptions = {
url: testHost + ':' + testPort + config.basePath + '/v1/notifications' + '?timeSpan=90', url: testHost + ':' + testPort + config.basePath + '/v1/notifications' + '?timeSpan=' + overLimit ,
headers: { headers: {
'x-identity': 'identity', 'x-identity': 'identity',
'x-signature': 'signature' 'x-signature': 'signature'
@ -256,9 +262,10 @@ describe('ExpressApp', function() {
should.not.exist(err); should.not.exist(err);
res.statusCode.should.equal(200); res.statusCode.should.equal(200);
body.should.equal('{}'); body.should.equal('{}');
server.getNotifications.calledWith({ server.getNotifications.calledWith({
notificationId: undefined, notificationId: undefined,
minTs: Date.now() - 60000, // override minTs argument with a hardcoded 60 seconds span minTs: Date.now() - Defaults.MAX_NOTIFICATIONS_TIMESPAN * 1000, // override minTs argument
}).should.be.true; }).should.be.true;
done(); done();
}); });