@@ -4,43 +4,33 @@ import { ProtectedRequest } from 'app-request';
4
4
import { Types } from 'mongoose' ;
5
5
import UserRepo from '../../../database/repository/UserRepo' ;
6
6
import { AuthFailureError , } from '../../../core/ApiError' ;
7
- import JWT , { ValidationParams } from '../../../core/JWT' ;
7
+ import JWT from '../../../core/JWT' ;
8
8
import KeystoreRepo from '../../../database/repository/KeystoreRepo' ;
9
9
import crypto from 'crypto' ;
10
- import { validateTokenData , createTokens } from '../../../auth/authUtils' ;
10
+ import { validateTokenData , createTokens , getAccessToken } from '../../../auth/authUtils' ;
11
11
import validator , { ValidationSource } from '../../../helpers/validator' ;
12
12
import schema from './schema' ;
13
13
import asyncHandler from '../../../helpers/asyncHandler' ;
14
- import { tokenInfo } from '../../../config' ;
15
14
16
15
const router = express . Router ( ) ;
17
16
18
17
router . post ( '/refresh' ,
19
18
validator ( schema . auth , ValidationSource . HEADER ) , validator ( schema . refreshToken ) ,
20
19
asyncHandler ( async ( req : ProtectedRequest , res , next ) => {
21
- req . accessToken = req . headers [ 'x-access-token' ] . toString ( ) ;
20
+ req . accessToken = getAccessToken ( req . headers . authorization ) ; // Express headers are auto converted to lowercase
22
21
23
- const user = await UserRepo . findById ( new Types . ObjectId ( req . headers [ 'x-user-id' ] . toString ( ) ) ) ;
22
+ const accessTokenPayload = await JWT . decode ( req . accessToken ) ;
23
+ validateTokenData ( accessTokenPayload ) ;
24
+
25
+ const user = await UserRepo . findById ( new Types . ObjectId ( accessTokenPayload . sub ) ) ;
24
26
if ( ! user ) throw new AuthFailureError ( 'User not registered' ) ;
25
27
req . user = user ;
26
28
27
- const accessTokenPayload = await validateTokenData (
28
- await JWT . decode ( req . accessToken ,
29
- new ValidationParams (
30
- tokenInfo . issuer ,
31
- tokenInfo . audience ,
32
- req . user . _id . toHexString ( ) ) ) ,
33
- req . user . _id
34
- ) ;
29
+ const refreshTokenPayload = await JWT . validate ( req . body . refreshToken ) ;
30
+ validateTokenData ( refreshTokenPayload ) ;
35
31
36
- const refreshTokenPayload = await validateTokenData (
37
- await JWT . validate ( req . body . refreshToken ,
38
- new ValidationParams (
39
- tokenInfo . issuer ,
40
- tokenInfo . audience ,
41
- req . user . _id . toHexString ( ) ) ) ,
42
- req . user . _id
43
- ) ;
32
+ if ( accessTokenPayload . sub !== refreshTokenPayload . sub )
33
+ throw new AuthFailureError ( 'Invalid access token' ) ;
44
34
45
35
const keystore = await KeystoreRepo . find (
46
36
req . user . _id ,
0 commit comments