Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
state.rs 1.46 KiB
Newer Older
peterrabbit's avatar
peterrabbit committed
use crate::app::{AppArgs, AppConfig, AppPreferences};
use rand::{distributions::Alphanumeric, Rng};
peterrabbit's avatar
peterrabbit committed
use structopt::StructOpt;
peterrabbit's avatar
peterrabbit committed

#[derive(Clone)]
pub struct AppState {
    pub config: AppConfig,
    pub preferences: AppPreferences,
    pub admin_auth_token: AdminAuthToken,
peterrabbit's avatar
peterrabbit committed
}

impl AppState {
    pub fn new() -> Self {
        let config = AppConfig::new(AppArgs::from_args());
        let admin_cookie_name = config.admin_cookie_name.to_owned();
peterrabbit's avatar
peterrabbit committed
        AppState {
            config,
peterrabbit's avatar
peterrabbit committed
            preferences: AppPreferences {},
            admin_auth_token: AdminAuthToken::new(admin_cookie_name),

#[derive(Clone)]
pub struct AdminAuthToken {
    pub value: Option<String>,
    pub cookie_name: String,
}

impl AdminAuthToken {
    pub fn new(cookie_name: String) -> Self {
        AdminAuthToken {
            value: None,
            cookie_name,
        }
    }

    pub fn match_value(&self, value: String) -> bool {
        match &self.value {
            Some(token) => token.eq(&value),
            None => false,
        }
    }

    pub fn generate(&mut self) {
        // Thanks to https://stackoverflow.com/questions/54275459/how-do-i-create-a-random-string-by-sampling-from-alphanumeric-characters#54277357
        self.value = Some(
            rand::thread_rng()
                .sample_iter(&Alphanumeric)
                .take(36)
                .map(char::from)
                .collect::<String>()
                .to_ascii_lowercase(),
        )
    }
}