add max_notification_timestamp
This commit is contained in:
parent
f4c4f4a5d1
commit
56ef081c4d
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue