1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use actix_session::Session;
use serde::{Deserialize, Serialize};
use uuid::Uuid;

#[derive(Serialize, Deserialize)]
pub struct User {
    pub userid: Uuid,
    pub username: String,
    pub email: String,
    pub password: String,
    pub birth: i64,
    pub permissions: Vec<String>,
    pub sessions: Vec<Uuid>,
}

pub fn parse_user(
    doc: mongodb::bson::document::Document,
) -> Result<User, mongodb::bson::de::Error> {
    Ok(mongodb::bson::from_bson(mongodb::bson::Bson::Document(
        doc,
    ))?)
}

pub fn validate_session(session: &Session) -> Result<Uuid, actix_web::Error> {
    match session.get("uuid")? {
        Some(id) => Ok(id),
        None => {
            let id = Uuid::new_v4();
            session.set("uuid", id)?;
            Ok(id)
        }
    }
}