using System.Linq; using System.Security.Claims; using Owin; using Sitecore.Abstractions; using Sitecore.Diagnostics; using Sitecore.Owin.Authentication.Configuration; using Sitecore.Owin.Pipelines.Initialize; using Custom.Owin.Authentication.Extensions; namespace Custom.Owin.Authentication.Samples.Pipelines.Initialize { public class ShowUserAuthType : InitializeProcessor { public ShowUserAuthType(BaseSiteContextFactory siteContextFactory, FederatedAuthenticationConfiguration federatedAuthenticationConfiguration) { this.FederatedAuthenticationConfiguration = federatedAuthenticationConfiguration; this.SiteContextFactory = siteContextFactory; } protected FederatedAuthenticationConfiguration FederatedAuthenticationConfiguration { get; } protected BaseSiteContextFactory SiteContextFactory { get; } public override void Process([Sitecore.Annotations.NotNull] InitializeArgs args) { Assert.ArgumentNotNull(args, nameof(args)); foreach (var virtualFolder in this.SiteContextFactory.GetSites().Select(site => site.VirtualFolder).Distinct()) { if (string.IsNullOrEmpty(virtualFolder)) { continue; } args.App.MapEx(virtualFolder + "user", builder => { builder.Run(async context => { string authenticationType = null; string identityProviderName = null; string claims = null; if (Sitecore.Context.User.Identity is ClaimsIdentity claimsIdentity) { authenticationType = claimsIdentity.AuthenticationType; identityProviderName = this.FederatedAuthenticationConfiguration.GetIdentityProvider(claimsIdentity)?.Name; claims = "" + claimsIdentity.Claims.Select(claim => $"").Aggregate((s, s1) => s + s1) + "
{claim.Type}{claim.Value}
"; } string output = $"username: {Sitecore.Context.GetUserName()}

" + $"authenticationType: {authenticationType}
" + $"idp: {identityProviderName}
" + $"site: {Sitecore.Context.Site.Name}
" + $"mode: {Sitecore.Context.Site.DisplayMode}

" + $"IsAdministrator: {Sitecore.Context.User.IsAdministrator}
" + $"IsVirtual: {Sitecore.Context.User.RuntimeSettings.IsVirtual}
" + $"claims: {claims}"; context.Response.ContentType = "text/html"; await context.Response.WriteAsync(output).ConfigureAwait(false); }); }); } } } }