use std::sync::Arc;
use cookie::{Cookie, CookieJar, PrivateJar, SameSite};
use serde_json::json;
use uuid::Uuid;
use crate::db::{decode, encode};
use crate::error::{ErrorKind, Result};
use crate::{util, Config, Database, User, UserId};
use super::TokenMeta;
pub fn log_in_user_email<'c>(user_email: &str, db: &Database) -> Result<Cookie<'c>> {
let users = db.get_collection::<User>()?;
let mut matched_user_id = users.iter().find(|u| &u.email == user_email).map(|u| u.id);
if let Some(user_id) = matched_user_id {
return log_in_user_id(&user_id, db);
} else {
return Err(ErrorKind::UserNotFound(format!("email: {}", user_email)).into());
}
}
pub fn log_in_user_id<'c>(user_id: &UserId, db: &Database) -> Result<Cookie<'c>> {
let tokens = db.get_collection::<TokenMeta>()?;
for auth_token in tokens {
if &auth_token.user_id == user_id {
return Ok(Cookie::build(("token", auth_token.id.to_string()))
.same_site(SameSite::Lax)
.path("/")
.secure(true)
.finish());
}
}
let auth_token = TokenMeta::new(*user_id);
db.set(&auth_token)?;
return Ok(Cookie::build(("token", auth_token.id.to_string()))
.same_site(SameSite::Lax)
.path("/")
.secure(true)
.finish());
}