using System.Collections.Generic; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.HttpOverrides; using Microsoft.Extensions.DependencyInjection; using xCommons.Authorization; using xCommons.Extensions; using xIdentityHelper; namespace xAiApi.Extensions { public static class XProgramExtensions { /// /// Register Authorization Policies /// /// /// public static void AddXAuthorization( this IServiceCollection services, IDictionary policies = null ) { // services.AddAuthorization(options => { // if (!policies.IsNull()) { // // Fill Policies ... using (var policiesEnumerator = policies.GetEnumerator()) { while (policiesEnumerator.MoveNext()) { var policyDescriptor = policiesEnumerator.Current; options.AddPolicy(policyDescriptor.Key, policyDescriptor.Value); } } } // var xPolicies = XAuthorizationHelper.GetXAuthorizationPolicies(); if (!xPolicies.IsNull()) { // // Fill Policies ... using (var policiesEnumerator = xPolicies.GetEnumerator()) { while (policiesEnumerator.MoveNext()) { var policyDescriptor = policiesEnumerator.Current; options.AddPolicy(policyDescriptor.Key, policyDescriptor.Value); } } } }); // services.AddSingleton(); } /// /// Use Forward Headers Options for resolving behind a proxy issues ... /// /// /// public static void UseXForwardOptions(this IApplicationBuilder source) { // var forwardOptions = new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto, RequireHeaderSymmetry = false }; // forwardOptions.KnownNetworks.Clear(); forwardOptions.KnownProxies.Clear(); // // ref: https://github.com/aspnet/Docs/issues/2384 source.UseForwardedHeaders(forwardOptions); } } }