From 37253c31dde435dbafa7da473356e210866ef751 Mon Sep 17 00:00:00 2001 From: Jef Roosens Date: Wed, 1 Jul 2026 21:03:15 +0200 Subject: [PATCH] feat(web): move users page into separate administration section --- otter/src/server/web/{users.rs => administration.rs} | 9 +++++++-- otter/src/server/web/mod.rs | 4 ++-- otter/src/web/mod.rs | 6 +++++- otter/src/web/templates/base.html | 2 +- .../src/web/templates/views/administration/base.html | 11 +++++++++++ .../templates/views/{ => administration}/users.html | 11 +++++++---- otter/src/web/view.rs | 2 +- 7 files changed, 34 insertions(+), 11 deletions(-) rename otter/src/server/web/{users.rs => administration.rs} (88%) create mode 100644 otter/src/web/templates/views/administration/base.html rename otter/src/web/templates/views/{ => administration}/users.html (80%) diff --git a/otter/src/server/web/users.rs b/otter/src/server/web/administration.rs similarity index 88% rename from otter/src/server/web/users.rs rename to otter/src/server/web/administration.rs index c6d5a5b..9c83355 100644 --- a/otter/src/server/web/users.rs +++ b/otter/src/server/web/administration.rs @@ -2,6 +2,7 @@ use axum::{ Extension, Router, extract::{Path, Query, State}, http::HeaderMap, + response::Redirect, routing::{delete, get}, }; use serde::Deserialize; @@ -16,8 +17,12 @@ use crate::{ pub fn router(ctx: Context) -> Router { Router::new() - .route("/users", get(get_users)) - .route("/users/{id}", delete(delete_user)) + .route( + "/administration", + get(|| async { Redirect::permanent("/administration/users") }), + ) + .route("/administration/users", get(get_users)) + .route("/administration/users/{id}", delete(delete_user)) .route_layer(axum::middleware::from_fn_with_state( ctx.clone(), super::auth::auth_web_middleware, diff --git a/otter/src/server/web/mod.rs b/otter/src/server/web/mod.rs index 06e9713..34f7bd5 100644 --- a/otter/src/server/web/mod.rs +++ b/otter/src/server/web/mod.rs @@ -1,6 +1,6 @@ +mod administration; mod auth; mod sessions; -mod users; use axum::{Router, extract::State, http::HeaderMap, routing::get}; use axum_extra::extract::CookieJar; @@ -65,7 +65,7 @@ pub fn router(ctx: Context) -> Router { // loop .merge(auth::router(ctx.clone())) .merge(sessions::router(ctx.clone())) - .merge(users::router(ctx.clone())) + .merge(administration::router(ctx.clone())) } async fn get_index( diff --git a/otter/src/web/mod.rs b/otter/src/web/mod.rs index d2977eb..9845ed8 100644 --- a/otter/src/web/mod.rs +++ b/otter/src/web/mod.rs @@ -87,7 +87,11 @@ pub fn initialize_tera() -> tera::Result { ), ( View::Users(Vec::new(), 0, None).template(), - include_str!("templates/views/users.html"), + include_str!("templates/views/administration/users.html"), + ), + ( + "views/administration/base.html", + include_str!("templates/views/administration/base.html"), ), ( View::Signup { diff --git a/otter/src/web/templates/base.html b/otter/src/web/templates/base.html index d1ea814..d9fe084 100644 --- a/otter/src/web/templates/base.html +++ b/otter/src/web/templates/base.html @@ -24,7 +24,7 @@ a:hover { {% if authenticated %}
  • Sessions
  • {% if admin %} -
  • Users
  • +
  • Administration
  • {% endif %}
  • Logout
  • {% else %} diff --git a/otter/src/web/templates/views/administration/base.html b/otter/src/web/templates/views/administration/base.html new file mode 100644 index 0000000..b07bfe2 --- /dev/null +++ b/otter/src/web/templates/views/administration/base.html @@ -0,0 +1,11 @@ +

    Administration

    + + + +{% block inner %}{% endblock %} diff --git a/otter/src/web/templates/views/users.html b/otter/src/web/templates/views/administration/users.html similarity index 80% rename from otter/src/web/templates/views/users.html rename to otter/src/web/templates/views/administration/users.html index 9f7e391..dfa90bc 100644 --- a/otter/src/web/templates/views/users.html +++ b/otter/src/web/templates/views/administration/users.html @@ -1,8 +1,10 @@ -

    Users

    +{% extends "views/administration/base.html" %} +{% block inner %} +

    Users

    {%- if user.id != current_user_id -%} - Remove {%- else -%} @@ -38,7 +40,7 @@ {%- if next_page_query %} +{% endblock %} diff --git a/otter/src/web/view.rs b/otter/src/web/view.rs index 8da32ab..b35b9db 100644 --- a/otter/src/web/view.rs +++ b/otter/src/web/view.rs @@ -37,7 +37,7 @@ impl Template for View { Self::Index => "views/index.html", Self::Login { .. } => "views/login.html", Self::Sessions(..) => "views/sessions.html", - Self::Users(..) => "views/users.html", + Self::Users(..) => "views/administration/users.html", Self::Signup { .. } => "views/signup.html", } }