From f59c6f472d25084aa5f8a116f8cf92f81df09c50 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 26 Jan 2026 20:04:40 +0100 Subject: can render login ui --- server/src/auth.rs | 2 +- server/src/logger.rs | 2 +- server/src/routes.rs | 9 ++-- server/src/ui/account/mod.rs | 101 ++++++++++--------------------------------- 4 files changed, 29 insertions(+), 85 deletions(-) (limited to 'server') diff --git a/server/src/auth.rs b/server/src/auth.rs index 0e523ed..ed9a469 100644 --- a/server/src/auth.rs +++ b/server/src/auth.rs @@ -42,7 +42,7 @@ pub fn login(state: &State, username: &str, password: &str, expire: Option) user = state.users.get(txn, ur)?; } Ok(()) - }); + })?; let (Some(user_row), Some(user)) = (user_row, user) else { bail!("unknown user"); diff --git a/server/src/logger.rs b/server/src/logger.rs index 9195b99..e7419ba 100644 --- a/server/src/logger.rs +++ b/server/src/logger.rs @@ -30,7 +30,7 @@ pub struct LogLine { } #[derive(Serialize, Deserialize, Clone, Copy, PartialEq)] -enum LogLevel { +pub enum LogLevel { Trace, Debug, Info, diff --git a/server/src/routes.rs b/server/src/routes.rs index 01d0081..bf6865e 100644 --- a/server/src/routes.rs +++ b/server/src/routes.rs @@ -12,6 +12,7 @@ use crate::{ stream::r_stream, }, ui::{ + account::{r_account_login, r_account_login_post, r_account_logout, r_account_logout_post}, assets::r_image, error::{r_api_catch, r_catch}, node::r_node, @@ -64,10 +65,10 @@ pub(super) fn build_rocket(state: Arc) -> Rocket { "/", routes![ // Frontend - // r_account_login_post, - // r_account_login, - // r_account_logout_post, - // r_account_logout, + r_account_login_post, + r_account_login, + r_account_logout_post, + r_account_logout, // r_account_register_post, // r_account_register, // r_account_settings_post, diff --git a/server/src/ui/account/mod.rs b/server/src/ui/account/mod.rs index ec8bd49..765b6aa 100644 --- a/server/src/ui/account/mod.rs +++ b/server/src/ui/account/mod.rs @@ -6,13 +6,9 @@ // pub mod settings; use super::error::MyError; -use crate::{ - request_info::RequestInfo, - ui::{error::MyResult, home::rocket_uri_macro_r_home}, -}; +use crate::{auth::login, request_info::RequestInfo, ui::error::MyResult}; use anyhow::anyhow; -use jellycommon::{VIEW_ACCOUNT_LOGIN, jellyobject::Object}; -use jellyimport::is_importing; +use jellycommon::{VIEW_ACCOUNT_LOGIN, VIEW_ACCOUNT_LOGOUT, jellyobject::Object, routes::u_home}; use jellyui::render_view; use rocket::{ FromForm, @@ -20,7 +16,7 @@ use rocket::{ get, http::{Cookie, CookieJar}, post, - response::{Redirect, content::RawHtml}, + response::{Flash, Redirect, content::RawHtml}, }; use serde::{Deserialize, Serialize}; @@ -34,12 +30,18 @@ pub struct RegisterForm { pub password: String, } -#[get("/account/register")] -pub async fn r_account_register(ri: RequestInfo<'_>) -> RawHtml { +#[get("/account/login")] +pub async fn r_account_login(ri: RequestInfo<'_>) -> RawHtml { let ob = Object::EMPTY.insert(VIEW_ACCOUNT_LOGIN, ()); RawHtml(render_view(ri.render_info(), ob.as_object())) } +#[get("/account/logout")] +pub fn r_account_logout(ri: RequestInfo<'_>) -> RawHtml { + let ob = Object::EMPTY.insert(VIEW_ACCOUNT_LOGOUT, ()); + RawHtml(render_view(ri.render_info(), ob.as_object())) +} + #[derive(FromForm, Serialize, Deserialize)] pub struct LoginForm { #[field(validate = len(4..32))] @@ -50,66 +52,9 @@ pub struct LoginForm { pub expire: u64, } -#[get("/account/login")] -pub fn r_account_login(session: Option>, lang: AcceptLanguage) -> RawHtml { - let AcceptLanguage(lang) = lang; - let logged_in = session.is_some(); - RawHtml(render_page( - &AccountLogin { - lang: &lang, - logged_in, - }, - RenderInfo { - session: session.map(|s| SessionInfo { user: s.0.user }), - importing: is_importing(), - lang, - }, - )) -} - -#[get("/account/logout")] -pub fn r_account_logout(session: Option>, lang: AcceptLanguage) -> RawHtml { - let AcceptLanguage(lang) = lang; - RawHtml(render_page( - &AccountLogout { lang: &lang }, - RenderInfo { - session: session.map(|s| SessionInfo { user: s.0.user }), - importing: is_importing(), - lang, - }, - )) -} - -#[post("/account/register", data = "
")] -pub fn r_account_register_post<'a>( - session: Option>, - lang: AcceptLanguage, - form: Form>, -) -> MyResult> { - let AcceptLanguage(lang) = lang; - let logged_in = session.is_some(); - let form = match &form.value { - Some(v) => v, - None => return Err(MyError(anyhow!(format_form_error(form)))), - }; - - register_user(&form.invitation, &form.username, &form.password)?; - - Ok(RawHtml(render_page( - &AccountRegisterSuccess { - lang: &lang, - logged_in, - }, - RenderInfo { - session: session.map(|s| SessionInfo { user: s.0.user }), - importing: is_importing(), - lang, - }, - ))) -} - #[post("/account/login", data = "")] pub fn r_account_login_post( + ri: RequestInfo<'_>, jar: &CookieJar, form: Form>, ) -> MyResult { @@ -117,22 +62,20 @@ pub fn r_account_login_post( Some(v) => v, None => return Err(MyError(anyhow!(format_form_error(form)))), }; - jar.add( - Cookie::build(( - "session", - login_logic(&form.username, &form.password, None, None)?, - )) - .permanent() - .build(), - ); + let session = login(&ri.state, &form.username, &form.password, None)?; + jar.add(Cookie::build(("session", session)).permanent().build()); - Ok(Redirect::found(rocket::uri!(r_home()))) + Ok(Redirect::found(u_home())) } #[post("/account/logout")] -pub fn r_account_logout_post(jar: &CookieJar) -> MyResult { - jar.remove_private(Cookie::build("session")); - Ok(Redirect::found(rocket::uri!(r_home()))) +pub fn r_account_logout_post(jar: &CookieJar) -> MyResult> { + jar.remove(Cookie::build("session")); + Ok(Flash::new( + Redirect::found(u_home()), + "success", + "Logged out!", + )) } pub fn format_form_error(form: Form>) -> String { -- cgit v1.3