Skip to main content

kura_cli/commands/
access.rs

1use clap::{Subcommand, ValueEnum};
2use serde_json::json;
3
4use crate::util::api_request;
5
6#[derive(Subcommand)]
7pub enum AccessCommands {
8    /// Submit a public access request
9    Request {
10        /// Contact email
11        #[arg(long)]
12        email: String,
13        /// Optional display name
14        #[arg(long)]
15        name: Option<String>,
16        /// Optional context for your request
17        #[arg(long)]
18        context: Option<String>,
19        /// Optional locale (de|en|ja)
20        #[arg(long)]
21        locale: Option<AccessLocale>,
22        /// Optional Turnstile token
23        #[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}