Skip to content

Commit 94ccf86

Browse files
committed
refactor refresh-auth route
1 parent 6c86fd7 commit 94ccf86

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

packages/api/lib/controllers/usersController.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ const { InternalServerError, ForbiddenError } = require('restify-errors'),
55
{
66
checkContentType,
77
redactEmail,
8-
postToMattermost,
8+
postToMattermost
99
} = require('../helpers/apiUtils'),
1010
{ retrieveParameters } = require('../helpers/userParamHelpers'),
1111
handleError = require('../helpers/errorHandler'),
1212
{
1313
createToken,
1414
refreshJwt,
1515
invalidateToken,
16+
verifyJwtAndRefreshToken
1617
} = require('../helpers/jwtHelpers');
1718
const { findDeviceById } = require('@sensebox/opensensemap-api-models/src/box/box');
1819
const { findDevicesByUserId } = require('@sensebox/opensensemap-api-models/src/device');
@@ -149,6 +150,10 @@ const signIn = async function signIn (req, res) {
149150
*/
150151
const refreshJWT = async function refreshJWT (req, res) {
151152
try {
153+
// Check if refreshToken matches JWT Token
154+
await verifyJwtAndRefreshToken(req._userParams.token, req._jwtString);
155+
156+
// Now it´s time to refresh the JWT and invalidate the old one
152157
const { token, refreshToken, user } = await refreshJwt(
153158
req._userParams.token
154159
);

packages/api/lib/helpers/jwtHelpers.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,10 @@ const verifyJwt = function verifyJwt (req, res, next) {
8989
return next(new ForbiddenError(jwtInvalidErrorMessage));
9090
}
9191

92-
jwt.verify(jwtString, jwt_secret, jwtVerifyOptions, async function (err, decodedJwt) {
92+
jwt.verify(jwtString, jwt_secret, {
93+
...jwtVerifyOptions,
94+
ignoreExpiration: req.url === '/users/refresh-auth' ? true : false // ignore expiration for refresh endpoint
95+
}, async function (err, decodedJwt) {
9396
if (err) {
9497
return next(new ForbiddenError(jwtInvalidErrorMessage));
9598
}
@@ -118,9 +121,20 @@ const verifyJwt = function verifyJwt (req, res, next) {
118121
});
119122
};
120123

124+
const verifyJwtAndRefreshToken = async function verifyJwtAndRefreshToken (refreshToken, jwtString) {
125+
if (refreshToken !== hashJWT(jwtString)) {
126+
return Promise.reject(
127+
new ForbiddenError(
128+
'Refresh token invalid or too old. Please sign in with your username and password.'
129+
)
130+
);
131+
}
132+
};
133+
121134
module.exports = {
122135
createToken,
123136
invalidateToken,
124137
refreshJwt,
125-
verifyJwt
138+
verifyJwt,
139+
verifyJwtAndRefreshToken
126140
};

packages/api/lib/routes.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,10 @@ const routes = {
9393
{ path: `${usersPath}/request-password-reset`, method: 'post', handler: usersController.requestResetPassword, reference: 'api-Users-request-password-reset' },
9494
{ path: `${usersPath}/password-reset`, method: 'post', handler: usersController.resetPassword, reference: 'api-Users-password-reset' },
9595
{ path: `${usersPath}/confirm-email`, method: 'post', handler: usersController.confirmEmailAddress, reference: 'api-Users-confirm-email' },
96-
{ path: `${usersPath}/sign-in`, method: 'post', handler: usersController.signIn, reference: 'api-Users-sign-in' },
97-
{ path: `${usersPath}/refresh-auth`, method: 'post', handler: usersController.refreshJWT, reference: 'api-Users-refresh-auth' }
96+
{ path: `${usersPath}/sign-in`, method: 'post', handler: usersController.signIn, reference: 'api-Users-sign-in' }
9897
],
9998
'auth': [
99+
{ path: `${usersPath}/refresh-auth`, method: 'post', handler: usersController.refreshJWT, reference: 'api-Users-refresh-auth' },
100100
{ path: `${usersPath}/me`, method: 'get', handler: usersController.getUser, reference: 'api-Users-getUser' },
101101
{ path: `${usersPath}/me`, method: 'put', handler: usersController.updateUser, reference: 'api-Users-updateUser' },
102102
{ path: `${usersPath}/me/boxes`, method: 'get', handler: usersController.getUserBoxes, reference: 'api-Users-getUserBoxes' },

0 commit comments

Comments
 (0)