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); } } }