22
22
except ImportError :
23
23
from localstack .constants import TEST_AWS_ACCESS_KEY_ID
24
24
25
+ from aws_replicator .shared .constants import HEADER_HOST_ORIGINAL
25
26
from aws_replicator .shared .models import ProxyInstance , ProxyServiceConfig
26
27
27
28
LOG = logging .getLogger (__name__ )
@@ -98,33 +99,38 @@ def select_proxy(self, context: RequestContext) -> Optional[ProxyInstance]:
98
99
def _request_matches_resource (
99
100
self , context : RequestContext , resource_name_pattern : str
100
101
) -> bool :
101
- service_name = self ._get_canonical_service_name (context .service .service_name )
102
- if service_name == "s3" :
103
- bucket_name = context .service_request .get ("Bucket" ) or ""
104
- s3_bucket_arn = arns .s3_bucket_arn (bucket_name )
105
- return bool (re .match (resource_name_pattern , s3_bucket_arn ))
106
- if service_name == "sqs" :
107
- queue_name = context .service_request .get ("QueueName" ) or ""
108
- queue_url = context .service_request .get ("QueueUrl" ) or ""
109
- queue_name = queue_name or queue_url .split ("/" )[- 1 ]
110
- candidates = (
111
- queue_name ,
112
- queue_url ,
113
- sqs_queue_arn (
114
- queue_name , account_id = context .account_id , region_name = context .region
115
- ),
116
- )
117
- for candidate in candidates :
118
- if re .match (resource_name_pattern , candidate ):
119
- return True
120
- return False
121
- if service_name == "secretsmanager" :
122
- secret_id = context .service_request .get ("SecretId" ) or ""
123
- secret_arn = secretsmanager_secret_arn (
124
- secret_id , account_id = context .account_id , region_name = context .region
125
- )
126
- return bool (re .match (resource_name_pattern , secret_arn ))
127
- # TODO: add more resource patterns
102
+ try :
103
+ service_name = self ._get_canonical_service_name (context .service .service_name )
104
+ if service_name == "s3" :
105
+ bucket_name = context .service_request .get ("Bucket" ) or ""
106
+ s3_bucket_arn = arns .s3_bucket_arn (bucket_name )
107
+ return bool (re .match (resource_name_pattern , s3_bucket_arn ))
108
+ if service_name == "sqs" :
109
+ queue_name = context .service_request .get ("QueueName" ) or ""
110
+ queue_url = context .service_request .get ("QueueUrl" ) or ""
111
+ queue_name = queue_name or queue_url .split ("/" )[- 1 ]
112
+ candidates = (
113
+ queue_name ,
114
+ queue_url ,
115
+ sqs_queue_arn (
116
+ queue_name , account_id = context .account_id , region_name = context .region
117
+ ),
118
+ )
119
+ for candidate in candidates :
120
+ if re .match (resource_name_pattern , candidate ):
121
+ return True
122
+ return False
123
+ if service_name == "secretsmanager" :
124
+ secret_id = context .service_request .get ("SecretId" ) or ""
125
+ secret_arn = secretsmanager_secret_arn (
126
+ secret_id , account_id = context .account_id , region_name = context .region
127
+ )
128
+ return bool (re .match (resource_name_pattern , secret_arn ))
129
+ # TODO: add more resource patterns
130
+ except re .error as e :
131
+ raise Exception (
132
+ "Error evaluating regular expression - please verify proxy configuration"
133
+ ) from e
128
134
return True
129
135
130
136
def forward_request (self , context : RequestContext , proxy : ProxyInstance ) -> requests .Response :
@@ -140,7 +146,7 @@ def forward_request(self, context: RequestContext, proxy: ProxyInstance) -> requ
140
146
141
147
result = None
142
148
try :
143
- headers .pop ("Host" , None )
149
+ headers [ HEADER_HOST_ORIGINAL ] = headers .pop ("Host" , None )
144
150
headers .pop ("Content-Length" , None )
145
151
ctype = headers .get ("Content-Type" )
146
152
data = b""
0 commit comments