From c0e0fedc524a531ced5345f3ee84169fc64845d8 Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Sun, 18 May 2025 19:41:23 +0200 Subject: [PATCH] dont crash if changing admin name to existing name --- locales/de-AT.yml | 1 + src/admin/user/mod.rs | 8 ++++---- src/admin/user/web.rs | 20 +++++++++++--------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/locales/de-AT.yml b/locales/de-AT.yml index 93cf027..773be82 100644 --- a/locales/de-AT.yml +++ b/locales/de-AT.yml @@ -251,6 +251,7 @@ edit_username: "Username bearbeiten" new_admin_link: "Passwort vergessen: Neuen Loginlink generieren" confirm_new_admin_link: "Bist du sicher, dass du einen neuen Passwort-Link generieren willst? Mit dem alten Passwort kann man sich dann nicht mehr einloggen." new_user_name: "Admin %{old} heißt ab sofort %{new}" +user_name_already_exists: "Es gibt bereits einen Admin %{new}." succ_new_admin_link: "Neuer Loginlink für User %{user} wurde generiert" new_admin: "Neuer Admin" confirm_admin_delete: "Bist du sicher, dass der User gelöscht werden soll? Das kann _NICHT_ mehr rückgängig gemacht werden." diff --git a/src/admin/user/mod.rs b/src/admin/user/mod.rs index 331f31f..ded5e39 100644 --- a/src/admin/user/mod.rs +++ b/src/admin/user/mod.rs @@ -1,7 +1,7 @@ use super::generate_random_alphanumeric; -use crate::{AppState, auth::User}; +use crate::{auth::User, AppState}; use argon2::password_hash::rand_core::OsRng; -use argon2::{Argon2, PasswordHasher, password_hash::SaltString}; +use argon2::{password_hash::SaltString, Argon2, PasswordHasher}; use axum::Router; use sqlx::SqlitePool; @@ -41,11 +41,11 @@ impl User { Ok(result.id) } - async fn update_name(&self, db: &SqlitePool, name: &str) { + async fn update_name(&self, db: &SqlitePool, name: &str) -> bool { sqlx::query!("UPDATE user SET name = ? WHERE id = ?", name, self.id) .execute(db) .await - .unwrap(); + .is_ok() } async fn new_pw(&self, db: &SqlitePool) { diff --git a/src/admin/user/web.rs b/src/admin/user/web.rs index 54c0e47..59dda4f 100644 --- a/src/admin/user/web.rs +++ b/src/admin/user/web.rs @@ -1,11 +1,11 @@ -use crate::{AppState, PageBuilder, auth::User, er, suc}; +use crate::{auth::User, er, suc, AppState, PageBuilder}; use axum::{ - Form, Router, extract::State, response::{IntoResponse, Redirect}, routing::{get, post}, + Form, Router, }; -use maud::{Markup, PreEscaped, html}; +use maud::{html, Markup, PreEscaped}; use serde::Deserialize; use sqlx::SqlitePool; use std::sync::Arc; @@ -138,12 +138,14 @@ async fn update_name( return Redirect::to("/admin/user"); }; - user.update_name(&db, &form.name).await; - - suc!( - session, - t!("new_user_name", old = user.name, new = form.name) - ); + if user.update_name(&db, &form.name).await { + suc!( + session, + t!("new_user_name", old = user.name, new = form.name) + ); + } else { + er!(session, t!("user_name_already_exists", new = form.name)); + } Redirect::to(&format!("/admin/user/{id}")) }