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() ?? "?") } -
@(ViewBag.IdentityProvider ?? "nicht gefunden")
+ +