From 3d496970ac29c119c52727c6cfd6e4c7c9e076cb Mon Sep 17 00:00:00 2001 From: Daniel Habenicht Date: Fri, 20 Jun 2025 14:09:56 +0200 Subject: [PATCH 1/3] Settings Page erstellt --- Watcher/Controllers/AuthController.cs | 42 ++++++++++++++++++++++++ Watcher/Views/Auth/Info.cshtml | 23 +++++++++---- Watcher/Views/Auth/UserSettings.cshtml | 1 + Watcher/Views/Server/overview.cshtml | 5 ++- Watcher/Views/Shared/_Layout.cshtml.css | 5 +++ Watcher/persistence/watcher.db-shm | Bin 32768 -> 0 bytes Watcher/persistence/watcher.db-wal | 0 Watcher/wwwroot/css/ServerOverview.css | 1 + 8 files changed, 67 insertions(+), 10 deletions(-) create mode 100644 Watcher/Views/Auth/UserSettings.cshtml delete mode 100644 Watcher/persistence/watcher.db-shm delete mode 100644 Watcher/persistence/watcher.db-wal diff --git a/Watcher/Controllers/AuthController.cs b/Watcher/Controllers/AuthController.cs index e4f957c..e18d438 100644 --- a/Watcher/Controllers/AuthController.cs +++ b/Watcher/Controllers/AuthController.cs @@ -133,4 +133,46 @@ public class AuthController : Controller return RedirectToAction("Index", "Home"); } + + // Edit-Form anzeigen + [Authorize] + [HttpGet] + public IActionResult UserSettings() + { + var username = User.Identity?.Name; + var user = _context.Users.FirstOrDefault(u => u.PreferredUsername == username); + if (user == null) return NotFound(); + + var model = new EditUserViewModel + { + Username = user.PreferredUsername + }; + return View(model); + } + + // Edit speichern + [Authorize] + [HttpPost] + [ValidateAntiForgeryToken] + public IActionResult UserSettings(EditUserViewModel model) + { + if (!ModelState.IsValid) return View(model); + + var username = User.Identity?.Name; + var user = _context.Users.FirstOrDefault(u => u.PreferredUsername == username); + if (user == null) return NotFound(); + + user.PreferredUsername = model.Username; + + if (!string.IsNullOrWhiteSpace(model.NewPassword)) + { + user.PreferredUsername = BCrypt.Net.BCrypt.HashPassword(model.NewPassword); + } + + _context.SaveChanges(); + + // Eventuell hier das Auth-Cookie erneuern, wenn Username sich ändert + + return RedirectToAction("Index", "Home"); + } } diff --git a/Watcher/Views/Auth/Info.cshtml b/Watcher/Views/Auth/Info.cshtml index fd257a3..81536ea 100644 --- a/Watcher/Views/Auth/Info.cshtml +++ b/Watcher/Views/Auth/Info.cshtml @@ -19,7 +19,10 @@ @(User.Identity?.Name?.Substring(0,1).ToUpper() ?? "?") } -

@(User.FindFirst("name")?.Value ?? "Unbekannter Nutzer")

+

+ @(User.FindFirst("name")?.Value ?? "Unbekannter Nutzer") +

+ @@ -75,12 +78,18 @@
- -
- -
+
+
+ +
+
+ +
+
@if (isAdmin) diff --git a/Watcher/Views/Auth/UserSettings.cshtml b/Watcher/Views/Auth/UserSettings.cshtml new file mode 100644 index 0000000..040351b --- /dev/null +++ b/Watcher/Views/Auth/UserSettings.cshtml @@ -0,0 +1 @@ +

settings

\ No newline at end of file diff --git a/Watcher/Views/Server/overview.cshtml b/Watcher/Views/Server/overview.cshtml index a157f37..7d7d064 100644 --- a/Watcher/Views/Server/overview.cshtml +++ b/Watcher/Views/Server/overview.cshtml @@ -16,7 +16,7 @@
@foreach (var s in Model.Servers) { -
+

(#@s.Id) @s.Name @@ -133,5 +133,4 @@ } }); -} - +} \ No newline at end of file diff --git a/Watcher/Views/Shared/_Layout.cshtml.css b/Watcher/Views/Shared/_Layout.cshtml.css index c187c02..3407be7 100644 --- a/Watcher/Views/Shared/_Layout.cshtml.css +++ b/Watcher/Views/Shared/_Layout.cshtml.css @@ -1,6 +1,11 @@ /* Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification for details on configuring this project to bundle and minify static web assets. */ +html, body { + min-height: 100vh; + overflow-y: auto; +} + a.navbar-brand { white-space: normal; text-align: center; diff --git a/Watcher/persistence/watcher.db-shm b/Watcher/persistence/watcher.db-shm deleted file mode 100644 index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuAr62r3 Date: Fri, 20 Jun 2025 14:30:22 +0200 Subject: [PATCH 2/3] EditUserSettingsViewModel --- Watcher/Controllers/AuthController.cs | 3 ++- .../ViewModels/EditUserSettingsViewModel.cs | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 Watcher/ViewModels/EditUserSettingsViewModel.cs diff --git a/Watcher/Controllers/AuthController.cs b/Watcher/Controllers/AuthController.cs index e18d438..4869c7e 100644 --- a/Watcher/Controllers/AuthController.cs +++ b/Watcher/Controllers/AuthController.cs @@ -143,7 +143,7 @@ public class AuthController : Controller var user = _context.Users.FirstOrDefault(u => u.PreferredUsername == username); if (user == null) return NotFound(); - var model = new EditUserViewModel + var model = new EditUserSettingsViewModel { Username = user.PreferredUsername }; @@ -164,6 +164,7 @@ public class AuthController : Controller user.PreferredUsername = model.Username; + // Passwort ändern if (!string.IsNullOrWhiteSpace(model.NewPassword)) { user.PreferredUsername = BCrypt.Net.BCrypt.HashPassword(model.NewPassword); diff --git a/Watcher/ViewModels/EditUserSettingsViewModel.cs b/Watcher/ViewModels/EditUserSettingsViewModel.cs new file mode 100644 index 0000000..468cc86 --- /dev/null +++ b/Watcher/ViewModels/EditUserSettingsViewModel.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations; + +namespace Watcher.ViewModels; + +public class EditUserSettingsViewModel +{ + [Required] + public string? Username { get; set; } + + [Required] + [DataType(DataType.Password)] + public string? NewPassword { get; set; } + + [Required] + [DataType(DataType.Password)] + [Compare("NewPassword", ErrorMessage = "Passwörter stimmen nicht überein.")] + public string? ConfirmPassword { get; set; } +} From cfd2d08ee9f4eaf6b6039c7437732676678f0421 Mon Sep 17 00:00:00 2001 From: daniel-hbn Date: Fri, 20 Jun 2025 17:57:36 +0200 Subject: [PATCH 3/3] UserSettings Page erweitert, PaswortChange gefixed --- Watcher/Controllers/AuthController.cs | 21 ++++-- Watcher/Views/Auth/Info.cshtml | 30 --------- Watcher/Views/Auth/UserSettings.cshtml | 93 +++++++++++++++++++++++++- 3 files changed, 107 insertions(+), 37 deletions(-) diff --git a/Watcher/Controllers/AuthController.cs b/Watcher/Controllers/AuthController.cs index 4869c7e..bd15c18 100644 --- a/Watcher/Controllers/AuthController.cs +++ b/Watcher/Controllers/AuthController.cs @@ -1,8 +1,10 @@ using System.Security.Claims; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; using Watcher.Data; using Watcher.ViewModels; @@ -124,7 +126,7 @@ public class AuthController : Controller if (!string.IsNullOrWhiteSpace(model.NewPassword)) { - user.PreferredUsername = BCrypt.Net.BCrypt.HashPassword(model.NewPassword); + user.Password = BCrypt.Net.BCrypt.HashPassword(model.NewPassword); } _context.SaveChanges(); @@ -140,14 +142,19 @@ public class AuthController : Controller public IActionResult UserSettings() { var username = User.Identity?.Name; + var claims = User.Claims.Select(c => new { c.Type, c.Value }).ToList(); + var user = _context.Users.FirstOrDefault(u => u.PreferredUsername == username); if (user == null) return NotFound(); - var model = new EditUserSettingsViewModel - { - Username = user.PreferredUsername - }; - return View(model); + var DbProvider = _context.Database.ProviderName; + + ViewBag.Name = username; + ViewBag.Claims = claims; + ViewBag.IdentityProvider = user.IdentityProvider; + ViewBag.DbProvider = DbProvider; + + return View(); } // Edit speichern @@ -162,6 +169,8 @@ public class AuthController : Controller var user = _context.Users.FirstOrDefault(u => u.PreferredUsername == username); if (user == null) return NotFound(); + var databaseProvider = _context.Database.ProviderName; + user.PreferredUsername = model.Username; // Passwort ändern diff --git a/Watcher/Views/Auth/Info.cshtml b/Watcher/Views/Auth/Info.cshtml index 81536ea..4e73972 100644 --- a/Watcher/Views/Auth/Info.cshtml +++ b/Watcher/Views/Auth/Info.cshtml @@ -91,34 +91,4 @@

- - @if (isAdmin) - { -
-

Benutzerdaten ändern

-
-
- - -
-
- - -
-
- - -
- -
-
- } - else - { -
- Benutzerdaten können nur für lokal angemeldete Nutzer geändert werden. -
- }
diff --git a/Watcher/Views/Auth/UserSettings.cshtml b/Watcher/Views/Auth/UserSettings.cshtml index 040351b..f1e5aca 100644 --- a/Watcher/Views/Auth/UserSettings.cshtml +++ b/Watcher/Views/Auth/UserSettings.cshtml @@ -1 +1,92 @@ -

settings

\ No newline at end of file +@{ + ViewData["Title"] = "Settings"; + var pictureUrl = User.Claims.FirstOrDefault(c => c.Type == "picture")?.Value ?? ""; + var preferredUsername = User.Claims.FirstOrDefault(c => c.Type == "preferred_username")?.Value ?? "admin"; + var isLocalUser = ViewBag.IdentityProvider == "local"; + var DbEngine = ViewBag.DbProvider; +} + + + +
+ @if (isLocalUser) + { +
+

Benutzerdaten ändern

+
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ } + else + { +
+ Benutzerdaten können nur für lokal angemeldete Nutzer geändert werden. +
+ } + + +
+

Systemeinformationen

+ +
+ +
Watcher Version: v0.1.0
+ +
+ +
Authentifizierungsmethode:
+

@(ViewBag.IdentityProvider ?? "nicht gefunden")

+ +
+ +
Datenbank-Engine:
+ @(DbEngine ?? "nicht gefunden") +
+ +
+ + + + +
+ +
+

Systemeinstellungen ändern

+ +
Anzeigeeinstellungen:
+ + + +
+