Skip to main content

oauth_db_cli/
cli.rs

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    /// Server URL (overrides config)
9    #[arg(short, long, global = true)]
10    pub server: Option<String>,
11
12    /// Output format (table, json, yaml)
13    #[arg(short, long, global = true)]
14    pub output: Option<String>,
15
16    /// Disable colored output
17    #[arg(long, global = true)]
18    pub no_color: bool,
19
20    /// Verbose output
21    #[arg(short, long, global = true)]
22    pub verbose: bool,
23
24    /// Quiet mode
25    #[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 to the platform
35    Login(LoginArgs),
36
37    /// Logout from the current account
38    Logout,
39
40    /// Show current user information
41    Whoami,
42
43    /// Manage accounts
44    Accounts {
45        #[command(subcommand)]
46        command: AccountsCommands,
47    },
48
49    /// Manage applications
50    App {
51        #[command(subcommand)]
52        command: AppCommands,
53    },
54
55    /// Manage application users
56    User {
57        #[command(subcommand)]
58        command: UserCommands,
59    },
60
61    /// Platform administration (admin only)
62    Admin {
63        #[command(subcommand)]
64        command: AdminCommands,
65    },
66
67    /// Manage CLI configuration
68    Config {
69        #[command(subcommand)]
70        command: ConfigCommands,
71    },
72}
73
74#[derive(Debug, Clone, Parser)]
75pub struct LoginArgs {
76    /// Server URL
77    #[arg(short, long)]
78    pub server: Option<String>,
79
80    /// Username
81    #[arg(short, long)]
82    pub username: Option<String>,
83
84    /// Password (will prompt if not provided)
85    #[arg(short, long)]
86    pub password: Option<String>,
87}
88
89#[derive(Debug, Clone, Subcommand)]
90pub enum AccountsCommands {
91    /// List all saved accounts
92    List,
93
94    /// Switch to a different account
95    Switch {
96        /// Account name to switch to
97        name: String,
98    },
99
100    /// Remove an account
101    Remove {
102        /// Account name to remove
103        name: String,
104    },
105}
106
107#[derive(Debug, Clone, Subcommand)]
108pub enum AppCommands {
109    /// Create a new application
110    Create {
111        /// Application name
112        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 applications
127    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 application details
136    Show { app_id: String },
137    /// Update application settings
138    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 an application
156    Enable { app_id: String },
157    /// Disable an application
158    Disable { app_id: String },
159    /// Delete an application
160    Delete {
161        app_id: String,
162        #[arg(long)]
163        force: bool,
164    },
165    /// Reset application token
166    ResetToken { app_id: String },
167    /// Show application statistics
168    Stats { app_id: String },
169}
170
171#[derive(Debug, Clone, Subcommand)]
172pub enum UserCommands {
173    /// Create a new application user
174    Create {
175        /// Application ID
176        app_id: String,
177        /// Custom token (optional)
178        #[arg(long)]
179        token: Option<String>,
180        /// Label for the user
181        #[arg(long)]
182        label: Option<String>,
183        /// Storage quota (MB)
184        #[arg(long)]
185        storage_quota: Option<u32>,
186        /// Max connections
187        #[arg(long)]
188        max_connections: Option<u32>,
189        /// QPS limit
190        #[arg(long)]
191        qps_limit: Option<u32>,
192    },
193    /// List application users
194    List {
195        /// Application ID
196        app_id: String,
197        /// Filter by status
198        #[arg(long)]
199        status: Option<String>,
200        /// Page number
201        #[arg(long, default_value = "1")]
202        page: u32,
203        /// Page size
204        #[arg(long, default_value = "20")]
205        page_size: u32,
206    },
207    /// Show user details
208    Show {
209        /// Application ID
210        app_id: String,
211        /// User UID
212        user_uid: String,
213    },
214    /// Update user
215    Update {
216        /// Application ID
217        app_id: String,
218        /// User UID
219        user_uid: String,
220        /// New label
221        #[arg(long)]
222        label: Option<String>,
223        /// Storage quota (MB, use 'null' to inherit)
224        #[arg(long)]
225        storage_quota: Option<String>,
226        /// Max connections (use 'null' to inherit)
227        #[arg(long)]
228        max_connections: Option<String>,
229        /// QPS limit (use 'null' to inherit)
230        #[arg(long)]
231        qps_limit: Option<String>,
232    },
233    /// Enable user
234    Enable {
235        /// Application ID
236        app_id: String,
237        /// User UID
238        user_uid: String,
239    },
240    /// Disable user
241    Disable {
242        /// Application ID
243        app_id: String,
244        /// User UID
245        user_uid: String,
246    },
247    /// Delete user
248    Delete {
249        /// Application ID
250        app_id: String,
251        /// User UID
252        user_uid: String,
253        /// Skip confirmation
254        #[arg(long)]
255        force: bool,
256    },
257    /// Reset user token
258    ResetToken {
259        /// Application ID
260        app_id: String,
261        /// User UID
262        user_uid: String,
263    },
264    /// Show user statistics
265    Stats {
266        /// Application ID
267        app_id: String,
268        /// User UID
269        user_uid: String,
270    },
271}
272
273#[derive(Debug, Clone, Subcommand)]
274pub enum AdminCommands {
275    /// Manage platform users
276    Users {
277        #[command(subcommand)]
278        command: AdminUsersCommands,
279    },
280    /// Show system statistics
281    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}