1use std::env;
7
8#[derive(Debug, Clone)]
9pub struct Config {
10 pub app_name: String,
11 pub app_port: u16,
12 pub app_host: String,
13 pub app_key: String,
14 pub app_debug: bool,
15 pub app_url: String,
16 pub app_timezone: String,
17 pub app_limit_request: u64,
18 pub vite_port: u16,
19 pub websocket_enabled: bool,
20
21 pub db_connection: String,
23 pub db_host: String,
24 pub db_port: u16,
25 pub db_database: String,
26 pub db_username: String,
27 pub db_password: String,
28
29 pub session_driver: String,
31
32 pub mail_host: String,
34 pub mail_port: u16,
35 pub mail_username: String,
36 pub mail_password: String,
37 pub mail_from_address: String,
38 pub mail_from_name: String,
39}
40
41impl Config {
42 pub fn load() -> Self {
43 Self {
44 app_name: env::var("APP_NAME").unwrap_or_else(|_| "RustBasic".to_string()),
45 app_port: env::var("APP_PORT")
46 .unwrap_or_else(|_| "4000".to_string())
47 .parse()
48 .expect("APP_PORT harus berupa angka"),
49 app_host: env::var("APP_HOST").unwrap_or_else(|_| "0.0.0.0".to_string()),
50 app_key: {
51 let key = env::var("APP_KEY").unwrap_or_default();
52 if key.is_empty() {
53 eprintln!("\nā Error: APP_KEY belum dikonfigurasi di file .env!");
54 eprintln!("š” Silakan jalankan perintah berikut untuk membuat key baru:");
55 eprintln!(" cargo rustbasic key:generate\n");
56 std::process::exit(1);
57 }
58 key
59 },
60 app_debug: env::var("APP_DEBUG").unwrap_or_else(|_| "false".to_string()).parse().unwrap_or(false),
61 app_url: {
62 let mut url = env::var("APP_URL").unwrap_or_else(|_| "http://localhost:4000".to_string());
63 let port = env::var("APP_PORT").unwrap_or_else(|_| "4000".to_string());
64 if url.starts_with("http://localhost:") || url == "http://localhost" {
65 url = format!("http://localhost:{}", port);
66 } else if url.starts_with("http://127.0.0.1:") || url == "http://127.0.0.1" {
67 url = format!("http://127.0.0.1:{}", port);
68 }
69 url
70 },
71 app_timezone: env::var("APP_TIMEZONE").unwrap_or_else(|_| "UTC".to_string()),
72 app_limit_request: env::var("APP_LIMIT_REQUEST")
73 .unwrap_or_else(|_| "20".to_string())
74 .parse()
75 .expect("APP_LIMIT_REQUEST harus berupa angka"),
76 vite_port: env::var("VITE_PORT")
77 .unwrap_or_else(|_| "5173".to_string())
78 .parse()
79 .expect("VITE_PORT harus berupa angka"),
80 websocket_enabled: env::var("WEBSOCKET_ENABLED")
81 .unwrap_or_else(|_| "false".to_string())
82 .parse()
83 .unwrap_or(false),
84
85 db_connection: env::var("DB_CONNECTION").unwrap_or_else(|_| "sqlite".to_string()),
87 db_host: env::var("DB_HOST").unwrap_or_else(|_| "127.0.0.1".to_string()),
88 db_port: env::var("DB_PORT")
89 .unwrap_or_else(|_| "3306".to_string())
90 .parse()
91 .expect("DB_PORT harus berupa angka"),
92 db_database: env::var("DB_DATABASE").unwrap_or_else(|_| "rustbasic".to_string()),
93 db_username: env::var("DB_USERNAME").unwrap_or_else(|_| "root".to_string()),
94 db_password: env::var("DB_PASSWORD").unwrap_or_default(),
95
96 session_driver: env::var("SESSION_DRIVER").unwrap_or_else(|_| "database".to_string()),
98
99 mail_host: env::var("MAIL_HOST").unwrap_or_else(|_| "smtp.mailtrap.io".to_string()),
101 mail_port: env::var("MAIL_PORT")
102 .unwrap_or_else(|_| "2525".to_string())
103 .parse()
104 .expect("MAIL_PORT harus berupa angka"),
105 mail_username: env::var("MAIL_USERNAME").unwrap_or_else(|_| "null".to_string()),
106 mail_password: env::var("MAIL_PASSWORD").unwrap_or_else(|_| "null".to_string()),
107 mail_from_address: env::var("MAIL_FROM_ADDRESS").unwrap_or_else(|_| "hello@example.com".to_string()),
108 mail_from_name: env::var("MAIL_FROM_NAME").unwrap_or_else(|_| "RustBasic".to_string()),
109 }
110 }
111
112}