rustbasic_cli/
publisher.rs1use std::fs;
2use std::path::Path;
3use rustbasic_core::colored::*;
4
5pub fn publish_config(target: &str) {
6 let mut selected_target = target.to_string();
7 if selected_target.is_empty() {
8 println!("đ ī¸ RustBasic Configuration Publisher");
9 println!("Pilih konfigurasi yang ingin dipublikasikan ke proyek Anda:");
10 println!(" [1] CORS (Cross-Origin Resource Sharing)");
11 println!(" [2] CSRF (Cross-Site Request Forgery)");
12 println!(" [3] APP (Application settings & Storage path overrides)");
13 let choice = crate::utils::prompt_choice("đ Pilih nomor konfigurasi (1-3): ", 1, 3);
14 match choice {
15 1 => selected_target = "cors".to_string(),
16 2 => selected_target = "csrf".to_string(),
17 3 => selected_target = "app".to_string(),
18 _ => return,
19 }
20 }
21
22 match selected_target.as_str() {
23 "cors" => {
24 let path = Path::new("src/config/cors.rs");
25 if path.exists() {
26 println!("âšī¸ File cors.rs sudah ada di src/config/cors.rs");
27 return;
28 }
29 if let Some(parent) = path.parent() {
30 let _ = fs::create_dir_all(parent);
31 }
32 let content = r#"/* ---------------------------------------------------------
33 * đ LABEL: CORS CONFIGURATION (src/config/cors.rs)
34 * Berkas konfigurasi tambahan untuk kustomisasi CORS.
35 * --------------------------------------------------------- */
36
37pub struct CorsConfig {
38 pub allowed_origins: Vec<&'static str>,
39 pub allowed_methods: Vec<&'static str>,
40 pub allowed_headers: Vec<&'static str>,
41}
42
43impl Default for CorsConfig {
44 fn default() -> Self {
45 Self {
46 allowed_origins: vec!["*"],
47 allowed_methods: vec!["GET", "POST", "PUT", "DELETE", "OPTIONS"],
48 allowed_headers: vec!["*"],
49 }
50 }
51}
52"#;
53 if fs::write(path, content).is_ok() {
54 println!("{} {}", "â
Berhasil mempublikasikan konfigurasi CORS ke:".green().bold(), path.display().to_string().cyan());
55 println!("đĄ File ini sekarang dapat diimpor untuk menyesuaikan aturan CORS lokal.");
56 } else {
57 println!("â Gagal menulis file CORS config.");
58 }
59 }
60 "csrf" => {
61 let path = Path::new("src/config/csrf.rs");
62 if path.exists() {
63 println!("âšī¸ File csrf.rs sudah ada di src/config/csrf.rs");
64 return;
65 }
66 if let Some(parent) = path.parent() {
67 let _ = fs::create_dir_all(parent);
68 }
69 let content = r#"/* ---------------------------------------------------------
70 * đ LABEL: CSRF CONFIGURATION (src/config/csrf.rs)
71 * Berkas konfigurasi tambahan untuk perlindungan CSRF.
72 * --------------------------------------------------------- */
73
74pub struct CsrfConfig {
75 pub except_paths: Vec<&'static str>,
76}
77
78impl Default for CsrfConfig {
79 fn default() -> Self {
80 Self {
81 except_paths: vec![], // Masukkan rute yang dikecualikan dari CSRF di sini
82 }
83 }
84}
85"#;
86 if fs::write(path, content).is_ok() {
87 println!("{} {}", "â
Berhasil mempublikasikan konfigurasi CSRF ke:".green().bold(), path.display().to_string().cyan());
88 println!("đĄ File ini sekarang dapat diimpor untuk mengecualikan rute tertentu dari CSRF.");
89 } else {
90 println!("â Gagal menulis file CSRF config.");
91 }
92 }
93 "app" => {
94 let path = Path::new("src/config/app.rs");
95 if path.exists() {
96 println!("âšī¸ File app.rs sudah ada di src/config/app.rs");
97 return;
98 }
99 if let Some(parent) = path.parent() {
100 let _ = fs::create_dir_all(parent);
101 }
102 let content = r#"/* ---------------------------------------------------------
103 * đ LABEL: APP CONFIGURATION (src/config/app.rs)
104 * Berkas konfigurasi tambahan untuk kustomisasi lokasi storage lokal.
105 * --------------------------------------------------------- */
106
107pub const STORAGE_TARGET: &str = "public/storage";
108pub const STORAGE_SOURCE: &str = "storage/app/public";
109"#;
110 if fs::write(path, content).is_ok() {
111 println!("{} {}", "â
Berhasil mempublikasikan konfigurasi APP ke:".green().bold(), path.display().to_string().cyan());
112 } else {
113 println!("â Gagal menulis file APP config.");
114 }
115 }
116 _ => {
117 println!("â Target '{}' tidak dikenal untuk di-publish.", selected_target);
118 println!("đĄ Target yang didukung: cors, csrf, app");
119 }
120 }
121}