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
{
///
/// Hilfsklasse für das Lokalisieren der URLs für Login, Logout und Zugriff verweigert
///
public class LocalizedCookieAuthenticationEvents : CookieAuthenticationEvents
{
///
/// Implements the interface method by invoking the related delegate method.
///
/// Contains information about the event
public override Task RedirectToLogin(RedirectContext 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);
}
///
/// Implements the interface method by invoking the related delegate method.
///
/// Contains information about the event
public override Task RedirectToAccessDenied(RedirectContext 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);
}
///
/// Implements the interface method by invoking the related delegate method.
///
/// Contains information about the event
public override Task RedirectToLogout(RedirectContext context)
{
context.RedirectUri = $"/{CultureInfo.CurrentCulture.TwoLetterISOLanguageName}/account/accessdenied";
return base.RedirectToLogin(context);
}
}
}