diff --git a/src/net/http.rs b/src/net/http.rs index da06c6039..50b6e6964 100644 --- a/src/net/http.rs +++ b/src/net/http.rs @@ -16,6 +16,10 @@ use crate::net::session::SessionStream; use crate::net::tls::wrap_rustls; use crate::tools::time; +/// User-Agent for HTTP requests if a resource usage policy requires it. +/// By default we do not set User-Agent. +const USER_AGENT: &str = "chatmail/2 (+https://github.com/chatmail/core/)"; + /// HTTP(S) GET response. #[derive(Debug, Clone, PartialEq, Eq)] pub struct Response { @@ -245,8 +249,22 @@ async fn fetch_url(context: &Context, original_url: &str) -> Result { .context("URL has no authority")? .clone(); - let req = hyper::Request::builder() - .uri(parsed_url) + let req = hyper::Request::builder().uri(parsed_url); + + // OSM usage policy requires + // that User-Agent is set for HTTP GET requests + // to tile servers: + // + // Same for vectory tiles + // at . + let req = + if authority == "tile.openstreetmap.org" || authority == "vector.openstreetmap.org" { + req.header("User-Agent", USER_AGENT) + } else { + req + }; + + let req = req .header(hyper::header::HOST, authority.as_str()) .body(http_body_util::Empty::::new())?; let response = sender.send_request(req).await?;