use crate::app::{AppArgs, AppConfig, AppPreferences}; use crate::cookie::SecureCookie; use actix_web::cookie::Cookie; use structopt::StructOpt; #[derive(Clone)] pub struct AppState { pub config: AppConfig, pub preferences: AppPreferences, pub admin_auth_token: AdminAuthToken, } impl AppState { pub fn new() -> Self { let config = AppConfig::new(AppArgs::from_args()); let admin_cookie_name = config.admin_cookie_name.to_owned(); AppState { config, 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()) } }