aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-01-26 20:04:40 +0100
committermetamuffin <metamuffin@disroot.org>2026-01-26 20:04:40 +0100
commitf59c6f472d25084aa5f8a116f8cf92f81df09c50 (patch)
treed3282488db81b3c09d34f2aa1ca452c2bef1451c /server
parent783d3598753bf84756296a2016e5dab30300519b (diff)
downloadjellything-f59c6f472d25084aa5f8a116f8cf92f81df09c50.tar
jellything-f59c6f472d25084aa5f8a116f8cf92f81df09c50.tar.bz2
jellything-f59c6f472d25084aa5f8a116f8cf92f81df09c50.tar.zst
can render login ui
Diffstat (limited to 'server')
-rw-r--r--server/src/auth.rs2
-rw-r--r--server/src/logger.rs2
-rw-r--r--server/src/routes.rs9
-rw-r--r--server/src/ui/account/mod.rs101
4 files changed, 29 insertions, 85 deletions
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 {