dont crash if changing admin name to existing name
All checks were successful
CI/CD Pipeline / test (push) Successful in 10m56s
CI/CD Pipeline / deploy (push) Successful in 6m32s
Update Cargo Dependencies / update-dependencies (push) Successful in 53s

This commit is contained in:
2025-05-18 19:41:23 +02:00
parent 03c34c5c66
commit c0e0fedc52
3 changed files with 16 additions and 13 deletions

View File

@ -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."

View File

@ -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) {

View File

@ -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}"))
}