diff --git a/Watcher/Controllers/AuthController.cs b/Watcher/Controllers/AuthController.cs index 91feb88..5fd0965 100644 --- a/Watcher/Controllers/AuthController.cs +++ b/Watcher/Controllers/AuthController.cs @@ -110,126 +110,5 @@ public class AuthController : Controller - // Anzeigen der User-Informationen - [Authorize] - public IActionResult Info() - { - var claims = User.Claims.Select(c => new { c.Type, c.Value }).ToList(); - var Identity_User = User.Identity?.Name; - var user = _context.Users.FirstOrDefault(u => u.Username == Identity_User); - if (user == null) return NotFound(); - - // Anzeigedaten - var DbProvider = _context.Database.ProviderName; - var username = user.Username; - var mail = user.Email; - var Id = user.Id; - - // Anzeigedaten an View übergeben - ViewBag.Claims = claims; - ViewBag.Name = username; - ViewBag.Mail = mail; - ViewBag.Id = Id; - - return View(); - } - - // Edit-Form anzeigen - [Authorize] - [HttpGet] - public IActionResult Edit() - { - var username = User.Identity?.Name; - var user = _context.Users.FirstOrDefault(u => u.Username == username); - if (user == null) return NotFound(); - - var model = new EditUserViewModel - { - Username = user.Username - }; - return View(model); - } - - // Edit speichern - [Authorize] - [HttpPost] - [ValidateAntiForgeryToken] - public IActionResult Edit(EditUserViewModel model) - { - if (!ModelState.IsValid) return View(model); - - var username = User.Identity?.Name; - var user = _context.Users.FirstOrDefault(u => u.Username == username); - if (user == null) return NotFound(); - - user.Username = 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 - - _logger.LogTrace("Passwort-Change durchgeführt"); - - return RedirectToAction("Index", "Home"); - } - - - // Edit-Form anzeigen - [Authorize] - [HttpGet] - public IActionResult UserSettings() - { - var username = User.Identity?.Name; - Console.WriteLine("gefundener User: " + username); - var claims = User.Claims.Select(c => new { c.Type, c.Value }).ToList(); - - var user = _context.Users.FirstOrDefault(u => u.Username == username); - if (user == null) return NotFound(); - - var DbProvider = _context.Database.ProviderName; - var mail = user.Email; - - ViewBag.Name = username; - ViewBag.mail = mail; - 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.Username == username); - if (user == null) return NotFound(); - - var databaseProvider = _context.Database.ProviderName; - - user.Username = model.Username; - - // Passwort ändern - if (!string.IsNullOrWhiteSpace(model.NewPassword)) - { - user.Username = 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/Controllers/DatabaseController.cs b/Watcher/Controllers/DatabaseController.cs index b456a5d..3fd5495 100644 --- a/Watcher/Controllers/DatabaseController.cs +++ b/Watcher/Controllers/DatabaseController.cs @@ -115,13 +115,13 @@ namespace Watcher.Controllers //return Ok($"Dump erfolgreich erstellt: {dumpFileName}"); TempData["DumpMessage"] = "SQLite-Dump erfolgreich erstellt."; - return RedirectToAction("UserSettings", "Auth"); + return RedirectToAction("UserSettings", "User"); } catch (Exception ex) { //return StatusCode(500, $"Fehler beim Erstellen des Dumps: {ex.Message}"); TempData["DumpError"] = $"Fehler beim Erstellen des Dumps: {ex.Message}"; - return RedirectToAction("UserSettings", "Auth"); + return RedirectToAction("UserSettings", "User"); } } diff --git a/Watcher/Controllers/UserController.cs b/Watcher/Controllers/UserController.cs new file mode 100644 index 0000000..8822274 --- /dev/null +++ b/Watcher/Controllers/UserController.cs @@ -0,0 +1,150 @@ +using System.Net.Mail; +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 Microsoft.Extensions.Options; +using Watcher.Data; +using Watcher.ViewModels; + +namespace Watcher.Controllers; + +public class UserController : Controller +{ + + private readonly AppDbContext _context; + private readonly ILogger _logger; + + public UserController(AppDbContext context, ILogger logger) + { + _context = context; + _logger = logger; + } + + + // Anzeigen der User-Informationen + [Authorize] + public IActionResult Info() + { + var claims = User.Claims.Select(c => new { c.Type, c.Value }).ToList(); + var Identity_User = User.Identity?.Name; + + var user = _context.Users.FirstOrDefault(u => u.Username == Identity_User); + if (user == null) return NotFound(); + + // Anzeigedaten + var DbProvider = _context.Database.ProviderName; + var username = user.Username; + var mail = user.Email; + var Id = user.Id; + + // Anzeigedaten an View übergeben + ViewBag.Claims = claims; + ViewBag.Name = username; + ViewBag.Mail = mail; + ViewBag.Id = Id; + + return View(); + } + + // Edit-Form anzeigen + [Authorize] + [HttpGet] + public IActionResult Edit() + { + var username = User.Identity?.Name; + var user = _context.Users.FirstOrDefault(u => u.Username == username); + if (user == null) return NotFound(); + + var model = new EditUserViewModel + { + Username = user.Username + }; + return View(model); + } + + // Edit speichern + [Authorize] + [HttpPost] + [ValidateAntiForgeryToken] + public IActionResult Edit(EditUserViewModel model) + { + if (!ModelState.IsValid) return View(model); + + var username = User.Identity?.Name; + var user = _context.Users.FirstOrDefault(u => u.Username == username); + if (user == null) return NotFound(); + + user.Username = 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 + + _logger.LogTrace("Passwort-Change durchgeführt"); + + return RedirectToAction("Index", "Home"); + } + + + // Edit-Form anzeigen + [Authorize] + [HttpGet] + public IActionResult UserSettings() + { + var username = User.Identity?.Name; + Console.WriteLine("gefundener User: " + username); + var claims = User.Claims.Select(c => new { c.Type, c.Value }).ToList(); + + var user = _context.Users.FirstOrDefault(u => u.Username == username); + if (user == null) return NotFound(); + + var DbProvider = _context.Database.ProviderName; + var mail = user.Email; + + ViewBag.Name = username; + ViewBag.mail = mail; + 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.Username == username); + if (user == null) return NotFound(); + + var databaseProvider = _context.Database.ProviderName; + + user.Username = model.Username; + + // Passwort ändern + if (!string.IsNullOrWhiteSpace(model.NewPassword)) + { + user.Username = BCrypt.Net.BCrypt.HashPassword(model.NewPassword); + } + + _context.SaveChanges(); + + // Eventuell hier das Auth-Cookie erneuern, wenn Username sich ändert + + return RedirectToAction("Index", "Home"); + } +} \ No newline at end of file diff --git a/Watcher/Views/Shared/_Layout.cshtml b/Watcher/Views/Shared/_Layout.cshtml index 985d7e9..3cbd23e 100644 --- a/Watcher/Views/Shared/_Layout.cshtml +++ b/Watcher/Views/Shared/_Layout.cshtml @@ -87,7 +87,7 @@