Skip to main content

tuwunel_admin/query/oauth/
list_sessions.rs

1use futures::{StreamExt, TryStreamExt};
2use ruma::OwnedUserId;
3use tuwunel_core::{Result, utils::stream::ReadyExt};
4
5use crate::admin_command;
6
7#[admin_command]
8pub(super) async fn oauth_list_sessions(&self, user_id: Option<OwnedUserId>) -> Result {
9	if let Some(user_id) = user_id.as_deref() {
10		return self
11			.services
12			.oauth
13			.sessions
14			.get_sess_id_by_user(user_id)
15			.map_ok(|id| format!("{id}\n"))
16			.try_for_each(async |id: String| self.write_str(&id).await)
17			.await;
18	}
19
20	self.services
21		.oauth
22		.sessions
23		.stream()
24		.ready_filter_map(|sess| sess.sess_id)
25		.map(|sess_id| format!("{sess_id:?}\n"))
26		.for_each(async |id: String| {
27			self.write_str(&id).await.ok();
28		})
29		.await;
30
31	Ok(())
32}