tuwunel_admin/query/oauth/
mod.rs1mod adopt;
2mod associate;
3mod delete;
4mod list_providers;
5mod list_sessions;
6mod list_users;
7mod revoke;
8mod show_provider;
9mod show_session;
10mod show_user;
11mod token_info;
12
13use clap::Subcommand;
14use ruma::OwnedUserId;
15use tuwunel_core::{
16 Result,
17 either::{Either, Left, Right},
18};
19use tuwunel_service::oauth::{ProviderId, SessionId};
20
21use crate::admin_command_dispatch;
22
23#[admin_command_dispatch(handler_prefix = "oauth")]
24#[derive(Debug, Subcommand)]
25pub(crate) enum OauthCommand {
27 Adopt {
32 provider: String,
36 },
37
38 Associate {
40 provider: String,
42
43 user_id: OwnedUserId,
45
46 #[arg(long, required = true)]
48 claim: Vec<String>,
49
50 #[arg(long)]
53 force: bool,
54 },
55
56 ListProviders,
58
59 ListUsers,
61
62 ListSessions {
64 #[arg(long)]
65 user: Option<OwnedUserId>,
66 },
67
68 ShowProvider {
70 id: ProviderId,
71
72 #[arg(long)]
73 config: bool,
74 },
75
76 ShowSession {
78 id: SessionId,
79 },
80
81 ShowUser {
83 user_id: OwnedUserId,
84 },
85
86 TokenInfo {
88 id: SessionId,
89 },
90
91 Revoke {
93 #[arg(value_parser = session_or_user_id)]
94 id: Either<SessionId, OwnedUserId>,
95 },
96
97 Delete {
99 #[arg(value_parser = session_or_user_id)]
100 id: Either<SessionId, OwnedUserId>,
101
102 #[arg(long)]
103 force: bool,
104 },
105}
106
107type SessionOrUserId = Either<SessionId, OwnedUserId>;
108
109fn session_or_user_id(input: &str) -> Result<SessionOrUserId> {
110 OwnedUserId::parse(input)
111 .map(Right)
112 .or_else(|_| Ok(Left(input.to_owned())))
113}