Skip to content

Commit a219e5e

Browse files
committed
feat: set User-Agent for tile.openstreetmap.org requests
1 parent 8070dfc commit a219e5e

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

src/net/http.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ use crate::net::session::SessionStream;
1616
use crate::net::tls::wrap_rustls;
1717
use crate::tools::time;
1818

19+
/// User-Agent for HTTP requests if a resource usage policy requires it.
20+
/// By default we do not set User-Agent.
21+
const USER_AGENT: &str = "chatmail/2 (+https://github.com/chatmail/core/)";
22+
1923
/// HTTP(S) GET response.
2024
#[derive(Debug, Clone, PartialEq, Eq)]
2125
pub struct Response {
@@ -245,8 +249,22 @@ async fn fetch_url(context: &Context, original_url: &str) -> Result<Response> {
245249
.context("URL has no authority")?
246250
.clone();
247251

248-
let req = hyper::Request::builder()
249-
.uri(parsed_url)
252+
let req = hyper::Request::builder().uri(parsed_url);
253+
254+
// OSM usage policy requires
255+
// that User-Agent is set for HTTP GET requests
256+
// to tile servers:
257+
// <https://operations.osmfoundation.org/policies/tiles/>
258+
// Same for vectory tiles
259+
// at <https://operations.osmfoundation.org/policies/vector/>.
260+
let req =
261+
if authority == "tile.openstreetmap.org" || authority == "vector.openstreetmap.org" {
262+
req.header("User-Agent", USER_AGENT)
263+
} else {
264+
req
265+
};
266+
267+
let req = req
250268
.header(hyper::header::HOST, authority.as_str())
251269
.body(http_body_util::Empty::<Bytes>::new())?;
252270
let response = sender.send_request(req).await?;

0 commit comments

Comments
 (0)