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.28 KiB
Newer Older
peterrabbit's avatar
peterrabbit committed
use crate::app::{AppArgs, AppConfig, AppPreferences};
use crate::cookie::SecureCookie;
use actix_web::cookie::Cookie;
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 update_value(&mut self) {
        self.value = Some(SecureCookie::generate_token(36))
    }

    pub fn generate_cookie(&mut self) -> Cookie {
        SecureCookie::new(&self.cookie_name, self.value.as_ref().unwrap())