Removed moved service

This commit is contained in:
didier amyot committed 2023-03-09 08:57:40 -05:00
1 parent 54aa1cc0ad
commit e14af22d3c
1 file changed
+16 -41
+16 -41
View File
@@ -11,40 +11,6 @@ use crate::db::external_id::UserId;
use crate::services::ReadOnlyServiceFactory; use crate::services::ReadOnlyServiceFactory;
use crate::SQLiteConnectionFactory; use crate::SQLiteConnectionFactory;
struct SessionService {
key: Key,
}
impl SessionService {
fn new() -> SessionService{
let super_secret_not_hardcoded_at_all: [u8; 32] = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
SessionService{key: Key::derive_from(&super_secret_not_hardcoded_at_all)}
}
fn create_login_cookie(&self, user_id: &String ) -> Cookie{
let mut jar = CookieJar::new();
jar.private_mut(& self.key).add(Cookie::new("ledger-user-id", user_id.clone()));
jar.get("ledger-user-id").unwrap_or(& Cookie::new("ledger-user-id", "")).clone()
}
fn _decrypt_cookie(&self, cookie: Cookie<'static>) -> Option<Cookie>{
let mut jar = CookieJar::new();
jar.private(& self.key).decrypt(cookie)
}
fn get_login(&self, req: &HttpRequest) -> Option<String> {
req.cookie("ledger-user-id").and_then(|c|self._decrypt_cookie(c)).map(|c| c.value().to_string())
}
fn logout(&self) -> Cookie{
let mut cookie = Cookie::new("ledger-user-id", "");
let epoch = OffsetDateTime::from_unix_timestamp_nanos(0).unwrap();
cookie.set_expires(epoch);
cookie
}
}
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
struct LoginPayload { struct LoginPayload {
username: String, username: String,
@@ -69,20 +35,29 @@ pub async fn login(
} }
#[actix_web::post("/logout")] #[actix_web::post("/logout")]
pub async fn logout(tmpl_env: MiniJinjaRenderer) -> actix_web::Result<impl Responder> { pub async fn logout(conn_factory: web::Data<SQLiteConnectionFactory>,
let ctx = context! {}; tmpl_env: MiniJinjaRenderer) -> actix_web::Result<impl Responder> {
let s = SessionService::new();
let res = tmpl_env.render("partials/index/form.html", ctx)?; let mut conn = conn_factory.readonly().unwrap(); // todo; to proper 500
let mut service_factory = ReadOnlyServiceFactory::new(&mut conn);
let authentication_service = service_factory.get_authentication_service().unwrap();
let res = tmpl_env.render("partials/index/form.html", context! {})?;
Ok(res Ok(res
.customize() .customize()
.insert_header(("Set-Cookie", s.logout().to_string()))) .insert_header(("Set-Cookie", authentication_service.logout().to_string())))
} }
#[actix_web::get("/")] #[actix_web::get("/")]
pub async fn index(req: HttpRequest, pub async fn index(req: HttpRequest,
conn_factory: web::Data<SQLiteConnectionFactory>,
tmpl_env: MiniJinjaRenderer) -> actix_web::Result<impl Responder> { tmpl_env: MiniJinjaRenderer) -> actix_web::Result<impl Responder> {
let s = SessionService::new();
let userid = & s.get_login(& req); let mut conn = conn_factory.readonly().unwrap(); // todo; to proper 500
let mut service_factory = ReadOnlyServiceFactory::new(&mut conn);
let authentication_service = service_factory.get_authentication_service().unwrap();
let userid = authentication_service.get_login(& req);;
let username = userid.clone().unwrap_or("".to_string()); let username = userid.clone().unwrap_or("".to_string());
let ctx = context!{ let ctx = context!{
is_logged_in => userid.is_some(), is_logged_in => userid.is_some(),