1use std::path::PathBuf;
6
7use clap::Parser;
8use hmac::{digest::InvalidLength, Hmac, Mac};
9use sha2::Sha256;
10
11use crate::pathutils::Paths;
12
13#[derive(Parser, Clone)]
14pub struct EnvVars {
15 #[arg(env)]
17 pub db_name: String,
19 #[arg(env)]
20 pub db_host: String,
22 #[arg(env)]
23 pub db_port: String,
25 #[arg(env)]
26 pub db_user: String,
28 #[arg(env)]
29 pub db_password: String,
31
32 #[arg(env)]
34 pub gh_client_id: String,
36 #[arg(env)]
37 pub gh_org_admin_token: String,
39 #[arg(env)]
40 jwt_secret: String,
42 #[arg(env)]
43 pub gh_client_secret: String,
45 #[arg(env, default_value = "")]
46 pub gh_org_name: String,
48 #[arg(env, default_value = "")]
49 pub gh_org_team_slug: String,
51 #[arg(env, default_value = "")]
52 pub gh_admin_usernames: String,
54 #[arg(env, default_value = "")]
55 pub slack_webhook_url: String,
57
58 #[arg(env, default_value = "10")]
60 pub max_upload_limit: usize,
62 #[arg(env, default_value = "./log/application.log")]
63 pub log_location: PathBuf,
65
66 #[arg(env, default_value = "https://static.metakgp.org")]
68 static_files_url: String,
70 #[arg(env, default_value = "/srv/static")]
71 static_file_storage_location: PathBuf,
73 #[arg(env, default_value = "/iqps/uploaded")]
74 uploaded_qps_path: PathBuf,
76 #[arg(env, default_value = "/peqp/qp")]
77 library_qps_path: PathBuf,
79
80 #[arg(env, default_value = "8080")]
82 pub server_port: i32,
84
85 #[arg(env, default_value = "https://qp.metakgp.org,http://localhost:5173")]
87 pub cors_allowed_origins: String,
89
90 #[arg(skip)]
91 pub paths: Paths,
93}
94
95impl EnvVars {
96 pub fn process(mut self) -> Result<Self, Box<dyn std::error::Error>> {
98 self.paths = Paths::new(
99 &self.static_files_url,
100 &self.static_file_storage_location,
101 &self.uploaded_qps_path,
102 &self.library_qps_path,
103 )?;
104 self.log_location = std::path::absolute(self.log_location)?;
105
106 Ok(self)
107 }
108
109 pub fn get_jwt_key(&self) -> Result<Hmac<Sha256>, InvalidLength> {
111 Hmac::new_from_slice(self.jwt_secret.as_bytes())
112 }
113}