Allow unauthenticated access to JMAP session object

This commit is contained in:
mdecimus
2025-06-06 08:11:50 +02:00
parent 0c86b715b9
commit 605101062a

View File

@@ -37,7 +37,7 @@ use jmap::{
websocket::upgrade::WebSocketUpgrade,
};
use jmap_proto::{
request::Request,
request::{Request, capability::Session},
types::{blob::BlobId, id::Id},
};
use store::dispatch::lookup::KeyValue;
@@ -199,6 +199,26 @@ impl ParseHttp for Server {
.upgrade_websocket_connection(req, access_token, session)
.await;
}
("session", &Method::GET) => {
return if req.headers().contains_key(header::AUTHORIZATION) {
// Authenticate request
let (_in_flight, access_token) =
self.authenticate_headers(&req, &session, false).await?;
self.handle_session_resource(
ctx.resolve_response_url(self).await,
access_token,
)
.await
.map(|s| s.into_http_response())
} else {
Ok(Session::new(
ctx.resolve_response_url(self).await,
&self.core.jmap.capabilities,
)
.into_http_response())
};
}
(_, &Method::OPTIONS) => {
return Ok(JsonProblemResponse(StatusCode::NO_CONTENT).into_http_response());
}
@@ -241,14 +261,9 @@ impl ParseHttp for Server {
}
".well-known" => match (path.next().unwrap_or_default(), req.method()) {
("jmap", &Method::GET) => {
// Authenticate request
let (_in_flight, access_token) =
self.authenticate_headers(&req, &session, false).await?;
return self
.handle_session_resource(ctx.resolve_response_url(self).await, access_token)
.await
.map(|s| s.into_http_response());
return Ok(HttpResponse::new(StatusCode::TEMPORARY_REDIRECT)
.with_no_cache()
.with_location("/jmap/session"));
}
("caldav", _) => {
return Ok(HttpResponse::new(StatusCode::TEMPORARY_REDIRECT)