146 lines
3.9 KiB
C#
146 lines
3.9 KiB
C#
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<UserController> _logger;
|
|
|
|
public UserController(AppDbContext context, ILogger<UserController> 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");
|
|
}
|
|
} |