Skip to main content

lanflare_core/
config.rs

1use std::path::PathBuf;
2use serde::{Deserialize, Serialize};
3
4fn default_save_to_history() -> bool {
5    true
6}
7
8fn default_multicast_address() -> String {
9    "224.0.0.167".to_string()
10}
11
12fn default_share_link_auto_accept() -> bool {
13    false
14}
15
16fn default_share_link_require_pin() -> bool {
17    true
18}
19
20/// Generates a reasonable random 6-character PIN containing no '@', ':', or '/'
21pub fn generate_share_link_pin() -> String {
22    use rand::Rng;
23    const CHARSET: &[u8] = b"23456789abcdefghjkmnpqrstuvwxyz";
24    let mut rng = rand::rng();
25    (0..6)
26        .map(|_| {
27            let idx = rng.random_range(0..CHARSET.len());
28            CHARSET[idx] as char
29        })
30        .collect()
31}
32
33fn default_share_link_pin() -> String {
34    generate_share_link_pin()
35}
36
37/// Global runtime configuration for LanFlare.
38#[derive(Clone, Debug, Serialize, Deserialize)]
39pub struct AppConfig {
40    pub alias: String,
41    pub port: u16,
42    pub download_dir: PathBuf,
43    pub auto_accept: bool,
44    pub pin: Option<String>,
45    #[serde(default = "default_save_to_history")]
46    pub save_to_history: bool,
47    #[serde(default = "default_multicast_address")]
48    pub multicast_address: String,
49    #[serde(default = "default_share_link_auto_accept")]
50    pub share_link_auto_accept: bool,
51    #[serde(default = "default_share_link_require_pin")]
52    pub share_link_require_pin: bool,
53    #[serde(default = "default_share_link_pin")]
54    pub share_link_pin: String,
55}
56
57impl Default for AppConfig {
58    fn default() -> Self {
59        #[cfg(target_os = "android")]
60        let download_dir = PathBuf::from("/storage/emulated/0/Download");
61        #[cfg(not(target_os = "android"))]
62        let download_dir = dirs::download_dir().unwrap_or_else(|| PathBuf::from("."));
63
64        Self {
65
66            alias: "LanFlare Node".to_string(),
67            port: 53317,
68            download_dir,
69            auto_accept: false,
70
71            pin: None,
72            save_to_history: true,
73            multicast_address: default_multicast_address(),
74            share_link_auto_accept: false,
75            share_link_require_pin: true,
76            share_link_pin: generate_share_link_pin(),
77        }
78    }
79}