@@ -15,29 +15,45 @@ const limiter = (limit, windowMs, message) =>
1515 legacyHeaders : false ,
1616 } ) ;
1717
18- const validateSession = async ( req , res , next ) => {
18+ const handlerValidateSession = async ( req ) => {
19+ let decodedAccessToken = null ;
20+ let accessToken = null ;
21+
1922 try {
20- const accessToken = req . cookies ?. accessToken ;
21- if ( ! accessToken ) throw Boom . unauthorized ( 'Access token was not provided' ) ;
23+ if ( req . cookies . accessToken ) {
24+ accessToken = req . cookies . accessToken ;
25+ } else if ( req . headers . authorization ) {
26+ const authHeader = req . headers . authorization ;
27+ if ( authHeader . startsWith ( 'Bearer ' ) ) {
28+ [ , accessToken ] = authHeader . split ( ' ' ) ;
29+ } else {
30+ throw Boom . unauthorized ( 'Invalid authorization header format' ) ;
31+ }
32+ }
2233
23- let decodedAccessToken = null ;
34+ decodedAccessToken = jwt . verify ( accessToken , config . jwtAccessSecret ) ;
35+ } catch ( error ) {
36+ throw Boom . badRequest ( `Error verifying the accessToken: ${ error . message } ` ) ;
37+ }
2438
25- try {
26- decodedAccessToken = jwt . verify ( accessToken , config . jwtAccessSecret ) ;
27- } catch ( error ) {
28- throw Boom . badRequest (
29- `Error verifying the accessToken: ${ error . message } ` ,
30- ) ;
31- }
39+ if ( ! decodedAccessToken ?. sub ) {
40+ throw Boom . unauthorized ( 'Access token has expired' ) ;
41+ }
3242
33- if ( ! decodedAccessToken ?. sub )
34- throw Boom . unauthorized ( 'Access token has expired' ) ;
43+ const user = await userRepository . findOneToValidateSession (
44+ decodedAccessToken . sub ,
45+ accessToken ,
46+ ) ;
3547
36- const user = await userRepository . findOneToValidateSession (
37- decodedAccessToken . sub ,
38- accessToken ,
39- ) ;
40- if ( ! user ?. id ) throw Boom . unauthorized ( 'Invalid access token' ) ;
48+ if ( ! user ?. id ) throw Boom . unauthorized ( 'Invalid access token' ) ;
49+
50+ return { user, decodedAccessToken, accessToken } ;
51+ } ;
52+
53+ const validateSession = async ( req , res , next ) => {
54+ try {
55+ const { decodedAccessToken, accessToken } =
56+ await handlerValidateSession ( req ) ;
4157
4258 req . user = decodedAccessToken ;
4359 req . tokens = { accessToken } ;
@@ -47,4 +63,13 @@ const validateSession = async (req, res, next) => {
4763 }
4864} ;
4965
50- module . exports = { validateSession, limiter } ;
66+ const validateGraphQLSession = async ( req ) => {
67+ try {
68+ const { user } = await handlerValidateSession ( req ) ;
69+ return user ;
70+ } catch ( error ) {
71+ throw Boom . unauthorized ( 'GraphQL session validation failed' ) ;
72+ }
73+ } ;
74+
75+ module . exports = { validateSession, limiter, validateGraphQLSession } ;
0 commit comments