diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a939442..8f274a1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,14 +49,14 @@ jobs: - name: Install MSRV toolchain uses: dtolnay/rust-toolchain@master with: - toolchain: "1.82" + toolchain: "1.88" - uses: Swatinem/rust-cache@v2 with: # A stable compiler update should automatically not reuse old caches. # Add the MSRV as a stable cache key too so bumping it also gets us a # fresh cache. - shared-key: msrv1.82 + shared-key: msrv1.88 - name: Run checks run: cargo check --all-features diff --git a/CHANGELOG.md b/CHANGELOG.md index c8e254c..325fdf9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # [unreleased] +Breaking changes: + +- Upgrade Ruma to 0.14.0 + - All endpoints use `SinglePath` rather than `VersionHistory` as `PathBuilder`. + - Bump MSRV to 1.88. + # 0.8.0 Breaking changes: diff --git a/Cargo.toml b/Cargo.toml index 7f1f937..e6a3b1f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ keywords = ["matrix", "chat", "messaging", "ruma"] license = "MIT" repository = "https://github.com/ruma/synapse-admin-api" edition = "2021" -rust-version = "1.82" +rust-version = "1.88" [features] client = [] @@ -19,7 +19,7 @@ shared-secret-registration-mac = ["dep:hex", "dep:hmac", "dep:sha1"] [dependencies] hex = { version = "0.4.3", optional = true } hmac = { version = "0.12.1", optional = true } -ruma = { version = "0.13.0", features = ["api", "events"] } +ruma = { version = "0.14.0", features = ["api", "events"] } serde = { version = "1.0.118", features = ["derive"] } sha1 = { version = "0.10.1", optional = true } diff --git a/src/account_validity/renew_account/v1.rs b/src/account_validity/renew_account/v1.rs index 4c14d11..d1d7ed9 100644 --- a/src/account_validity/renew_account/v1.rs +++ b/src/account_validity/renew_account/v1.rs @@ -1,18 +1,16 @@ //! [GET /_synapse/admin/v1/account_validity/validity](https://github.com/element-hq/synapse/blob/master/docs/admin_api/account_validity.md) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, MilliSecondsSinceUnixEpoch, OwnedUserId, }; -const METADATA: Metadata = metadata! { +metadata! { method: POST, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/account_validity/validity", - } -}; + path: "/_synapse/admin/v1/account_validity/validity", +} #[request] pub struct Request { diff --git a/src/background_updates/enabled/v1.rs b/src/background_updates/enabled/v1.rs index 4fd9742..61d55ed 100644 --- a/src/background_updates/enabled/v1.rs +++ b/src/background_updates/enabled/v1.rs @@ -1,19 +1,17 @@ //! [POST /_synapse/admin/v1/background_updates/enabled](https://github.com/element-hq/synapse/blob/develop/docs/usage/administration/admin_api/background_updates.md#enabled) use ruma::{ - api::{request, response, Metadata}, + api::{auth_scheme::AccessToken, request, response}, metadata, }; use serde::{Deserialize, Serialize}; -const METADATA: Metadata = metadata! { +metadata! { method: POST, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/background_updates/enabled", - } -}; + path: "/_synapse/admin/v1/background_updates/enabled", +} #[request] pub struct Request { diff --git a/src/background_updates/run/v1.rs b/src/background_updates/run/v1.rs index cdeb9c7..eb2ac93 100644 --- a/src/background_updates/run/v1.rs +++ b/src/background_updates/run/v1.rs @@ -1,19 +1,17 @@ //! [POST /_synapse/admin/v1/background_updates/start_job](https://github.com/element-hq/synapse/blob/master/docs/usage/administration/admin_api/background_updates.md#run) use ruma::{ - api::{request, response, Metadata}, + api::{auth_scheme::AccessToken, request, response}, metadata, - serde::{PartialEqAsRefStr, StringEnum}, + serde::StringEnum, }; -const METADATA: Metadata = metadata! { +metadata! { method: POST, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/background_updates/start_job", - } -}; + path: "/_synapse/admin/v1/background_updates/start_job", +} #[request] pub struct Request { @@ -39,7 +37,7 @@ impl Response { } } -#[derive(Clone, PartialEqAsRefStr, Eq, StringEnum)] +#[derive(Clone, StringEnum)] #[ruma_enum(rename_all = "snake_case")] #[non_exhaustive] pub enum JobName { diff --git a/src/background_updates/status/v1.rs b/src/background_updates/status/v1.rs index d4cc1d5..bfcec2e 100644 --- a/src/background_updates/status/v1.rs +++ b/src/background_updates/status/v1.rs @@ -2,17 +2,15 @@ use std::collections::HashMap; -use ruma::api::{metadata, request, response, Metadata}; +use ruma::api::{auth_scheme::AccessToken, metadata, request, response}; use serde::{Deserialize, Serialize}; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/background_updates/status", - } -}; + path: "/_synapse/admin/v1/background_updates/status", +} #[request] #[derive(Default)] diff --git a/src/experimental_features/enable_features/v1.rs b/src/experimental_features/enable_features/v1.rs index c77420f..578ff25 100644 --- a/src/experimental_features/enable_features/v1.rs +++ b/src/experimental_features/enable_features/v1.rs @@ -1,19 +1,17 @@ //! [PUT /_synapse/admin/v1/experimental_features/:user_id](https://github.com/element-hq/synapse/blob/master/docs/admin_api/experimental_features.md#enablingdisabling-features) use ruma::{ - api::{request, response, Metadata}, + api::{auth_scheme::AccessToken, request, response}, metadata, OwnedUserId, }; use serde::{Deserialize, Serialize}; -const METADATA: Metadata = metadata! { +metadata! { method: PUT, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/experimental_features/{user_id}", - } -}; + path: "/_synapse/admin/v1/experimental_features/{user_id}", +} #[request] #[derive(Serialize, Deserialize, PartialEq)] diff --git a/src/experimental_features/list_features/v1.rs b/src/experimental_features/list_features/v1.rs index 2adefd4..3a37e4b 100644 --- a/src/experimental_features/list_features/v1.rs +++ b/src/experimental_features/list_features/v1.rs @@ -1,21 +1,19 @@ //! [GET /_synapse/admin/v1/experimental_features/:user_id](https://github.com/element-hq/synapse/blob/develop/docs/admin_api/experimental_features.md#listing-enabled-features) use ruma::{ - api::{request, response, Metadata}, + api::{auth_scheme::AccessToken, request, response}, metadata, OwnedUserId, }; use serde::{Deserialize, Serialize}; use crate::experimental_features::enable_features::v1::ExperimentalFeatures; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/experimental_features/{user_id}", - } -}; + path: "/_synapse/admin/v1/experimental_features/{user_id}", +} #[request] #[derive(Serialize, Deserialize, PartialEq)] diff --git a/src/register_users/shared_secret_register/v1.rs b/src/register_users/shared_secret_register/v1.rs index dd9f884..0d93a16 100644 --- a/src/register_users/shared_secret_register/v1.rs +++ b/src/register_users/shared_secret_register/v1.rs @@ -3,7 +3,7 @@ #[cfg(feature = "shared-secret-registration-mac")] use hmac::{digest::InvalidLength, Hmac, Mac}; use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::NoAuthentication, metadata, request, response}, OwnedDeviceId, OwnedServerName, OwnedUserId, }; #[cfg(feature = "shared-secret-registration-mac")] @@ -12,14 +12,12 @@ use sha1::Sha1; #[cfg(feature = "shared-secret-registration-mac")] type HmacSha1 = Hmac; -const METADATA: Metadata = metadata! { +metadata! { method: POST, rate_limited: false, - authentication: None, - history: { - unstable => "/_synapse/admin/v1/register", - } -}; + authentication: NoAuthentication, + path: "/_synapse/admin/v1/register", +} #[request] #[derive(Default)] diff --git a/src/register_users/shared_secret_register_nonce/v1.rs b/src/register_users/shared_secret_register_nonce/v1.rs index 73721e4..856f908 100644 --- a/src/register_users/shared_secret_register_nonce/v1.rs +++ b/src/register_users/shared_secret_register_nonce/v1.rs @@ -1,15 +1,13 @@ //! [GET /_synapse/admin/v1/register](https://github.com/element-hq/synapse/blob/master/docs/admin_api/register_api.md) -use ruma::api::{metadata, request, response, Metadata}; +use ruma::api::{auth_scheme::NoAuthentication, metadata, request, response}; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, - authentication: None, - history: { - unstable => "/_synapse/admin/v1/register", - } -}; + authentication: NoAuthentication, + path: "/_synapse/admin/v1/register", +} #[request] #[derive(Default)] diff --git a/src/room_membership/join_room/v1.rs b/src/room_membership/join_room/v1.rs index f2150c6..b947b65 100644 --- a/src/room_membership/join_room/v1.rs +++ b/src/room_membership/join_room/v1.rs @@ -1,18 +1,16 @@ //! [POST /_synapse/admin/v1/join/:room_id_or_alias](https://github.com/element-hq/synapse/blob/master/docs/admin_api/room_membership.md) use ruma::{ - api::{request, response, Metadata}, + api::{auth_scheme::AccessToken, request, response}, metadata, OwnedRoomId, OwnedRoomOrAliasId, OwnedUserId, }; -const METADATA: Metadata = metadata! { +metadata! { method: POST, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/join/{room_id_or_alias}", - } -}; + path: "/_synapse/admin/v1/join/{room_id_or_alias}", +} #[request] pub struct Request { diff --git a/src/rooms/list_rooms/v1.rs b/src/rooms/list_rooms/v1.rs index d5e43e2..6a44664 100644 --- a/src/rooms/list_rooms/v1.rs +++ b/src/rooms/list_rooms/v1.rs @@ -1,21 +1,19 @@ //! [GET /_synapse/admin/v1/rooms](https://github.com/element-hq/synapse/blob/master/docs/admin_api/rooms.md#list-room-api) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, events::room::{guest_access::GuestAccess, history_visibility::HistoryVisibility}, room::{JoinRuleKind, RoomType}, - serde::{OrdAsRefStr, PartialEqAsRefStr, PartialOrdAsRefStr, StringEnum}, + serde::StringEnum, uint, OwnedRoomAliasId, OwnedRoomId, OwnedUserId, UInt, }; use serde::{Deserialize, Serialize}; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/rooms", - } -}; + path: "/_synapse/admin/v1/rooms", +} #[request] #[derive(Default)] @@ -81,7 +79,7 @@ impl Response { } /// Enum to define the sorting method of rooms. -#[derive(Clone, PartialEqAsRefStr, Eq, PartialOrdAsRefStr, OrdAsRefStr, StringEnum)] +#[derive(Clone, StringEnum)] #[ruma_enum(rename_all = "snake_case")] #[non_exhaustive] pub enum RoomSortOrder { @@ -129,7 +127,7 @@ pub enum RoomSortOrder { } /// Enum to define the sort order direction. -#[derive(Clone, PartialEqAsRefStr, Eq, PartialOrdAsRefStr, OrdAsRefStr, StringEnum)] +#[derive(Clone, StringEnum)] #[non_exhaustive] pub enum SortDirection { /// Sort direction backward. diff --git a/src/rooms/room_details/v1.rs b/src/rooms/room_details/v1.rs index fa6f2f2..fd13c65 100644 --- a/src/rooms/room_details/v1.rs +++ b/src/rooms/room_details/v1.rs @@ -1,19 +1,17 @@ //! [GET /_synapse/admin/v1/rooms/:room_id](https://github.com/element-hq/synapse/blob/master/docs/admin_api/rooms.md#room-details-api) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, events::room::{guest_access::GuestAccess, history_visibility::HistoryVisibility}, room::{JoinRuleKind, RoomType}, uint, OwnedMxcUri, OwnedRoomAliasId, OwnedRoomId, OwnedUserId, UInt, }; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/rooms/{room_id}", - } -}; + path: "/_synapse/admin/v1/rooms/{room_id}", +} #[request] pub struct Request { diff --git a/src/rooms/room_members/v1.rs b/src/rooms/room_members/v1.rs index 2a5523d..d484d2d 100644 --- a/src/rooms/room_members/v1.rs +++ b/src/rooms/room_members/v1.rs @@ -1,17 +1,15 @@ //! [GET /_synapse/admin/v1/rooms/:room_id/members](https://github.com/element-hq/synapse/blob/master/docs/admin_api/rooms.md#room-members-api) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, OwnedRoomId, OwnedUserId, UInt, }; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/rooms/{room_id}/members", - } -}; + path: "/_synapse/admin/v1/rooms/{room_id}/members", +} #[request] pub struct Request { diff --git a/src/users.rs b/src/users.rs index d075c4e..f65ed9e 100644 --- a/src/users.rs +++ b/src/users.rs @@ -1,6 +1,7 @@ //! Endpoints in the `/_synapse/admin/v/users/` scope. pub mod create_or_modify; +pub mod deactivate_account; pub mod get_details; pub mod is_user_admin; pub mod list_joined_rooms; diff --git a/src/users/create_or_modify/v2.rs b/src/users/create_or_modify/v2.rs index 614b1ef..d84422c 100644 --- a/src/users/create_or_modify/v2.rs +++ b/src/users/create_or_modify/v2.rs @@ -1,7 +1,7 @@ //! [PUT /_synapse/admin/v2/users/:user_id](https://github.com/element-hq/synapse/blob/master/docs/admin_api/user_admin_api.md#create-or-modify-account) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, thirdparty::Medium, OwnedUserId, }; @@ -9,14 +9,12 @@ use serde::{Deserialize, Serialize}; pub use crate::users::{ExternalId, UserDetails}; -const METADATA: Metadata = metadata! { +metadata! { method: PUT, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v2/users/{user_id}", - } -}; + path: "/_synapse/admin/v2/users/{user_id}", +} #[request] pub struct Request { diff --git a/src/users/deactivate_account/v1.rs b/src/users/deactivate_account/v1.rs index 5918cef..21f90d1 100644 --- a/src/users/deactivate_account/v1.rs +++ b/src/users/deactivate_account/v1.rs @@ -1,18 +1,16 @@ //! [POST /_synapse/admin/v1/deactivate/:user_id](https://github.com/element-hq/synapse/blob/develop/docs/admin_api/user_admin_api.md#deactivate-account) use ruma::{ - api::{metadata, request, response, Metadata}, - UserId, + api::{auth_scheme::AccessToken, metadata, request, response}, + OwnedUserId, }; -const METADATA: Metadata = metadata! { +metadata! { method: POST, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/deactivate/{user_id}", - } -}; + path: "/_synapse/admin/v1/deactivate/{user_id}", +} #[request] pub struct Request { @@ -21,7 +19,7 @@ pub struct Request { pub user_id: OwnedUserId, /// Flag whether to erase the account. - #[serde(default = "ruma::serde::default_false", skip_serializing_if = "ruma::serde::is_false")] + #[serde(default, skip_serializing_if = "ruma::serde::is_default")] pub erase: bool, } @@ -32,13 +30,13 @@ pub struct Response {} impl Request { /// Creates a `Request` with the given user ID. pub fn new(user_id: OwnedUserId) -> Self { - Self { user_id } + Self { user_id, erase: false } } } impl Response { /// Creates an empty `Response`. pub fn new() -> Self { - Self + Self {} } } diff --git a/src/users/get_details/v2.rs b/src/users/get_details/v2.rs index 179870e..e990d02 100644 --- a/src/users/get_details/v2.rs +++ b/src/users/get_details/v2.rs @@ -1,20 +1,18 @@ //! [GET /_synapse/admin/v2/users/:user_id](https://github.com/element-hq/synapse/blob/master/docs/admin_api/user_admin_api.md#query-user-account) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, OwnedUserId, }; pub use crate::users::UserDetails; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v2/users/{user_id}", - } -}; + path: "/_synapse/admin/v2/users/{user_id}", +} #[request] pub struct Request { diff --git a/src/users/is_user_admin/v1.rs b/src/users/is_user_admin/v1.rs index 9223c1d..8598071 100644 --- a/src/users/is_user_admin/v1.rs +++ b/src/users/is_user_admin/v1.rs @@ -1,18 +1,16 @@ //! [GET /_synapse/admin/v1/users/:user_id/admin](https://github.com/element-hq/synapse/blob/master/docs/admin_api/user_admin_api.md#get-whether-a-user-is-a-server-administrator-or-not) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, OwnedUserId, }; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/users/{user_id}/admin", - } -}; + path: "/_synapse/admin/v1/users/{user_id}/admin", +} #[request] pub struct Request { diff --git a/src/users/list_joined_rooms/v1.rs b/src/users/list_joined_rooms/v1.rs index fbc66cd..35c4d67 100644 --- a/src/users/list_joined_rooms/v1.rs +++ b/src/users/list_joined_rooms/v1.rs @@ -1,18 +1,16 @@ //! [GET /_synapse/admin/v1/users/:user_id/joined_rooms](https://github.com/element-hq/synapse/blob/master/docs/admin_api/user_admin_api.md#list-joined-rooms-of-a-user) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, OwnedRoomId, OwnedUserId, UInt, }; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/users/{user_id}/joined_rooms", - } -}; + path: "/_synapse/admin/v1/users/{user_id}/joined_rooms", +} #[request] pub struct Request { diff --git a/src/users/list_users/v2.rs b/src/users/list_users/v2.rs index 7c58360..948a997 100644 --- a/src/users/list_users/v2.rs +++ b/src/users/list_users/v2.rs @@ -1,19 +1,17 @@ //! [GET /_synapse/admin/v2/users](https://github.com/element-hq/synapse/blob/master/docs/admin_api/user_admin_api.md#list-accounts) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, OwnedUserId, UInt, }; use serde::{Deserialize, Serialize}; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v2/users", - } -}; + path: "/_synapse/admin/v2/users", +} #[request] #[derive(Default)] diff --git a/src/users/reset_password/v1.rs b/src/users/reset_password/v1.rs index 7b9f84c..ff47f6f 100644 --- a/src/users/reset_password/v1.rs +++ b/src/users/reset_password/v1.rs @@ -1,18 +1,16 @@ //! [POST /_synapse/admin/v1/reset_password/:user_id](https://github.com/element-hq/synapse/blob/master/docs/admin_api/user_admin_api.md#reset-password) use ruma::{ - api::{metadata, request, response, Metadata}, + api::{auth_scheme::AccessToken, metadata, request, response}, OwnedUserId, }; -const METADATA: Metadata = metadata! { +metadata! { method: POST, rate_limited: false, authentication: AccessToken, - history: { - unstable => "/_synapse/admin/v1/reset_password/{user_id}", - } -}; + path: "/_synapse/admin/v1/reset_password/{user_id}", +} #[request] pub struct Request { diff --git a/src/version/get_server_version/v1.rs b/src/version/get_server_version/v1.rs index 084522f..6d8d157 100644 --- a/src/version/get_server_version/v1.rs +++ b/src/version/get_server_version/v1.rs @@ -1,16 +1,14 @@ //! [GET /_synapse/admin/v1/server_version](https://github.com/element-hq/synapse/blob/master/docs/admin_api/version_api.md) -use ruma::api::{metadata, request, response, Metadata}; +use ruma::api::{auth_scheme::NoAuthentication, metadata, request, response}; use serde::{Deserialize, Serialize}; -const METADATA: Metadata = metadata! { +metadata! { method: GET, rate_limited: false, - authentication: None, // AccessToken? - history: { - unstable => "/_synapse/admin/v1/server_version", - } -}; + authentication: NoAuthentication, // AccessToken? + path: "/_synapse/admin/v1/server_version", +} #[request] #[derive(Default)]