diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-01-26 20:04:40 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-01-26 20:04:40 +0100 |
| commit | f59c6f472d25084aa5f8a116f8cf92f81df09c50 (patch) | |
| tree | d3282488db81b3c09d34f2aa1ca452c2bef1451c | |
| parent | 783d3598753bf84756296a2016e5dab30300519b (diff) | |
| download | jellything-f59c6f472d25084aa5f8a116f8cf92f81df09c50.tar jellything-f59c6f472d25084aa5f8a116f8cf92f81df09c50.tar.bz2 jellything-f59c6f472d25084aa5f8a116f8cf92f81df09c50.tar.zst | |
can render login ui
| -rw-r--r-- | common/src/api.rs | 4 | ||||
| -rw-r--r-- | server/src/auth.rs | 2 | ||||
| -rw-r--r-- | server/src/logger.rs | 2 | ||||
| -rw-r--r-- | server/src/routes.rs | 9 | ||||
| -rw-r--r-- | server/src/ui/account/mod.rs | 101 | ||||
| -rw-r--r-- | ui/client-style/build.rs | 6 | ||||
| -rw-r--r-- | ui/src/lib.rs | 2 | ||||
| -rw-r--r-- | ui/src/scaffold.rs | 1 |
8 files changed, 37 insertions, 90 deletions
diff --git a/common/src/api.rs b/common/src/api.rs index 415ef76..90efc76 100644 --- a/common/src/api.rs +++ b/common/src/api.rs @@ -21,8 +21,8 @@ fields! { VIEW_STATGROUP: Object = 2041 "statgroup"; VIEW_STATTEXT: Object = 2042 "stattext"; VIEW_ACCOUNT_LOGIN: () = 2043 "account_login"; - VIEW_ACCOUNT_LOGOUT: () = 2043 "account_logout"; - VIEW_ACCOUNT_SET_PASSWORD: &str = 2044 "account_set_password"; + VIEW_ACCOUNT_LOGOUT: () = 2044 "account_logout"; + VIEW_ACCOUNT_SET_PASSWORD: &str = 2045 "account_set_password"; NKU_NODE: Object = 2025 "node"; NKU_UDATA: Object = 2026 "udata"; 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<i64>) 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<State>) -> Rocket<Build> { "/", 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<String> { +#[get("/account/login")] +pub async fn r_account_login(ri: RequestInfo<'_>) -> RawHtml<String> { 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<String> { + 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<A<Session>>, lang: AcceptLanguage) -> RawHtml<String> { - 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<A<Session>>, lang: AcceptLanguage) -> RawHtml<String> { - 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 = "<form>")] -pub fn r_account_register_post<'a>( - session: Option<A<Session>>, - lang: AcceptLanguage, - form: Form<Contextual<'a, RegisterForm>>, -) -> MyResult<RawHtml<String>> { - 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 = "<form>")] pub fn r_account_login_post( + ri: RequestInfo<'_>, jar: &CookieJar, form: Form<Contextual<LoginForm>>, ) -> MyResult<Redirect> { @@ -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<Redirect> { - jar.remove_private(Cookie::build("session")); - Ok(Redirect::found(rocket::uri!(r_home()))) +pub fn r_account_logout_post(jar: &CookieJar) -> MyResult<Flash<Redirect>> { + jar.remove(Cookie::build("session")); + Ok(Flash::new( + Redirect::found(u_home()), + "success", + "Logged out!", + )) } pub fn format_form_error<T>(form: Form<Contextual<T>>) -> String { diff --git a/ui/client-style/build.rs b/ui/client-style/build.rs index c5bdf78..9e39aec 100644 --- a/ui/client-style/build.rs +++ b/ui/client-style/build.rs @@ -6,6 +6,7 @@ use std::{ fs::{File, read_to_string}, + io::Write, path::PathBuf, }; fn main() { @@ -16,5 +17,8 @@ fn main() { out += &read_to_string(file).unwrap(); } let outpath: PathBuf = std::env::var("OUT_DIR").unwrap().try_into().unwrap(); - File::create(outpath.join("bundle.css")).unwrap(); + File::create(outpath.join("bundle.css")) + .unwrap() + .write_all(out.as_bytes()) + .unwrap(); } diff --git a/ui/src/lib.rs b/ui/src/lib.rs index f3a1282..9509129 100644 --- a/ui/src/lib.rs +++ b/ui/src/lib.rs @@ -34,7 +34,7 @@ pub fn render_view(ri: RenderInfo<'_>, view: Object<'_>) -> String { ri: &ri, main: View { ri: &ri, view }, title: view.get(VIEW_TITLE).unwrap_or_default(), - class: "", + class: "theme-purple", } .to_string() } diff --git a/ui/src/scaffold.rs b/ui/src/scaffold.rs index 8cfb432..a8ce8c9 100644 --- a/ui/src/scaffold.rs +++ b/ui/src/scaffold.rs @@ -54,7 +54,6 @@ markup::define! { a.settings.hybrid_button[href=u_account_settings()] { p {@tr(ri.lang, "nav.settings")} } " " a.logout.hybrid_button[href=u_account_logout()] { p {@tr(ri.lang, "nav.logout")} } } else { - a.register.hybrid_button[href=u_account_register()] { p {@tr(ri.lang, "nav.register")} } " " a.login.hybrid_button[href=u_account_login()] { p {@tr(ri.lang, "nav.login")} } } } |