1use clap::{Parser, Subcommand};
2
3#[derive(Debug, Parser)]
4#[command(name = "oauth-db")]
5#[command(about = "OAuth-DB CLI - Manage your OAuth-DB platform", long_about = None)]
6#[command(version)]
7pub struct Cli {
8 #[arg(short, long, global = true)]
10 pub server: Option<String>,
11
12 #[arg(short, long, global = true)]
14 pub output: Option<String>,
15
16 #[arg(long, global = true)]
18 pub no_color: bool,
19
20 #[arg(short, long, global = true)]
22 pub verbose: bool,
23
24 #[arg(short, long, global = true)]
26 pub quiet: bool,
27
28 #[command(subcommand)]
29 pub command: Commands,
30}
31
32#[derive(Debug, Subcommand)]
33pub enum Commands {
34 Login(LoginArgs),
36
37 Logout,
39
40 Whoami,
42
43 Accounts {
45 #[command(subcommand)]
46 command: AccountsCommands,
47 },
48
49 App {
51 #[command(subcommand)]
52 command: AppCommands,
53 },
54
55 User {
57 #[command(subcommand)]
58 command: UserCommands,
59 },
60
61 Admin {
63 #[command(subcommand)]
64 command: AdminCommands,
65 },
66
67 Config {
69 #[command(subcommand)]
70 command: ConfigCommands,
71 },
72}
73
74#[derive(Debug, Clone, Parser)]
75pub struct LoginArgs {
76 #[arg(short, long)]
78 pub server: Option<String>,
79
80 #[arg(short, long)]
82 pub username: Option<String>,
83
84 #[arg(short, long)]
86 pub password: Option<String>,
87}
88
89#[derive(Debug, Clone, Subcommand)]
90pub enum AccountsCommands {
91 List,
93
94 Switch {
96 name: String,
98 },
99
100 Remove {
102 name: String,
104 },
105}
106
107#[derive(Debug, Clone, Subcommand)]
108pub enum AppCommands {
109 Create {
111 name: String,
113 #[arg(long, default_value = "main")]
114 default_db: String,
115 #[arg(long, default_value = "main")]
116 allowed_dbs: String,
117 #[arg(long, default_value = "1000")]
118 max_users: u32,
119 #[arg(long, default_value = "100")]
120 storage_quota: u32,
121 #[arg(long, default_value = "10")]
122 max_connections: u32,
123 #[arg(long, default_value = "100")]
124 qps_limit: u32,
125 },
126 List {
128 #[arg(long)]
129 status: Option<String>,
130 #[arg(long, default_value = "1")]
131 page: u32,
132 #[arg(long, default_value = "20")]
133 page_size: u32,
134 },
135 Show { app_id: String },
137 Update {
139 app_id: String,
140 #[arg(long)]
141 name: Option<String>,
142 #[arg(long)]
143 default_db: Option<String>,
144 #[arg(long)]
145 allowed_dbs: Option<String>,
146 #[arg(long)]
147 max_users: Option<u32>,
148 #[arg(long)]
149 storage_quota: Option<u32>,
150 #[arg(long)]
151 max_connections: Option<u32>,
152 #[arg(long)]
153 qps_limit: Option<u32>,
154 },
155 Enable { app_id: String },
157 Disable { app_id: String },
159 Delete {
161 app_id: String,
162 #[arg(long)]
163 force: bool,
164 },
165 ResetToken { app_id: String },
167 Stats { app_id: String },
169}
170
171#[derive(Debug, Clone, Subcommand)]
172pub enum UserCommands {
173 Create {
175 app_id: String,
177 #[arg(long)]
179 token: Option<String>,
180 #[arg(long)]
182 label: Option<String>,
183 #[arg(long)]
185 storage_quota: Option<u32>,
186 #[arg(long)]
188 max_connections: Option<u32>,
189 #[arg(long)]
191 qps_limit: Option<u32>,
192 },
193 List {
195 app_id: String,
197 #[arg(long)]
199 status: Option<String>,
200 #[arg(long, default_value = "1")]
202 page: u32,
203 #[arg(long, default_value = "20")]
205 page_size: u32,
206 },
207 Show {
209 app_id: String,
211 user_uid: String,
213 },
214 Update {
216 app_id: String,
218 user_uid: String,
220 #[arg(long)]
222 label: Option<String>,
223 #[arg(long)]
225 storage_quota: Option<String>,
226 #[arg(long)]
228 max_connections: Option<String>,
229 #[arg(long)]
231 qps_limit: Option<String>,
232 },
233 Enable {
235 app_id: String,
237 user_uid: String,
239 },
240 Disable {
242 app_id: String,
244 user_uid: String,
246 },
247 Delete {
249 app_id: String,
251 user_uid: String,
253 #[arg(long)]
255 force: bool,
256 },
257 ResetToken {
259 app_id: String,
261 user_uid: String,
263 },
264 Stats {
266 app_id: String,
268 user_uid: String,
270 },
271}
272
273#[derive(Debug, Clone, Subcommand)]
274pub enum AdminCommands {
275 Users {
277 #[command(subcommand)]
278 command: AdminUsersCommands,
279 },
280 Stats,
282}
283
284#[derive(Debug, Clone, Subcommand)]
285pub enum AdminUsersCommands {
286 List {
287 #[arg(long)]
288 role: Option<String>,
289 #[arg(long)]
290 status: Option<String>,
291 #[arg(long, default_value = "1")]
292 page: u32,
293 #[arg(long, default_value = "20")]
294 page_size: u32,
295 },
296 Show { user_id: String },
297 Create {
298 #[arg(long)]
299 username: String,
300 #[arg(long)]
301 email: String,
302 #[arg(long, default_value = "user")]
303 role: String,
304 #[arg(long)]
305 password: Option<String>,
306 },
307 Enable { user_id: String },
308 Disable { user_id: String },
309 SetRole {
310 user_id: String,
311 #[arg(long)]
312 role: String,
313 },
314}
315
316#[derive(Debug, Clone, Subcommand)]
317pub enum ConfigCommands {
318 Set { key: String, value: String },
319 Get { key: String },
320 List,
321 Reset,
322}