Skip to content

Commit

Permalink
feat: Add room details api
Browse files Browse the repository at this point in the history
  • Loading branch information
kilimnik authored and zecakeh committed Jan 18, 2025
1 parent ceda62a commit 05ce8bd
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 1 deletion.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Breaking changes:
Improvement:

* The list_room response now includes the `room_type` field

* Add room_details api

# 0.7.0

Expand Down
1 change: 1 addition & 0 deletions src/rooms.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//! Endpoints in the `/_synapse/admin/v<x>/rooms/` scope.
pub mod list_rooms;
pub mod room_details;
3 changes: 3 additions & 0 deletions src/rooms/room_details.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
//! Different versions of the room details endpoint.
pub mod v1;
122 changes: 122 additions & 0 deletions src/rooms/room_details/v1.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
//! [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},
events::room::{guest_access::GuestAccess, history_visibility::HistoryVisibility},
room::RoomType,
space::SpaceRoomJoinRule,
OwnedMxcUri, OwnedRoomAliasId, OwnedRoomId, OwnedUserId, UInt,
};

const METADATA: Metadata = metadata! {
method: GET,
rate_limited: false,
authentication: AccessToken,
history: {
unstable => "/_synapse/admin/v1/rooms/:room_id",
}
};

#[request]
pub struct Request {
/// ID of the room to show the details of.
#[ruma_api(path)]
pub room_id: OwnedRoomId,
}

#[response]
pub struct Response {
/// Room ID
pub room_id: OwnedRoomId,

/// Room name
pub name: Option<String>,

/// Room topic
pub topic: Option<String>,

/// Room avatar
pub avatar: Option<OwnedMxcUri>,

/// Room alias ID
pub canonical_alias: Option<OwnedRoomAliasId>,

/// Amount of joined members.
pub joined_members: UInt,

/// Amount of local members.
pub joined_local_members: UInt,

/// Amount of local devices.
pub joined_local_devices: UInt,

/// Room version
pub version: Option<String>,

/// User ID of the room creator.
#[serde(deserialize_with = "ruma::serde::empty_string_as_none")]
pub creator: Option<OwnedUserId>,

/// Room encryption.
pub encryption: Option<String>,

/// Whether the room is federatable
#[serde(deserialize_with = "crate::serde::bool_or_uint")]
pub federatable: bool,

/// Whether the room is public.
#[serde(deserialize_with = "crate::serde::bool_or_uint")]
pub public: bool,

/// Join rules of the room.
pub join_rules: Option<SpaceRoomJoinRule>,

/// Guest access of the room
pub guest_access: Option<GuestAccess>,

/// History visibility of the room
pub history_visibility: Option<HistoryVisibility>,

/// State events of the room.
pub state_events: UInt,

/// Room type of the room.
pub room_type: Option<RoomType>,

/// Whether all local users have forgotten the room.
#[serde(deserialize_with = "crate::serde::bool_or_uint")]
pub forgotten: bool,
}

impl Request {
/// Creates a `Request` with the given room ID.
pub fn new(room_id: OwnedRoomId) -> Self {
Self { room_id }
}
}

impl Response {
/// Creates a `Response` with the given room ID and default values.
pub fn new(room_id: OwnedRoomId) -> Self {
Self {
room_id,
name: None,
topic: None,
avatar: None,
canonical_alias: None,
joined_members: 0u32.into(),
joined_local_members: 0u32.into(),
joined_local_devices: 0u32.into(),
version: None,
creator: None,
encryption: None,
federatable: false,
public: false,
join_rules: None,
guest_access: None,
history_visibility: None,
state_events: 0u32.into(),
room_type: None,
forgotten: false,
}
}
}

0 comments on commit 05ce8bd

Please sign in to comment.