kura_cli/commands/
access.rs1use clap::{Subcommand, ValueEnum};
2use serde_json::json;
3
4use crate::util::api_request;
5
6#[derive(Subcommand)]
7pub enum AccessCommands {
8 Request {
10 #[arg(long)]
12 email: String,
13 #[arg(long)]
15 name: Option<String>,
16 #[arg(long)]
18 context: Option<String>,
19 #[arg(long)]
21 locale: Option<AccessLocale>,
22 #[arg(long)]
24 turnstile_token: Option<String>,
25 },
26}
27
28#[derive(Copy, Clone, Debug, Eq, PartialEq, ValueEnum)]
29pub enum AccessLocale {
30 De,
31 En,
32 Ja,
33}
34
35impl AccessLocale {
36 fn as_str(self) -> &'static str {
37 match self {
38 AccessLocale::De => "de",
39 AccessLocale::En => "en",
40 AccessLocale::Ja => "ja",
41 }
42 }
43}
44
45pub async fn run(api_url: &str, command: AccessCommands) -> i32 {
46 match command {
47 AccessCommands::Request {
48 email,
49 name,
50 context,
51 locale,
52 turnstile_token,
53 } => request(api_url, &email, name, context, locale, turnstile_token).await,
54 }
55}
56
57async fn request(
58 api_url: &str,
59 email: &str,
60 name: Option<String>,
61 context: Option<String>,
62 locale: Option<AccessLocale>,
63 turnstile_token: Option<String>,
64) -> i32 {
65 let mut body = json!({
66 "email": email,
67 });
68
69 if let Some(name) = name {
70 body["name"] = json!(name);
71 }
72 if let Some(context) = context {
73 body["context"] = json!(context);
74 }
75 if let Some(locale) = locale {
76 body["locale"] = json!(locale.as_str());
77 }
78 if let Some(token) = turnstile_token {
79 body["turnstile_token"] = json!(token);
80 }
81
82 api_request(
83 api_url,
84 reqwest::Method::POST,
85 "/v1/access/request",
86 None,
87 Some(body),
88 &[],
89 &[],
90 false,
91 false,
92 )
93 .await
94}