@@ -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+
161167fn init_logger ( ) {
162168 let logger = Logger :: builder ( )
163169 . default_endpoint ( "tslog" )
0 commit comments