1
+ import axios from 'axios'
1
2
import passport from 'passport'
2
3
import { Strategy , ExtractJwt } from 'passport-jwt'
3
4
import { Request , Response , NextFunction } from 'express'
@@ -28,14 +29,34 @@ const BAN_SAFE_ENDPOINTS = [
28
29
29
30
const fetchEndpoint = ( req : Request ) => `${ req . method } ${ req . baseUrl } ${ req . route . path } `
30
31
31
- export const authenticate = ( req : Request , res : Response , next : NextFunction ) =>
32
- passport . authenticate ( 'jwt' , { session : false } , async ( err , user : User ) => {
33
- if ( err ) return res . sendStatus ( 500 )
34
- if ( ! user ) return res . sendStatus ( 401 )
35
-
36
- const endpoint = fetchEndpoint ( req )
32
+ const fetchUser = async ( req : Request , res : Response , next : NextFunction ) => new Promise < User > ( async ( resolve , reject ) => {
33
+ try {
34
+ if ( process . env . AUTH_BASE_URL ) {
35
+ const { authorization } = req . headers ,
36
+ token = authorization . split ( ' ' ) [ 1 ] ,
37
+ { data } = await axios . post ( process . env . AUTH_BASE_URL , { token } ) ,
38
+ user = new User ( data )
39
+
40
+ resolve ( user )
41
+ } else {
42
+ passport . authenticate ( 'jwt' , { session : false } , async ( err , user : User ) => {
43
+ if ( err ) return res . sendStatus ( 500 )
44
+ if ( ! user ) return res . sendStatus ( 401 )
45
+
46
+ resolve ( user )
47
+ } ) ( req , res , next )
48
+ }
49
+ } catch ( error ) {
50
+ reject ( error )
51
+ }
52
+ } )
37
53
38
- const ban = await user . fetchBan ( )
54
+ export const authenticate = async ( req : Request , res : Response , next : NextFunction ) => {
55
+ try {
56
+ const user = await fetchUser ( req , res , next ) ,
57
+ endpoint = fetchEndpoint ( req ) ,
58
+ ban = await user . fetchBan ( )
59
+
39
60
if ( ban && BAN_SAFE_ENDPOINTS . indexOf ( endpoint ) > - 1 )
40
61
return handleError ( 'UserBanned' , res )
41
62
@@ -45,6 +66,9 @@ export const authenticate = (req: Request, res: Response, next: NextFunction) =>
45
66
req . user = user
46
67
47
68
next ( )
48
- } ) ( req , res , next )
69
+ } catch ( error ) {
70
+ handleError ( error , res )
71
+ }
72
+ }
49
73
50
74
export default passport
0 commit comments