tuwunel_api/client/session/
logout.rs1use axum::extract::State;
2use futures::StreamExt;
3use ruma::api::client::session::{logout, logout_all};
4use tuwunel_core::Result;
5
6use crate::{ClientIp, Ruma};
7
8#[tracing::instrument(skip_all, fields(%client), name = "logout")]
18pub(crate) async fn logout_route(
19 State(services): State<crate::State>,
20 ClientIp(client): ClientIp,
21 body: Ruma<logout::v3::Request>,
22) -> Result<logout::v3::Response> {
23 services
24 .users
25 .remove_device(body.sender_user(), body.sender_device()?)
26 .await;
27
28 Ok(logout::v3::Response::new())
29}
30
31#[tracing::instrument(skip_all, fields(%client), name = "logout")]
45pub(crate) async fn logout_all_route(
46 State(services): State<crate::State>,
47 ClientIp(client): ClientIp,
48 body: Ruma<logout_all::v3::Request>,
49) -> Result<logout_all::v3::Response> {
50 services
51 .users
52 .all_device_ids(body.sender_user())
53 .for_each(|device_id| {
54 services
55 .users
56 .remove_device(body.sender_user(), device_id)
57 })
58 .await;
59
60 Ok(logout_all::v3::Response::new())
61}