use std::sync::Arc;
use sea_orm::DatabaseConnection;
use crate::plugins::users::config::UsersConfig;
#[derive(Clone)]
pub struct UsersState {
pub db: DatabaseConnection,
pub config: UsersConfig,
pub signing_key: Arc<Vec<u8>>,
pub jwt_issuer: Arc<Vec<u8>>,
}
impl UsersState {
pub fn new(db: DatabaseConnection, config: UsersConfig) -> Self {
let signing_key = Arc::new(config.signing_key_bytes());
let jwt_issuer = Arc::new(config.jwt_issuer_bytes());
Self {
db,
config,
signing_key,
jwt_issuer,
}
}
}
use chrono::{DateTime, Utc};
use crate::datetime::{DatetimeLabel, DatetimeLocalInput};
#[derive(Clone, Debug)]
pub struct AuthContext {
pub user: crate::plugins::users::entities::User,
pub role: String,
pub timezone: String,
pub is_staff: bool,
}
impl AuthContext {
pub fn format_datetime(&self, dt: DateTime<Utc>) -> DatetimeLabel {
DatetimeLabel::display(dt, &self.timezone)
}
pub fn format_datetime_short(&self, dt: DateTime<Utc>) -> DatetimeLabel {
DatetimeLabel::short(dt, &self.timezone)
}
pub fn format_datetime_seconds(&self, dt: DateTime<Utc>) -> DatetimeLabel {
DatetimeLabel::seconds(dt, &self.timezone)
}
pub fn datetime_local_input(&self, dt: DateTime<Utc>) -> DatetimeLocalInput {
DatetimeLocalInput::from_stored(dt, &self.timezone)
}
pub fn parse_datetime_local_input(&self, value: &str) -> Option<DateTime<Utc>> {
DatetimeLocalInput::from_raw(value).to_stored(&self.timezone)
}
}