Skip to content

Commit 6b24b83

Browse files
committed
Ensure geo headers are applied to basic auth responses and encapsulate geo header logic into a new helper function.
1 parent 15b9182 commit 6b24b83

1 file changed

Lines changed: 16 additions & 10 deletions

File tree

crates/fastly/src/main.rs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,14 @@ async fn route_request(
6666
integration_registry: &IntegrationRegistry,
6767
req: Request,
6868
) -> Result<Response, Error> {
69-
if let Some(response) = enforce_basic_auth(settings, &req) {
69+
// Extract geo info before auth check or routing consumes the request
70+
let geo_info = GeoInfo::from_request(&req);
71+
72+
if let Some(mut response) = enforce_basic_auth(settings, &req) {
73+
apply_geo_headers(&geo_info, &mut response);
7074
return Ok(response);
7175
}
7276

73-
// Extract geo info before routing consumes the request
74-
let geo_info = GeoInfo::from_request(&req);
75-
7677
// Get path and method for routing
7778
let path = req.get_path().to_string();
7879
let method = req.get_method().clone();
@@ -137,12 +138,7 @@ async fn route_request(
137138
// Convert any errors to HTTP error responses
138139
let mut response = result.unwrap_or_else(|e| to_error_response(&e));
139140

140-
// Set geo headers on the response
141-
if let Some(ref geo) = geo_info {
142-
geo.set_response_headers(&mut response);
143-
} else {
144-
response.set_header(HEADER_X_GEO_INFO_AVAILABLE, "false");
145-
}
141+
apply_geo_headers(&geo_info, &mut response);
146142

147143
if let Ok(v) = ::std::env::var(ENV_FASTLY_SERVICE_VERSION) {
148144
response.set_header(HEADER_X_TS_VERSION, v);
@@ -158,6 +154,16 @@ async fn route_request(
158154
Ok(response)
159155
}
160156

157+
/// Sets geo headers on a response. If geo data is available, sets all `x-geo-*`
158+
/// headers; otherwise sets `x-geo-info-available: false`.
159+
fn apply_geo_headers(geo_info: &Option<GeoInfo>, response: &mut Response) {
160+
if let Some(ref geo) = geo_info {
161+
geo.set_response_headers(response);
162+
} else {
163+
response.set_header(HEADER_X_GEO_INFO_AVAILABLE, "false");
164+
}
165+
}
166+
161167
fn init_logger() {
162168
let logger = Logger::builder()
163169
.default_endpoint("tslog")

0 commit comments

Comments
 (0)