diff --git a/Watcher/Controllers/AuthController.cs b/Watcher/Controllers/AuthController.cs index e4f957c..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; @@ -122,6 +124,56 @@ public class AuthController : Controller user.PreferredUsername = model.Username; + if (!string.IsNullOrWhiteSpace(model.NewPassword)) + { + user.Password = BCrypt.Net.BCrypt.HashPassword(model.NewPassword); + } + + _context.SaveChanges(); + + // Eventuell hier das Auth-Cookie erneuern, wenn Username sich ändert + + return RedirectToAction("Index", "Home"); + } + + // Edit-Form anzeigen + [Authorize] + [HttpGet] + 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 DbProvider = _context.Database.ProviderName; + + ViewBag.Name = username; + ViewBag.Claims = claims; + ViewBag.IdentityProvider = user.IdentityProvider; + ViewBag.DbProvider = DbProvider; + + return View(); + } + + // 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(); + + var databaseProvider = _context.Database.ProviderName; + + 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; } +} diff --git a/Watcher/Views/Auth/Info.cshtml b/Watcher/Views/Auth/Info.cshtml index fd257a3..4e73972 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,41 +78,17 @@
- -
- -
- - - @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 new file mode 100644 index 0000000..f1e5aca --- /dev/null +++ b/Watcher/Views/Auth/UserSettings.cshtml @@ -0,0 +1,92 @@ +@{ + 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:
+ + + +
+
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 fe9ac28..0000000 Binary files a/Watcher/persistence/watcher.db-shm and /dev/null differ diff --git a/Watcher/persistence/watcher.db-wal b/Watcher/persistence/watcher.db-wal deleted file mode 100644 index e69de29..0000000 diff --git a/Watcher/wwwroot/css/ServerOverview.css b/Watcher/wwwroot/css/ServerOverview.css index e69de29..8b13789 100644 --- a/Watcher/wwwroot/css/ServerOverview.css +++ b/Watcher/wwwroot/css/ServerOverview.css @@ -0,0 +1 @@ +