Can redact message

This commit is contained in:
2025-11-24 13:06:31 +01:00
parent 639cc6c737
commit 0a395b0d26
3 changed files with 37 additions and 9 deletions

View File

@@ -83,7 +83,7 @@ pub async fn get_for_room(
path: web::Path<RoomIdInPath>, path: web::Path<RoomIdInPath>,
query: web::Query<GetRoomEventsQuery>, query: web::Query<GetRoomEventsQuery>,
) -> HttpResult { ) -> HttpResult {
let Some(room) = client.client.client.get_room(&path.id) else { let Some(room) = client.client.client.get_room(&path.room_id) else {
return Ok(HttpResponse::NotFound().json("Room not found!")); return Ok(HttpResponse::NotFound().json("Room not found!"));
}; };
@@ -102,7 +102,7 @@ pub async fn send_text_message(
) -> HttpResult { ) -> HttpResult {
let req = client.auth.decode_json_body::<SendTextMessageRequest>()?; let req = client.auth.decode_json_body::<SendTextMessageRequest>()?;
let Some(room) = client.client.client.get_room(&path.id) else { let Some(room) = client.client.client.get_room(&path.room_id) else {
return Ok(HttpResponse::NotFound().json("Room not found!")); return Ok(HttpResponse::NotFound().json("Room not found!"));
}; };
@@ -111,3 +111,27 @@ pub async fn send_text_message(
Ok(HttpResponse::Accepted().finish()) Ok(HttpResponse::Accepted().finish())
} }
#[derive(serde::Deserialize)]
pub struct EventIdInPath {
pub(crate) event_id: OwnedEventId,
}
pub async fn redact_event(
client: MatrixClientExtractor,
path: web::Path<RoomIdInPath>,
event_path: web::Path<EventIdInPath>,
) -> HttpResult {
let Some(room) = client.client.client.get_room(&path.room_id) else {
return Ok(HttpResponse::NotFound().json("Room not found!"));
};
Ok(match room.redact(&event_path.event_id, None, None).await {
Ok(_) => HttpResponse::Accepted().finish(),
Err(e) => {
log::error!("Failed to redact event {}: {e}", event_path.event_id);
HttpResponse::InternalServerError().json(format!("Failed to redact event! {e}"))
}
})
}

View File

@@ -83,7 +83,7 @@ pub async fn get_joined_spaces(client: MatrixClientExtractor) -> HttpResult {
#[derive(serde::Deserialize)] #[derive(serde::Deserialize)]
pub struct RoomIdInPath { pub struct RoomIdInPath {
pub(crate) id: OwnedRoomId, pub(crate) room_id: OwnedRoomId,
} }
/// Get the list of joined rooms of the user /// Get the list of joined rooms of the user
@@ -91,7 +91,7 @@ pub async fn single_room_info(
client: MatrixClientExtractor, client: MatrixClientExtractor,
path: web::Path<RoomIdInPath>, path: web::Path<RoomIdInPath>,
) -> HttpResult { ) -> HttpResult {
Ok(match client.client.client.get_room(&path.id) { Ok(match client.client.client.get_room(&path.room_id) {
None => HttpResponse::NotFound().json("Room not found"), None => HttpResponse::NotFound().json("Room not found"),
Some(r) => HttpResponse::Ok().json(APIRoomInfo::from_room(&r).await?), Some(r) => HttpResponse::Ok().json(APIRoomInfo::from_room(&r).await?),
}) })
@@ -103,7 +103,7 @@ pub async fn room_avatar(
client: MatrixClientExtractor, client: MatrixClientExtractor,
path: web::Path<RoomIdInPath>, path: web::Path<RoomIdInPath>,
) -> HttpResult { ) -> HttpResult {
let Some(room) = client.client.client.get_room(&path.id) else { let Some(room) = client.client.client.get_room(&path.room_id) else {
return Ok(HttpResponse::NotFound().json("Room not found")); return Ok(HttpResponse::NotFound().json("Room not found"));
}; };

View File

@@ -148,11 +148,11 @@ async fn main() -> std::io::Result<()> {
web::get().to(matrix_room_controller::get_joined_spaces), web::get().to(matrix_room_controller::get_joined_spaces),
) )
.route( .route(
"/api/matrix/room/{id}", "/api/matrix/room/{room_id}",
web::get().to(matrix_room_controller::single_room_info), web::get().to(matrix_room_controller::single_room_info),
) )
.route( .route(
"/api/matrix/room/{id}/avatar", "/api/matrix/room/{room_id}/avatar",
web::get().to(matrix_room_controller::room_avatar), web::get().to(matrix_room_controller::room_avatar),
) )
// Matrix profile controller // Matrix profile controller
@@ -166,13 +166,17 @@ async fn main() -> std::io::Result<()> {
) )
// Matrix events controller // Matrix events controller
.route( .route(
"/api/matrix/room/{id}/events", "/api/matrix/room/{room_id}/events",
web::get().to(matrix_event_controller::get_for_room), web::get().to(matrix_event_controller::get_for_room),
) )
.route( .route(
"/api/matrix/room/{id}/send_text_message", "/api/matrix/room/{room_id}/send_text_message",
web::post().to(matrix_event_controller::send_text_message), web::post().to(matrix_event_controller::send_text_message),
) )
.route(
"/api/matrix/room/{room_id}/event/{event_id}",
web::delete().to(matrix_event_controller::redact_event),
)
// Matrix media controller // Matrix media controller
.route( .route(
"/api/matrix/media/{mxc}", "/api/matrix/media/{mxc}",