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..d6cb17f 100644 --- a/Watcher/Controllers/DatabaseController.cs +++ b/Watcher/Controllers/DatabaseController.cs @@ -115,13 +115,15 @@ namespace Watcher.Controllers //return Ok($"Dump erfolgreich erstellt: {dumpFileName}"); TempData["DumpMessage"] = "SQLite-Dump erfolgreich erstellt."; - return RedirectToAction("UserSettings", "Auth"); + _logger.LogInformation("SQLite-Dump erfolgreich erstellt."); + 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"); + _logger.LogError("Fehler beim Erstellen des Dumps: {message}", ex.Message); + return RedirectToAction("UserSettings", "User"); } } diff --git a/Watcher/Controllers/UserController.cs b/Watcher/Controllers/UserController.cs new file mode 100644 index 0000000..a9700c7 --- /dev/null +++ b/Watcher/Controllers/UserController.cs @@ -0,0 +1,146 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +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; + var IdProvider = user.IdentityProvider; + + // Anzeigedaten an View übergeben + ViewBag.Claims = claims; + ViewBag.Name = username; + ViewBag.Mail = mail; + ViewBag.Id = Id; + ViewBag.IdProvider = IdProvider; + + + 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..944f4ef 100644 --- a/Watcher/Views/Shared/_Layout.cshtml +++ b/Watcher/Views/Shared/_Layout.cshtml @@ -87,13 +87,13 @@ @@ -40,6 +40,8 @@ Benutzer-ID @(ViewBag.Id ?? "Nicht verfügbar") + @if(IdProvider != "local") + { Login-Zeit @@ -77,10 +79,12 @@ } + } +
-
+ diff --git a/Watcher/Views/Auth/UserSettings.cshtml b/Watcher/Views/User/UserSettings.cshtml similarity index 71% rename from Watcher/Views/Auth/UserSettings.cshtml rename to Watcher/Views/User/UserSettings.cshtml index d2c1bbd..5bb6f35 100644 --- a/Watcher/Views/Auth/UserSettings.cshtml +++ b/Watcher/Views/User/UserSettings.cshtml @@ -27,7 +27,7 @@ {

Benutzerdaten ändern

- +
@@ -111,20 +111,45 @@
-

Systemeinstellungen ändern

- -
Anzeigeeinstellungen:
- -
+

Systemeinstellungen

Benachrichtigungen:

Registrierte E-Mail Adresse: @(ViewBag.mail ?? "nicht gefunden")

+ + +
+
+ Benachrichtigungseinstellungen +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ +
-
...:
- - -
diff --git a/Watcher/wwwroot/downloads/sqlite/watcher_dump_20250623_163038.sql b/Watcher/wwwroot/downloads/sqlite/watcher_dump_20250623_163038.sql deleted file mode 100644 index b49029c..0000000 --- a/Watcher/wwwroot/downloads/sqlite/watcher_dump_20250623_163038.sql +++ /dev/null @@ -1,89 +0,0 @@ -CREATE TABLE "__EFMigrationsHistory" ( - "MigrationId" TEXT NOT NULL CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY, - "ProductVersion" TEXT NOT NULL -); -CREATE TABLE "Tags" ( - "Id" INTEGER NOT NULL CONSTRAINT "PK_Tags" PRIMARY KEY AUTOINCREMENT, - "Name" TEXT NULL -); -CREATE TABLE sqlite_sequence(name,seq); -CREATE TABLE "Servers" ( - "Id" INTEGER NOT NULL CONSTRAINT "PK_Servers" PRIMARY KEY AUTOINCREMENT, - "CpuCores" INTEGER NOT NULL, - "CpuType" TEXT NULL, - "CreatedAt" TEXT NOT NULL, - "Description" TEXT NULL, - "GpuType" TEXT NULL, - "IPAddress" TEXT NOT NULL, - "IsOnline" INTEGER NOT NULL, - "LastSeen" TEXT NOT NULL, - "Name" TEXT NOT NULL, - "RamSize" REAL NOT NULL, - "TagId" INTEGER NULL, - "Type" TEXT NOT NULL, "IsVerified" INTEGER NOT NULL DEFAULT 0, - CONSTRAINT "FK_Servers_Tags_TagId" FOREIGN KEY ("TagId") REFERENCES "Tags" ("Id") -); -CREATE TABLE "LogEvents" ( - "Id" INTEGER NOT NULL CONSTRAINT "PK_LogEvents" PRIMARY KEY AUTOINCREMENT, - "ContainerId" INTEGER NULL, - "Level" TEXT NULL, - "Message" TEXT NULL, - "ServerId" INTEGER NULL, - "Timestamp" TEXT NOT NULL, - CONSTRAINT "FK_LogEvents_Containers_ContainerId" FOREIGN KEY ("ContainerId") REFERENCES "Containers" ("Id"), - CONSTRAINT "FK_LogEvents_Servers_ServerId" FOREIGN KEY ("ServerId") REFERENCES "Servers" ("Id") -); -CREATE TABLE "Images" ( - "Id" INTEGER NOT NULL CONSTRAINT "PK_Images" PRIMARY KEY AUTOINCREMENT, - "Name" TEXT NULL, - "Tag" TEXT NULL -); -CREATE TABLE "Containers" ( - "Id" INTEGER NOT NULL CONSTRAINT "PK_Containers" PRIMARY KEY AUTOINCREMENT, - "CreatedAt" TEXT NOT NULL, - "Hostname" TEXT NOT NULL, - "ImageId" INTEGER NULL, - "IsRunning" INTEGER NOT NULL, - "Name" TEXT NOT NULL, - "Status" TEXT NOT NULL, - "TagId" INTEGER NULL, - "Type" TEXT NOT NULL, - CONSTRAINT "FK_Containers_Images_ImageId" FOREIGN KEY ("ImageId") REFERENCES "Images" ("Id"), - CONSTRAINT "FK_Containers_Tags_TagId" FOREIGN KEY ("TagId") REFERENCES "Tags" ("Id") -); -CREATE TABLE "Metrics" ( - "Id" INTEGER NOT NULL CONSTRAINT "PK_Metrics" PRIMARY KEY AUTOINCREMENT, - "CPU_Load" REAL NOT NULL, - "CPU_Temp" REAL NOT NULL, - "DISK_Size" REAL NOT NULL, - "DISK_Temp" REAL NOT NULL, - "DISK_Usage" REAL NOT NULL, - "GPU_Load" REAL NOT NULL, - "GPU_Temp" REAL NOT NULL, - "GPU_Vram_Size" REAL NOT NULL, - "GPU_Vram_Usage" REAL NOT NULL, - "NET_In" REAL NOT NULL, - "NET_Out" REAL NOT NULL, - "RAM_Load" REAL NOT NULL, - "RAM_Size" REAL NOT NULL, - "ServerId" INTEGER NULL, - "Timestamp" TEXT NOT NULL -); -CREATE TABLE "Users" ( - "Id" INTEGER NOT NULL CONSTRAINT "PK_Users" PRIMARY KEY AUTOINCREMENT, - "Email" TEXT NULL, - "IdentityProvider" TEXT NOT NULL, - "LastLogin" TEXT NOT NULL, - "OIDC_Id" TEXT NULL, - "Password" TEXT NOT NULL, - "Username" TEXT NOT NULL -); -INSERT INTO __EFMigrationsHistory (MigrationId,ProductVersion) VALUES ('20250617153602_InitialMigration','8.0.6'); -INSERT INTO __EFMigrationsHistory (MigrationId,ProductVersion) VALUES ('20250617165126_ServerPrimaryKey','8.0.6'); -INSERT INTO __EFMigrationsHistory (MigrationId,ProductVersion) VALUES ('20250617174242_UserPasswordAdded','8.0.6'); -INSERT INTO __EFMigrationsHistory (MigrationId,ProductVersion) VALUES ('20250621124832_DB-Update Issue#32','8.0.6'); -INSERT INTO __EFMigrationsHistory (MigrationId,ProductVersion) VALUES ('20250621125157_DB-Update Issue#32 IsVerified-Servers','8.0.6'); -INSERT INTO Servers (Id,CpuCores,CpuType,CreatedAt,Description,GpuType,IPAddress,IsOnline,LastSeen,Name,RamSize,TagId,Type,IsVerified) VALUES ('2','0','','2025-06-21 13:56:23.5504821','','','192.168.178.158','1','2025-06-23 14:30:23.9455939','Ubuntu Workstation','0',NULL,'Standalone','0'); -INSERT INTO Servers (Id,CpuCores,CpuType,CreatedAt,Description,GpuType,IPAddress,IsOnline,LastSeen,Name,RamSize,TagId,Type,IsVerified) VALUES ('3','0','','2025-06-23 14:03:08.8875782','','','82.29.178.161','0','0001-01-01 00:00:00','hostinger-vps-1','0',NULL,'VPS','0'); -INSERT INTO Servers (Id,CpuCores,CpuType,CreatedAt,Description,GpuType,IPAddress,IsOnline,LastSeen,Name,RamSize,TagId,Type,IsVerified) VALUES ('4','0','','2025-06-23 14:07:49.0219821','','','192.168.178.68','0','0001-01-01 00:00:00','Unraid NAS','0',NULL,'Standalone','0'); -INSERT INTO Users (Id,Email,IdentityProvider,LastLogin,OIDC_Id,Password,Username) VALUES ('1','','local','2025-06-21 13:54:26.4374285','','$2a$11$iWF.vOrHuzgelKm3xWeJouVtmUd7LemK11yDxlw9t.YbLUZtJWRH6','admin');