@@ -6,66 +6,66 @@ import jwt from "jsonwebtoken";
66import { JWT_Access_Token } from "../Config" ;
77import Logger from "../Lib/Logger" ;
88
9- export default function EnsureAdmin ( req : Request , res : Response , next : NextFunction )
9+ export default function EnsureAdmin ( eR = false )
1010{
11- const authHeader = req . headers [ 'authorization' ] ;
12- if ( ! authHeader )
13- return APIError ( "Missing 'authorization' in header" ) ( res ) ;
14-
15- const b64auth = ( authHeader ) . split ( ' ' ) ;
16-
17- if ( ! b64auth [ 0 ] . toLocaleLowerCase ( ) . match ( / b a s i c | b e a r e r / g) )
18- return APIError ( "Missing 'basic' or 'bearer' in authorization" ) ( res ) ;
19-
20- if ( ! b64auth [ 1 ] )
21- return APIError ( "Missing 'buffer' in authorization" ) ( res ) ;
22-
23- if ( b64auth [ 0 ] . toLocaleLowerCase ( ) === "basic" )
11+ return ( req : Request , res : Response , next ?: NextFunction ) =>
2412 {
25- // Check if buffer, or base64
26- let [ login , password ] = ( Buffer . isBuffer ( b64auth [ 1 ] ) ? Buffer . from ( b64auth [ 1 ] , 'base64' ) : b64auth [ 1 ] ) . toString ( ) . split ( ':' ) ;
27- if ( login . includes ( "==" ) || password . includes ( "==" ) )
28- {
29- // Assuming base64 string
30- // Convert it to normal string
31- Logger . error ( `Admin authorizing with base64 string` ) ;
32- Logger . info ( `Encoding admin credentials to normal string` ) ;
33- login = atob ( login ) ;
34- password = login . split ( ":" ) [ 1 ] ;
35- login = login . split ( ":" ) [ 0 ] ;
36- }
37-
38- Logger . warning ( `Authoring admin with username: ${ login } ` ) ;
3913
40- return bcrypt . compare ( password , ( CacheAdmin . get ( getAdminByUsername ( login ) ?? "ADM_" ) ?. [ "password" ] ) ?? "" , ( err , match ) =>
14+ const authHeader = req . headers [ 'authorization' ] ;
15+ if ( ! authHeader )
16+ return eR ? Promise . resolve ( false ) : APIError ( "Missing 'authorization' in header" ) ( res ) ;
17+
18+ const b64auth = ( authHeader ) . split ( ' ' ) ;
19+
20+ if ( ! b64auth [ 0 ] . toLocaleLowerCase ( ) . match ( / b a s i c | b e a r e r / g) )
21+ return eR ? Promise . resolve ( false ) : APIError ( "Missing 'basic' or 'bearer' in authorization" ) ( res ) ;
22+
23+ if ( ! b64auth [ 1 ] )
24+ return eR ? Promise . resolve ( false ) : APIError ( "Missing 'buffer' in authorization" ) ( res ) ;
25+
26+ if ( b64auth [ 0 ] . toLocaleLowerCase ( ) === "basic" )
4127 {
28+ // Check if buffer, or base64
29+ let [ login , password ] = ( Buffer . isBuffer ( b64auth [ 1 ] ) ? Buffer . from ( b64auth [ 1 ] , 'base64' ) : b64auth [ 1 ] ) . toString ( ) . split ( ':' ) ;
30+ if ( login . includes ( "==" ) || password . includes ( "==" ) )
31+ {
32+ // Assuming base64 string
33+ // Convert it to normal string
34+ Logger . error ( `Admin authorizing with base64 string` ) ;
35+ Logger . info ( `Encoding admin credentials to normal string` ) ;
36+ login = atob ( login ) ;
37+ password = login . split ( ":" ) [ 1 ] ;
38+ login = login . split ( ":" ) [ 0 ] ;
39+ }
40+
41+ eR ? null : Logger . warning ( `Authoring admin with username: ${ login } ` ) ;
42+
43+ const match = bcrypt . compare ( password , ( CacheAdmin . get ( getAdminByUsername ( login ) ?? "ADM_" ) ?. [ "password" ] ) ?? "" )
4244 if ( ! match )
4345 {
44- Logger . warning ( `Authorization failed for admin with username: ${ login } ` ) ;
45- return APIError ( "Unauthorized admin" , 403 ) ( res ) ;
46+ eR ? null : Logger . warning ( `Authorization failed for admin with username: ${ login } ` ) ;
47+ return eR ? Promise . resolve ( false ) : APIError ( "Unauthorized admin" , 403 ) ( res ) ;
4648 }
4749
48- return next ( ) ;
49- } ) ;
50- }
51-
52- if ( b64auth [ 0 ] . toLocaleLowerCase ( ) === "bearer" )
53- {
54- const token = ( Buffer . isBuffer ( b64auth [ 1 ] ) ? Buffer . from ( b64auth [ 1 ] , 'base64' ) : b64auth [ 1 ] ) . toString ( ) ;
55- Logger . warning ( `Authoring admin with token: ${ token } ` ) ;
56- jwt . verify ( token , JWT_Access_Token , ( err , payload ) =>
50+ return eR ? Promise . resolve ( true ) : next ?.( ) ;
51+ }
52+
53+ if ( b64auth [ 0 ] . toLocaleLowerCase ( ) === "bearer" )
5754 {
58- if ( err || ! payload )
55+ const token = ( Buffer . isBuffer ( b64auth [ 1 ] ) ? Buffer . from ( b64auth [ 1 ] , 'base64' ) : b64auth [ 1 ] ) . toString ( ) ;
56+ eR ? null : Logger . warning ( `Authoring admin with token: ${ token } ` ) ;
57+ const payload = jwt . verify ( token , JWT_Access_Token ) ;
58+ if ( ! payload )
5959 {
60- Logger . warning ( `Authorization failed for admin with token: ${ token } ` ) ;
61- return APIError ( "Unauthorized admin" , 403 ) ( res ) ;
60+ eR ? null : Logger . warning ( `Authorization failed for admin with token: ${ token } ` ) ;
61+ return eR ? Promise . resolve ( false ) : APIError ( "Unauthorized admin" , 403 ) ( res ) ;
6262 }
6363
64- Logger . warning ( `Authorized admin with token: ${ token } ` ) ;
64+ eR ? null : Logger . warning ( `Authorized admin with token: ${ token } ` ) ;
6565
66- return next ( ) ;
67- } ) ;
66+ return eR ? Promise . resolve ( true ) : next ?.( ) ;
67+ }
68+
69+ return Promise . resolve ( false ) ;
6870 }
69-
70- return null ;
7171}
0 commit comments