diff --git a/Cargo.lock b/Cargo.lock index 7f32f421d..3b224fb03 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4947,7 +4947,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.17.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "assign", "js_int", @@ -4966,7 +4966,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.17.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "http", "js_int", @@ -4979,7 +4979,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.25.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "as_variant", "assign", @@ -5001,7 +5001,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.20.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "as_variant", "base64 0.23.1", @@ -5034,7 +5034,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.35.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "as_variant", "indexmap 2.14.2", @@ -5055,7 +5055,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.16.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "bytes", "http", @@ -5077,7 +5077,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.12.1" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "js_int", "thiserror 2.0.21", @@ -5086,7 +5086,7 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.20.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "as_variant", "cfg-if", @@ -5102,7 +5102,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.16.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "js_int", "ruma-common", @@ -5114,7 +5114,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.22.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "base64 0.23.1", "ed25519-dalek 3.0.0", @@ -5131,7 +5131,7 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.18.0" -source = "git+https://github.com/gingershaped/ruwuma.git?rev=2bbec6d679310062f3f2db098dab3b7e97c1cf8f#2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +source = "git+https://github.com/gingershaped/ruwuma.git?rev=47d2b51360e1f87967ce191bcd4e96e66ac38936#47d2b51360e1f87967ce191bcd4e96e66ac38936" dependencies = [ "js_int", "ruma-common", diff --git a/Cargo.toml b/Cargo.toml index 180d1145e..92429726b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -348,7 +348,7 @@ version = "1.1.1" # Used for matrix spec type definitions and helpers [workspace.dependencies.ruma] git = "https://github.com/gingershaped/ruwuma.git" -rev = "2bbec6d679310062f3f2db098dab3b7e97c1cf8f" +rev = "47d2b51360e1f87967ce191bcd4e96e66ac38936" features = [ "appservice-api-c", "client-api", @@ -387,6 +387,7 @@ features = [ "unstable-msc4466", "unstable-msc4494", "unstable-msc4484", + "unstable-msc4540", "unstable-extensible-events", ] diff --git a/src/api/client/capabilities.rs b/src/api/client/capabilities.rs index af5eb6ea2..b13aad9f5 100644 --- a/src/api/client/capabilities.rs +++ b/src/api/client/capabilities.rs @@ -1,14 +1,17 @@ -use std::collections::BTreeMap; +use std::collections::{BTreeMap, BTreeSet}; use axum::extract::State; use conduwuit::{Result, Server}; use ruma::{ RoomVersionId, - api::client::discovery::get_capabilities::{ - self, - v3::{ - Capabilities, GetLoginTokenCapability, ProfileFieldsCapability, RoomVersionStability, - RoomVersionsCapability, ThirdPartyIdChangesCapability, + api::{ + OAuthClientScope, + client::discovery::get_capabilities::{ + self, + v3::{ + AdminCapability, Capabilities, GetLoginTokenCapability, ProfileFieldsCapability, + RoomVersionStability, RoomVersionsCapability, ThirdPartyIdChangesCapability, + }, }, }, assign, @@ -50,6 +53,9 @@ pub(crate) async fn get_capabilities_route( { capabilities.account_moderation.lock = true; capabilities.account_moderation.suspend = true; + + capabilities.admin = + AdminCapability::new(BTreeSet::from_iter([OAuthClientScope::ServerAdministration])); } capabilities.profile_fields = Some( diff --git a/src/api/router/auth.rs b/src/api/router/auth.rs index 1a4d3a783..b4afef0d3 100644 --- a/src/api/router/auth.rs +++ b/src/api/router/auth.rs @@ -309,12 +309,14 @@ async fn check_access_token( } } - // Make sure the user has the right scopes to use the route - let user_scopes = if let Some(session_info) = services + let session_info = services .oauth .get_session_info_for_device(&sender_user, &sender_device) .await - { + .map(Box::new); + + // Make sure the user has the right scopes to use the route + let user_scopes = if let Some(session_info) = &session_info { session_info.scopes() } else { let mut scopes = BTreeSet::from_iter([OAuthClientScope::ApiFullAccess]);