Skip to content

Commit

Permalink
use unique tokens middleware and report metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
Oleksii Khomchenko committed Oct 28, 2016
1 parent 0a132c6 commit 9347997
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
1 change: 1 addition & 0 deletions server/src/middleware/oauth.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ module.exports = function(req, res, next) {
access_token: token
})
.then(tokeninfo => {
req.tokeninfo = tokeninfo.body;
if (tokeninfo.body.realm === '/employees' ||
tokeninfo.body.realm === '/services') {
return next();
Expand Down
27 changes: 26 additions & 1 deletion server/src/yourturn.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,14 @@ require('./env');
var fs = require('fs'),
express = require('express'),
compression = require('compression'),
moment = require('moment'),
server = express(),
routes = require('./routes/index'),
oauth = require('./middleware/oauth'),
uniqueTokens = require('./middleware/unique-tokens'),
redis = require('./redis'),
stores = require('./data/stores/distinct'),
metrics = require('./metrics'),
index = fs.readFileSync('./index.html'),
ONE_WEEK = 1000 * // 1s
60 * // 1m
Expand All @@ -44,15 +49,35 @@ server.use(function(req, res, next) {
next();
});

const inMemoryStore = stores.inMemoryStore({
keyExpiration: moment.duration(1, 'day')
});
const redisStore = stores.redisStore({
redis,
key: 'unique-tokens'
});
const store = stores.storeWithFallback(redisStore, inMemoryStore);
const report = metrics.report({
providers: {
'count.unique.tokens': () => store.size,
'count.inmemory.tokens': () => inMemoryStore.size
}
});

// EXPRESS ROUTES BELOW
server.get('/accounts/?', routes.team.accounts);
server.get('/teams/?', routes.team.teams);
server.get('/teams/:teamId', routes.team.team);
server.get('/users/:userId', routes.user.detail);
server.get('/users/:userId/teams', routes.user.teams)
server.get('/users/:userId/accounts', routes.user.accounts);
server.get('/latestVersions/:team', oauth, routes.kio.latestVersions);
server.get('/latestVersions/:team', oauth, uniqueTokens(store), routes.kio.latestVersions);
server.get('/tokeninfo', routes.tokeninfo.info);
server.get('/metrics', (req, res) => {
report.generate().then(report => {
res.json(report);
});
});
// default route just responds with index.html
server.get('/*', function(req, res) {
res
Expand Down

0 comments on commit 9347997

Please sign in to comment.