@@ -20,26 +20,25 @@ const getValuesFromStringAndMultiString = (stringMap: StringMap<string> | null |
20
20
const eventToRequestOptions = ( event : APIGatewayEvent , ctx ?: LambdaContext ) : InProcessRequestOptions => {
21
21
let remoteAddress :string | undefined = undefined ;
22
22
let ssl = false ;
23
+ const queryStringParams = getValuesFromStringAndMultiString ( event . queryStringParameters , event . multiValueQueryStringParameters ) ;
23
24
const headers = getValuesFromStringAndMultiString ( event . headers , event . multiValueHeaders ) ;
24
25
if ( ctx ) {
25
26
headers [ 'x-aws-lambda-request-id' ] = ctx . awsRequestId ;
26
27
}
27
- const queryStringParams = getValuesFromStringAndMultiString ( event . queryStringParameters , event . multiValueQueryStringParameters ) ;
28
28
if ( event . requestContext && event . requestContext . elb ) {
29
29
//load balancer request - it has the client ip in x-forwarded-for header
30
30
if ( typeof headers [ 'x-forwarded-for' ] === 'string' ) {
31
- const ips = ( headers [ 'x-forwarded-for' ] as string ) . split ( ' ' ) ;
32
- remoteAddress = ips [ ips . length - 1 ] ;
33
- ips . splice ( - 1 , 1 )
34
- headers [ 'x-forwarded-for' ] = ips . join ( ' ' ) ;
31
+ const ips = headers [ 'x-forwarded-for' ] . split ( ',' ) . map ( ip => ip . trim ( ) ) ;
32
+ remoteAddress = ips . splice ( - 1 , 1 ) [ 0 ]
33
+ headers [ 'x-forwarded-for' ] = ips . join ( ', ' ) ;
35
34
ssl = headers [ 'x-forwarded-proto' ] === 'https' ;
36
35
if ( ips . length === 0 ) {
37
36
delete headers [ 'x-forwarded-for' ] ;
38
37
delete headers [ 'x-forwarded-port' ] ;
39
38
delete headers [ 'x-forwarded-proto' ] ;
40
39
}
41
40
}
42
- //elb also doesn't uri decode query string params
41
+ //elb doesn't uri decode query string params
43
42
Object . keys ( queryStringParams ) . forEach ( k => {
44
43
queryStringParams [ k ] = decodeURIComponent ( queryStringParams [ k ] )
45
44
} )
0 commit comments