mirror of
https://github.com/LD-Reborn/Berufsschule_HAM.git
synced 2025-12-20 15:01:56 +00:00
Added UserModel, Added Login and Logout and authorization, Made dark mode default
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Berufsschule_HAM.Models;
|
||||
using Novell.Directory.Ldap;
|
||||
using Microsoft.AspNetCore.Authentication;
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using System.Security.Claims;
|
||||
using Berufsschule_HAM.Services;
|
||||
using ElmahCore;
|
||||
using Berufsschule_HAM.Exceptions;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
|
||||
[ApiExplorerSettings(IgnoreApi = true)]
|
||||
[Route("[controller]")]
|
||||
@@ -16,11 +19,72 @@ public class HomeController : Controller
|
||||
_ldap = ldap ?? throw new ArgumentNullException(nameof(ldap));
|
||||
}
|
||||
|
||||
// GET: /Assets
|
||||
[Authorize]
|
||||
[HttpGet("Index")]
|
||||
[HttpGet("/")]
|
||||
public IActionResult Index()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
|
||||
[HttpPost("Login")]
|
||||
public async Task<ActionResult> Login(string username, string password)
|
||||
{
|
||||
var authenticationResult = await _ldap.AuthenticateUser(username, password);
|
||||
if (authenticationResult.Success)
|
||||
{
|
||||
List<Claim> claims =
|
||||
[
|
||||
new(ClaimTypes.Name, username)
|
||||
];
|
||||
|
||||
var claimsIdentity = new ClaimsIdentity(
|
||||
claims,
|
||||
CookieAuthenticationDefaults.AuthenticationScheme);
|
||||
|
||||
var authProperties = new AuthenticationProperties
|
||||
{
|
||||
IsPersistent = true,
|
||||
ExpiresUtc = DateTimeOffset.UtcNow.AddMinutes(300)
|
||||
};
|
||||
|
||||
await HttpContext.SignInAsync(
|
||||
CookieAuthenticationDefaults.AuthenticationScheme,
|
||||
new ClaimsPrincipal(claimsIdentity),
|
||||
authProperties);
|
||||
|
||||
return RedirectToAction("Index", "Home");
|
||||
}
|
||||
switch (authenticationResult.AuthenticationState)
|
||||
{
|
||||
case UserNotAuthenticatedReason.InvalidCredentials:
|
||||
return View(new LoginViewModel() { ErrorText = "Invalid login credentials" }); // TODO add localization (e.g. T["Invalid login credentials"]; see: https://learn.microsoft.com/de-de/dotnet/core/extensions/localization)
|
||||
case UserNotAuthenticatedReason.UserLockedOut:
|
||||
return View(new LoginViewModel() { ErrorText = "Your account has been locked. Wait a few minutes or ask an administrator to unlock you" }); // TODO add localization (e.g. T["Invalid login credentials"]; see: https://learn.microsoft.com/de-de/dotnet/core/extensions/localization)
|
||||
case UserNotAuthenticatedReason.UserNotAuthorized:
|
||||
return View(new LoginViewModel() { ErrorText = "You are not authorized for login. Ask an administrator to authorize you." }); // TODO add localization (e.g. T["Invalid login credentials"]; see: https://learn.microsoft.com/de-de/dotnet/core/extensions/localization)
|
||||
default:
|
||||
await HttpContext.RaiseError(new HellFrozeOverException());
|
||||
return View(new LoginViewModel() { ErrorText = "Hell froze over. Make a screenshot and send it to an administrator." }); // TODO add localization (e.g. T["Invalid login credentials"]; see: https://learn.microsoft.com/de-de/dotnet/core/extensions/localization)
|
||||
}
|
||||
}
|
||||
|
||||
[HttpGet("Login")]
|
||||
public ActionResult Login()
|
||||
{
|
||||
return View(new LoginViewModel());
|
||||
}
|
||||
|
||||
[HttpGet("Logout")]
|
||||
public ActionResult Logout()
|
||||
{
|
||||
HttpContext.SignOutAsync();
|
||||
return RedirectToAction("Index", "Home");
|
||||
}
|
||||
|
||||
[HttpGet("AccessDenied")]
|
||||
public ActionResult AccessDenied()
|
||||
{
|
||||
return View();
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ public class UsersController : Controller
|
||||
}
|
||||
|
||||
[HttpGet("Index")]
|
||||
public async Task<IEnumerable<Dictionary<string, string>>> Index(UsersIndexRequestModel requestModel)
|
||||
public async Task<IEnumerable<UserModel>> Index(UsersIndexRequestModel requestModel)
|
||||
{
|
||||
string? uid = requestModel.Uid;
|
||||
List<string> attributes = ["cn", "sn", "title", "uid", "jpegPhoto", "userPassword", "description"];
|
||||
@@ -96,12 +96,12 @@ public class UsersController : Controller
|
||||
return false;
|
||||
}
|
||||
string uid = requestModel.uid;
|
||||
Dictionary<string, string>? user = null;
|
||||
UserModel? user = null;
|
||||
if (requestModel.Cn is not null)
|
||||
{
|
||||
await _ldap.UpdateUser(uid, "cn", requestModel.Cn);
|
||||
user ??= await _ldap.GetUserByUidAsync(uid);
|
||||
string newUid = user["sn"].ToLower() + requestModel.Cn.ToLower();
|
||||
string newUid = user.Sn?.ToLower() + requestModel.Cn.ToLower();
|
||||
await _ldap.UpdateUser(uid, "uid", newUid);
|
||||
uid = newUid;
|
||||
}
|
||||
@@ -109,7 +109,7 @@ public class UsersController : Controller
|
||||
{
|
||||
await _ldap.UpdateUser(uid, "sn", requestModel.Sn);
|
||||
user ??= await _ldap.GetUserByUidAsync(uid);
|
||||
string newUid = requestModel.Sn.ToLower() + user["cn"].ToLower();
|
||||
string newUid = requestModel.Sn.ToLower() + user.Cn?.ToLower();
|
||||
await _ldap.UpdateUser(uid, "uid", newUid);
|
||||
uid = newUid;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user