75 lines
3.1 KiB
C#
75 lines
3.1 KiB
C#
using System.Globalization;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Authentication;
|
|
using Microsoft.AspNetCore.Authentication.Cookies;
|
|
using Microsoft.Net.Http.Headers;
|
|
|
|
namespace gehGassi.Web.Helper
|
|
{
|
|
/// <summary>
|
|
/// Hilfsklasse für das Lokalisieren der URLs für Login, Logout und Zugriff verweigert
|
|
/// </summary>
|
|
public class LocalizedCookieAuthenticationEvents : CookieAuthenticationEvents
|
|
{
|
|
/// <summary>
|
|
/// Implements the interface method by invoking the related delegate method.
|
|
/// </summary>
|
|
/// <param name="context">Contains information about the event</param>
|
|
public override Task RedirectToLogin(RedirectContext<CookieAuthenticationOptions> context)
|
|
{
|
|
if (context.HttpContext.Request.IsAjaxRequest())
|
|
{
|
|
context.Response.StatusCode = 451;
|
|
context.Response.Headers[HeaderNames.Location] = context.RedirectUri;
|
|
return Task.FromResult(0);
|
|
}
|
|
|
|
context.RedirectUri = $"/{CultureInfo.CurrentCulture.TwoLetterISOLanguageName}/account/login";
|
|
return base.RedirectToLogin(context);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Implements the interface method by invoking the related delegate method.
|
|
/// </summary>
|
|
/// <param name="context">Contains information about the event</param>
|
|
public override Task RedirectToAccessDenied(RedirectContext<CookieAuthenticationOptions> context)
|
|
{
|
|
if (context.HttpContext.Request.IsAjaxRequest())
|
|
{
|
|
var statusCode = 401;
|
|
if (context.Response.Headers.ContainsKey("StatusToSet"))
|
|
{
|
|
statusCode = int.Parse(context.Response.Headers["StatusToSet"]);
|
|
context.Response.Headers.Remove("StatusToSet");
|
|
}
|
|
context.Response.StatusCode = statusCode;
|
|
return Task.FromResult(0);
|
|
}
|
|
|
|
if (context.Response.Headers.ContainsKey("StatusToSet"))
|
|
{
|
|
var statusCode = int.Parse(context.Response.Headers["StatusToSet"]);
|
|
context.Response.Headers.Remove("StatusToSet");
|
|
if (statusCode == 402)
|
|
{
|
|
context.RedirectUri = $"/{CultureInfo.CurrentCulture.TwoLetterISOLanguageName}/account/subscriptiondenied";
|
|
return base.RedirectToLogin(context);
|
|
}
|
|
}
|
|
|
|
context.RedirectUri = $"/{CultureInfo.CurrentCulture.TwoLetterISOLanguageName}/account/accessdenied";
|
|
return base.RedirectToLogin(context);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Implements the interface method by invoking the related delegate method.
|
|
/// </summary>
|
|
/// <param name="context">Contains information about the event</param>
|
|
public override Task RedirectToLogout(RedirectContext<CookieAuthenticationOptions> context)
|
|
{
|
|
context.RedirectUri = $"/{CultureInfo.CurrentCulture.TwoLetterISOLanguageName}/account/accessdenied";
|
|
return base.RedirectToLogin(context);
|
|
}
|
|
}
|
|
}
|