From 690928ec81132a5e52d07161807d2c451b03908e Mon Sep 17 00:00:00 2001 From: strawberry Date: Thu, 14 Mar 2024 00:16:25 -0400 Subject: [PATCH] (hopefully?) implement AuthScheme::AppserviceToken Signed-off-by: strawberry --- src/api/ruma_wrapper/axum.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/api/ruma_wrapper/axum.rs b/src/api/ruma_wrapper/axum.rs index 1f329237..47b67c10 100644 --- a/src/api/ruma_wrapper/axum.rs +++ b/src/api/ruma_wrapper/axum.rs @@ -84,7 +84,8 @@ where appservice_registration { match metadata.authentication { - AuthScheme::AccessToken | AuthScheme::AccessTokenOptional => { + // TODO: verify if just or'ing `AuthScheme::AppserviceToken` is correct here + AuthScheme::AccessToken | AuthScheme::AccessTokenOptional | AuthScheme::AppserviceToken => { let user_id = query_params.user_id.map_or_else( || { UserId::parse_with_server_name( @@ -149,6 +150,28 @@ where } } }, + // TODO: verify if this is correct for Appservices (?) + AuthScheme::AppserviceToken => { + debug!("non-appservice called an endpoint with AuthScheme::AppserviceToken"); + let token = match token { + Some(token) => token, + _ => return Err(Error::BadRequest(ErrorKind::MissingToken, "Missing access token.")), + }; + + match services().users.find_from_token(token)? { + None => { + return Err(Error::BadRequest( + ErrorKind::UnknownToken { + soft_logout: false, + }, + "Unknown access token.", + )) + }, + Some((user_id, device_id)) => { + (Some(user_id), Some(OwnedDeviceId::from(device_id)), None, false) + }, + } + }, AuthScheme::ServerSignatures => { let TypedHeader(Authorization(x_matrix)) = parts.extract::>>().await.map_err(|e| {