f052_admin_area #27

Merged
jared merged 13 commits from f052_admin_area into development 2025-08-21 11:08:45 +02:00
Showing only changes of commit 723ec0773d - Show all commits

View File

@@ -1,64 +1,79 @@
<script lang="ts">
import { onMount } from 'svelte';
import Button from "$lib/components/Button.svelte";
import Button from '$lib/components/Button.svelte';
import jsSHA from 'jssha'
import jsSHA from 'jssha';
const { data } = $props();
let userName = $state('')
let userPassword = $state('')
let userList: { userId: string; userName: string }[] = $state([])
let userName = $state('');
let userPassword = $state('');
let userList: { userId: string; userName: string }[] = $state([]);
let addUserError = $state(false);
let addUserSuccess = $state(false);
const currentUser: string = data.user.id;
onMount(async () => {
try {
userList = await getUsers();
})
} catch (error) {
console.log(`An error occured while retrieving users: ${error}`);
trachi93 marked this conversation as resolved Outdated
Outdated
Review

try catch block benutzen

try catch block benutzen
}
trachi93 marked this conversation as resolved Outdated
Outdated
Review

sowas kann man ganz gut in eine constante auslagern also ein enum oder objekt, welches alle routen hält und ich diese dann nur referenzieren muss. das sind solche "magic strings"

sowas kann man ganz gut in eine constante auslagern also ein enum oder objekt, welches alle routen hält und ich diese dann nur referenzieren muss. das sind solche "magic strings"

müsste ganzheitlich getan werden -> Ticket angelegt

müsste ganzheitlich getan werden -> Ticket angelegt
});
async function getUsers() {
const URL = "/api/users"
const response = await fetch(URL);
const URL = '/api/users';
try {
trachi93 marked this conversation as resolved Outdated
Outdated
Review

Try Catch block

Try Catch block
const response = await fetch(URL);
return await response.json();
} catch (error) {
console.log(`Error fetching users: ${error}`);
return null;
}
}
async function addUser() {
if (userName == "") {
alert("Der Benutzername darf nicht leer sein.")
if (userName == '') {
alert('Der Benutzername darf nicht leer sein.');
jared marked this conversation as resolved Outdated
Outdated
Review

s.o.

s.o.
return;
trachi93 marked this conversation as resolved Outdated
Outdated
Review

Das hashen von Passwörtern solle stets im Backend erfolgen. Hier sollte auch auf eine sichere Methode geachtet werden die noch eine Salt wert einfügt z.B. bycrpty o.ä.

Das hashen von Passwörtern solle stets im Backend erfolgen. Hier sollte auch auf eine sichere Methode geachtet werden die noch eine Salt wert einfügt z.B. bycrpty o.ä.

manuelles hashen wurde durch bcrypt ausgetauscht.

manuelles hashen wurde durch bcrypt ausgetauscht.
}
if (userPassword == "") {
alert("Das Passwort darf nicht leer sein.")
if (userPassword == '') {
alert('Das Passwort darf nicht leer sein.');
return;
}
const URL = "/api/users";
const URL = '/api/users';
const hashedUserPassword = new jsSHA('SHA-512', 'TEXT').update(userPassword).getHash('HEX');
const userData = {userName: userName, userPassword: hashedUserPassword}
const userData = { userName: userName, userPassword: hashedUserPassword };
try {
trachi93 marked this conversation as resolved Outdated
Outdated
Review

Performanter wäre es wenn du dir nach dem Erstellen des Users, dieses zurück liefern lässt. Damit reduzierst du Traffic

sowas wie
const newUser = await response.json();
userList = [...userList, newUser];

Performanter wäre es wenn du dir nach dem Erstellen des Users, dieses zurück liefern lässt. Damit reduzierst du Traffic sowas wie const newUser = await response.json(); userList = [...userList, newUser];
const response = await fetch(URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(userData)
})
});
if (response.ok) {
userList = await getUsers();
const newUser = await response.json();
userList = [...userList, newUser];
addUserSuccess = true;
resetInput();
} else {
addUserError = true;
}
} catch (error) {
trachi93 marked this conversation as resolved Outdated
Outdated
Review

try catch

try catch
console.log(`Error creating user: ${error}`);
addUserError = true;
}
}
function resetInput() {
userName = "";
userPassword = "";
userName = '';
userPassword = '';
addUserError = false;
setInterval(() => {
addUserSuccess = false;
@@ -68,17 +83,22 @@
async function deleteUser(userId: string) {
const URL = `/api/users/${userId}`;
try {
const response = await fetch(URL, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json'
}
})
});
if (response.status == 204) {
userList = await getUsers();
} else {
alert("Nutzer konnte nicht gelöscht werden")
alert('Nutzer konnte nicht gelöscht werden');
}
} catch (error) {
console.log(`Error deleting users: ${error}`);
}
}