示例#1
0
        public static IMvcCoreBuilder AddIdentityApi <TUser, TRole, TTenant, TApplication, TKey>(
            this IMvcCoreBuilder mvcBuilder,
            Action <IdentityApiOptions> configureApi = null)
            where TUser : IdentityUserExtended <TKey>
            where TRole : IdentityRoleExtended <TKey>
            where TTenant : IdentityTenant <TKey>
            where TApplication : IdentityApplication <TKey>
            where TKey : IEquatable <TKey>
        {
            if (configureApi != null)
            {
                mvcBuilder.Services.Configure(configureApi);
            }

            mvcBuilder.Services.AddScoped <ISignInHandler, CookiesSignInHandler <TTenant, TApplication, TKey> >();

            mvcBuilder.AddActiveRoute <TenantController <TTenant, TKey>, IdentityApiFeature, IdentityApiOptions>();
            mvcBuilder.AddActiveRoute <ApplicationController <TApplication, TKey>, IdentityApiFeature, IdentityApiOptions>();
            mvcBuilder.AddActiveRoute <UserController <TUser, TTenant, TKey>, IdentityApiFeature, IdentityApiOptions>();
            mvcBuilder.AddActiveRoute <RoleController <TRole, TKey>, IdentityApiFeature, IdentityApiOptions>();

            if (mvcBuilder.Services.BuildServiceProvider().GetRequiredService <ITokenInfoProvider>().Enabled)
            {
                mvcBuilder.AddActiveRoute <TokenController <TUser, TTenant, TApplication, TKey>, IdentityApiFeature, IdentityApiOptions>();
            }

            return(mvcBuilder);
        }
示例#2
0
文件: Add.cs 项目: deeja/metrics
        private static void AddMetricsApi(this IMvcCoreBuilder mvcBuilder, Action <MetricsOptions> configureAction = null)
        {
            if (configureAction != null)
            {
                mvcBuilder.Services.Configure(configureAction);
            }

            mvcBuilder.AddActiveRoute <MetricsBuilder, MetricsController, MetricsFeature, MetricsOptions>();
        }
示例#3
0
        public static IMvcCoreBuilder AddBackgroundTasksApi(this IMvcCoreBuilder mvcBuilder,
                                                            Action <BackgroundTaskOptions> configureTasks = null)
        {
            mvcBuilder.Services.Configure(configureTasks);
            mvcBuilder.Services.AddSafeLogging();

            mvcBuilder.AddActiveRoute <BackgroundTaskController, BackgroundTasksFeature, BackgroundTaskOptions>();
            return(mvcBuilder);
        }
示例#4
0
        public static RuntimeBuilder AddRuntimeApi <T>(this IMvcCoreBuilder mvcBuilder,
                                                       Action <RuntimeOptions> configureAction = null)
        {
            if (configureAction != null)
            {
                mvcBuilder.Services.Configure(configureAction);
            }

            return(mvcBuilder.AddActiveRoute <RuntimeBuilder, RuntimeController <T>, RuntimeFeature, RuntimeOptions>());
        }
示例#5
0
文件: Add.cs 项目: qiqi545/HQ
        public static RuntimeBuilder AddRuntimeApi(this IMvcCoreBuilder mvcBuilder,
                                                   Action <RuntimeOptions> configureAction = null)
        {
            if (configureAction != null)
            {
                mvcBuilder.Services.Configure(configureAction);
            }

            mvcBuilder.AddActiveRoute <RuntimeController, RuntimeComponent, RuntimeOptions>();
            return(new RuntimeBuilder(mvcBuilder.Services));
        }
示例#6
0
        private static void AddCachesDebuggerApi(this IMvcCoreBuilder mvcBuilder,
                                                 Action <CachesDebugOptions> configureAction = null)
        {
            if (configureAction != null)
            {
                mvcBuilder.Services.Configure(configureAction);
            }

            mvcBuilder
            .AddActiveRoute <OperationsBuilder, CachesDebugController, CachesDebugFeature, CachesDebugOptions>();
        }
示例#7
0
        private static void AddEnvironmentApi(this IMvcCoreBuilder mvcBuilder,
                                              Action <EnvironmentDebugOptions> configureAction = null)
        {
            if (configureAction != null)
            {
                mvcBuilder.Services.Configure(configureAction);
            }

            mvcBuilder
            .AddActiveRoute <OperationsBuilder, EnvironmentDebugController, EnvironmentDebugFeature,
                             EnvironmentDebugOptions>();
        }
示例#8
0
文件: Add.cs 项目: qiqi545/HQ
        public static IMvcCoreBuilder AddSchemaApi(this IMvcCoreBuilder mvcBuilder,
                                                   Action <SchemaOptions> configureAction = null)
        {
            if (configureAction != null)
            {
                mvcBuilder.Services.Configure(configureAction);
            }

            mvcBuilder.Services.AddTypeResolver();

            mvcBuilder.AddActiveRoute <SchemaController, SchemaComponent, SchemaOptions>();

            return(mvcBuilder);
        }
示例#9
0
        private static void AddServicesDebuggerApi(this IMvcCoreBuilder mvcBuilder,
                                                   Action <ServicesDebugOptions> configureAction = null)
        {
            if (configureAction != null)
            {
                mvcBuilder.Services.Configure(configureAction);
            }

            mvcBuilder.AddJsonOptions(o =>
            {
                o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
            });

            mvcBuilder
            .AddActiveRoute <OperationsBuilder, ServicesDebugController, ServicesDebugFeature, ServicesDebugOptions
                             >();
        }
示例#10
0
        private static void AddOptionsDebuggerApi(this IMvcCoreBuilder mvcBuilder,
                                                  Action <OptionsDebugOptions> configureAction = null)
        {
            if (configureAction != null)
            {
                mvcBuilder.Services.Configure(configureAction);
            }

            mvcBuilder.AddJsonOptions(o =>
            {
                o.JsonSerializerOptions.IgnoreNullValues = true;
                o.JsonSerializerOptions.Converters.Add(new IgnoreConverter());
                o.JsonSerializerOptions.Converters.Add(new EnumDictionaryConverter());
                o.JsonSerializerOptions.Converters.Add(new IpAddressConverter());
            });

            mvcBuilder
            .AddActiveRoute <OperationsBuilder, OptionsDebugController, OptionsDebugFeature, OptionsDebugOptions>();
        }
示例#11
0
        public static IMvcCoreBuilder AddConfigurationApi(this IMvcCoreBuilder mvcBuilder,
                                                          Action <ConfigurationApiOptions> configureAction = null)
        {
            if (configureAction != null)
            {
                mvcBuilder.Services.Configure <ConfigurationApiOptions>(o =>
                {
                    configureAction.Invoke(o);
                });
            }

            mvcBuilder.Services.AddValidOptions();
            mvcBuilder.Services.AddSaveOptions();

            mvcBuilder.Services.TryAddSingleton <ITypeResolver, ReflectionTypeResolver>();
            mvcBuilder.Services.AddSingleton <ConfigurationService>();

            mvcBuilder.AddActiveRoute <ConfigurationController, ConfigurationFeature, ConfigurationApiOptions>();

            return(mvcBuilder);
        }
示例#12
0
        public static IMvcCoreBuilder AddSuperUserTokenController <TKey>(this IMvcCoreBuilder mvcBuilder, Func <IServiceProvider, DateTimeOffset> timestamps,
                                                                         Action <ClaimOptions> configureClaimsAction        = null,
                                                                         Action <TokenOptions> configureTokensAction        = null,
                                                                         Action <SuperUserOptions> configureSuperUserAction = null)
            where TKey : IEquatable <TKey>
        {
            if (configureClaimsAction != null)
            {
                mvcBuilder.Services.Configure(configureClaimsAction);
            }

            if (configureTokensAction != null)
            {
                mvcBuilder.Services.Configure(configureTokensAction);
            }

            if (configureSuperUserAction != null)
            {
                mvcBuilder.Services.Configure(configureSuperUserAction);
            }

            var claims = new ClaimOptions();

            configureClaimsAction?.Invoke(claims);

            var tokens = new TokenOptions();

            configureTokensAction?.Invoke(tokens);

            var superUser = new SuperUserOptions();

            configureSuperUserAction?.Invoke(superUser);

            var credentials = new
            {
                SigningKeyString    = tokens.SigningKey,
                EncryptingKeyString = tokens.EncryptingKey
            }.QuackLike <ITokenCredentials>();

            AuthenticationExtensions.MaybeSetSecurityKeys(credentials);

            var scheme = superUser.Scheme ?? tokens.Scheme;

            mvcBuilder.Services.AddAuthentication().AddJwtBearer(scheme, o =>
            {
                if (tokens.Encrypt)
                {
                    o.TokenValidationParameters = new TokenValidationParameters
                    {
                        TokenDecryptionKeyResolver = (token, securityToken, kid, parameters) => new[] { credentials.EncryptingKey.Key },
                        ValidateIssuerSigningKey   = false,
                        ValidIssuer         = tokens.Issuer,
                        ValidateLifetime    = true,
                        ValidateAudience    = true,
                        ValidAudience       = tokens.Audience,
                        RequireSignedTokens = false,
                        IssuerSigningKey    = credentials.SigningKey.Key,
                        TokenDecryptionKey  = credentials.EncryptingKey.Key,
                        ClockSkew           = TimeSpan.FromSeconds(tokens.ClockSkewSeconds),
                        RoleClaimType       = claims.RoleClaim,
                        NameClaimType       = claims.UserNameClaim
                    };
                }
                else
                {
                    o.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuerSigningKey = true,
                        ValidIssuer         = tokens.Issuer,
                        ValidateLifetime    = true,
                        ValidateAudience    = true,
                        ValidAudience       = tokens.Audience,
                        RequireSignedTokens = true,
                        IssuerSigningKey    = credentials.SigningKey.Key,
                        ClockSkew           = TimeSpan.FromSeconds(tokens.ClockSkewSeconds),
                        RoleClaimType       = claims.RoleClaim,
                        NameClaimType       = claims.UserNameClaim
                    };
                }
            });

            mvcBuilder.Services.TryAddSingleton <IIdentityClaimNameProvider, DefaultIdentityClaimNameProvider>();
            mvcBuilder.Services.TryAddSingleton <ITokenFabricator <TKey> >(r => new DefaultTokenFabricator <TKey>(() => timestamps(r), r.GetRequiredService <IOptionsSnapshot <TokenOptions> >()));

            mvcBuilder.AddActiveRoute <SuperUserTokenController <TKey>, SuperUserFeature, SuperUserOptions>();
            return(mvcBuilder);
        }
示例#13
0
        public static RuntimeBuilder AddRuntimeApi <T>(this IMvcCoreBuilder mvcBuilder, IConfiguration config)
        {
            mvcBuilder.Services.Configure <RuntimeOptions>(config, o => { o.BindNonPublicProperties = false; });

            return(mvcBuilder.AddActiveRoute <RuntimeBuilder, RuntimeController <T>, RuntimeFeature, RuntimeOptions>());
        }