aboutsummaryrefslogtreecommitdiff
path: root/server/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/ui')
-rw-r--r--server/src/ui/admin/mod.rs34
-rw-r--r--server/src/ui/admin/user.rs93
-rw-r--r--server/src/ui/mod.rs1
-rw-r--r--server/src/ui/user.rs28
4 files changed, 62 insertions, 94 deletions
diff --git a/server/src/ui/admin/mod.rs b/server/src/ui/admin/mod.rs
index 8413ead..3fa0591 100644
--- a/server/src/ui/admin/mod.rs
+++ b/server/src/ui/admin/mod.rs
@@ -9,9 +9,14 @@ pub mod log;
use super::error::MyResult;
use crate::{request_info::RequestInfo, ui_responder::UiResponse};
-use jellycommon::{jellyobject::ObjectBuffer, *};
+use jellycommon::{
+ jellyobject::{ObjectBuffer, ObjectBufferBuilder},
+ *,
+};
+use jellydb::Query;
use jellyui::tr;
use rocket::get;
+use std::str::FromStr;
#[get("/admin/dashboard")]
pub async fn r_admin_dashboard(ri: RequestInfo<'_>) -> MyResult<UiResponse> {
@@ -35,3 +40,30 @@ pub async fn r_admin_dashboard(ri: RequestInfo<'_>) -> MyResult<UiResponse> {
),
])))
}
+
+#[get("/admin/users")]
+pub fn r_admin_users(ri: RequestInfo) -> MyResult<UiResponse> {
+ ri.require_admin()?;
+
+ let mut users = Vec::new();
+ ri.state.database.transaction(&mut |txn| {
+ users.clear();
+ let rows = txn
+ .query(Query::from_str("FILTER Ulgn")?)?
+ .collect::<Vec<_>>();
+ for row in rows {
+ let (row, _) = row?;
+ users.push(txn.get(row)?.unwrap());
+ }
+ Ok(())
+ })?;
+
+ let mut list = ObjectBufferBuilder::default();
+ for u in users {
+ list.push(ADMIN_USER_LIST_ITEM, u.as_object());
+ }
+ Ok(ri.respond_ui(ObjectBuffer::new(&mut [(
+ VIEW_ADMIN_USER_LIST.0,
+ &list.finish().as_object(),
+ )])))
+}
diff --git a/server/src/ui/admin/user.rs b/server/src/ui/admin/user.rs
deleted file mode 100644
index b4770c8..0000000
--- a/server/src/ui/admin/user.rs
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- This file is part of jellything (https://codeberg.org/metamuffin/jellything)
- which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
- Copyright (C) 2026 metamuffin <metamuffin.org>
-*/
-use crate::{request_info::RequestInfo, ui::error::MyResult};
-use anyhow::Context;
-use jellycommon::routes::{u_admin_user, u_admin_users};
-use rocket::{
- FromForm, FromFormField,
- form::Form,
- get, post,
- response::{Flash, Redirect, content::RawHtml},
-};
-
-#[get("/admin/users")]
-pub fn r_admin_users(ri: RequestInfo) -> MyResult<RawHtml<String>> {
- ri.session.assert_admin()?;
- let r = admin_users(&ri.session)?;
- Ok(RawHtml(render_page(
- &AdminUsersPage {
- flash: &None,
- lang: &ri.lang,
- users: &r.users,
- },
- ri.render_info(),
- )))
-}
-
-#[get("/admin/user/<name>")]
-pub fn r_admin_user(ri: RequestInfo, name: &str) -> MyResult<RawHtml<String>> {
- ri.session.assert_admin()?;
- let user = get_user(&ri.session, name)?;
-
- Ok(RawHtml(render_page(
- &AdminUserPage {
- flash: &None,
- lang: &ri.lang,
- user: &user,
- },
- ri.render_info(),
- )))
-}
-
-#[derive(FromForm)]
-pub struct UserPermissionForm {
- permission: String,
- action: UrlGrantState,
-}
-
-#[derive(FromFormField)]
-pub enum UrlGrantState {
- Grant,
- Revoke,
- Unset,
-}
-
-#[post("/admin/user/<name>/update_permission", data = "<form>")]
-pub fn r_admin_user_permission(
- ri: RequestInfo,
- form: Form<UserPermissionForm>,
- name: &str,
-) -> MyResult<Flash<Redirect>> {
- ri.session.assert_admin()?;
- let perm = serde_json::from_str::<UserPermission>(&form.permission)
- .context("parsing provided permission")?;
-
- update_user_perms(
- &ri.session,
- name,
- perm,
- match form.action {
- UrlGrantState::Grant => GrantState::Grant,
- UrlGrantState::Revoke => GrantState::Revoke,
- UrlGrantState::Unset => GrantState::Unset,
- },
- )?;
-
- Ok(Flash::success(
- Redirect::to(u_admin_user(name)),
- tr(ri.lang, "admin.users.permission_update_success"),
- ))
-}
-
-#[post("/admin/<name>/remove")]
-pub fn r_admin_remove_user(ri: RequestInfo, name: &str) -> MyResult<Flash<Redirect>> {
- ri.session.assert_admin()?;
- delete_user(&ri.session, name)?;
- Ok(Flash::success(
- Redirect::to(u_admin_users()),
- tr(ri.lang, "admin.users.remove_success"),
- ))
-}
diff --git a/server/src/ui/mod.rs b/server/src/ui/mod.rs
index 116ed3c..28762f1 100644
--- a/server/src/ui/mod.rs
+++ b/server/src/ui/mod.rs
@@ -18,6 +18,7 @@ pub mod home;
pub mod node;
pub mod style;
pub mod player;
+pub mod user;
#[get("/")]
pub async fn r_index(ri: RequestInfo<'_>) -> MyResult<Redirect> {
diff --git a/server/src/ui/user.rs b/server/src/ui/user.rs
new file mode 100644
index 0000000..31e521e
--- /dev/null
+++ b/server/src/ui/user.rs
@@ -0,0 +1,28 @@
+/*
+ This file is part of jellything (https://codeberg.org/metamuffin/jellything)
+ which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
+ Copyright (C) 2026 metamuffin <metamuffin.org>
+*/
+use crate::{request_info::RequestInfo, ui::error::MyResult};
+use jellycommon::routes::u_admin_users;
+use jellyui::tr;
+use rocket::{
+ get, post,
+ response::{Flash, Redirect, content::RawHtml},
+};
+
+#[get("/u/<name>")]
+pub fn r_user(ri: RequestInfo<'_>, name: &str) -> MyResult<RawHtml<String>> {
+ ri.require_user()?;
+ todo!()
+}
+
+#[post("/u/<name>/remove")]
+pub fn r_user_remove(ri: RequestInfo<'_>, name: &str) -> MyResult<Flash<Redirect>> {
+ ri.require_admin()?;
+ todo!();
+ Ok(Flash::success(
+ Redirect::to(u_admin_users()),
+ tr(ri.lang, "admin.users.remove_success"),
+ ))
+}