tuwunel_admin/query/oauth/
mod.rs1mod associate;
2mod delete;
3mod list_providers;
4mod list_sessions;
5mod list_users;
6mod revoke;
7mod show_provider;
8mod show_session;
9mod show_user;
10mod token_info;
11
12use clap::Subcommand;
13use ruma::OwnedUserId;
14use tuwunel_core::{
15 Result,
16 either::{Either, Left, Right},
17};
18use tuwunel_service::oauth::{ProviderId, SessionId};
19
20use crate::admin_command_dispatch;
21
22#[admin_command_dispatch(handler_prefix = "oauth")]
23#[derive(Debug, Subcommand)]
24pub(crate) enum OauthCommand {
26 Associate {
28 provider: String,
30
31 user_id: OwnedUserId,
33
34 #[arg(long, required = true)]
36 claim: Vec<String>,
37
38 #[arg(long)]
41 force: bool,
42 },
43
44 ListProviders,
46
47 ListUsers,
49
50 ListSessions {
52 #[arg(long)]
53 user: Option<OwnedUserId>,
54 },
55
56 ShowProvider {
58 id: ProviderId,
59
60 #[arg(long)]
61 config: bool,
62 },
63
64 ShowSession {
66 id: SessionId,
67 },
68
69 ShowUser {
71 user_id: OwnedUserId,
72 },
73
74 TokenInfo {
76 id: SessionId,
77 },
78
79 Revoke {
81 #[arg(value_parser = session_or_user_id)]
82 id: Either<SessionId, OwnedUserId>,
83 },
84
85 Delete {
87 #[arg(value_parser = session_or_user_id)]
88 id: Either<SessionId, OwnedUserId>,
89
90 #[arg(long)]
91 force: bool,
92 },
93}
94
95type SessionOrUserId = Either<SessionId, OwnedUserId>;
96
97fn session_or_user_id(input: &str) -> Result<SessionOrUserId> {
98 OwnedUserId::parse(input)
99 .map(Right)
100 .or_else(|_| Ok(Left(input.to_owned())))
101}