@@ -6,34 +6,33 @@ export const getIP = (
6
6
headers : Headers ,
7
7
checkHeaders : IPHeaders [ ] = headersToCheck ,
8
8
) => {
9
+ // User provided single header
9
10
if ( typeof checkHeaders === "string" && headers . get ( checkHeaders ) ) {
10
11
debug ( `getIP: Found ip from header ${ checkHeaders } ` ) ;
11
- return headers . get ( checkHeaders ) ;
12
+ return headers . get ( checkHeaders )
12
13
}
13
14
14
- // X-Forwarded-For is the de-facto standard header
15
- if ( ! checkHeaders && headers . get ( "x-forwarded-for" ) ) {
16
- debug ( "getIP: IP From Header x-forwarded-for" ) ;
17
- return headers . get ( "x-forwarded-for" ) ?. split ( "," ) [ 0 ] ;
15
+ // check for x-forwaded-for only when user did not provide headers
16
+ if ( checkHeaders && checkHeaders === headersToCheck && headers . get ( "x-forwarded-for" ) ) {
17
+ debug ( "getIP: IP From Header x-forwarded-for" ) ;
18
+ return headers . get ( "x-forwarded-for" ) ?. split ( "," ) [ 0 ] ;
19
+ }
20
+
21
+ // User provided / default headers array
22
+ if ( Array . isArray ( checkHeaders ) ) {
23
+ let clientIP : string | undefined | null = null ;
24
+ for ( const header of checkHeaders ) {
25
+ clientIP = headers . get ( header ) ;
26
+ if ( clientIP ) {
27
+ debug ( `getIP: Found ip from header ${ header } ` ) ;
28
+ break ;
29
+ }
30
+ }
31
+ return clientIP
18
32
}
19
33
20
34
if ( ! checkHeaders ) {
21
35
debug ( "getIP: No checkHeaders" ) ;
22
36
return null ;
23
37
}
24
-
25
- let clientIP : string | undefined | null = null ;
26
- for ( const header of checkHeaders ) {
27
- clientIP = headers . get ( header ) ;
28
- if ( clientIP ) {
29
- debug ( `getIP: Found ip from header ${ header } ` ) ;
30
- break ;
31
- }
32
- }
33
-
34
- if ( ! clientIP ) {
35
- debug ( "getIP: Failed to get ip from header!" ) ;
36
- return ;
37
- }
38
- return clientIP ;
39
38
} ;
0 commit comments