< Summary

Information
Class: Elsa.Identity.ShellFeatures.IdentityFeature
Assembly: Elsa.Identity
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Identity/ShellFeatures/IdentityFeature.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 50
Coverable lines: 50
Total lines: 95
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ConfigureServices(...)100%210%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Identity/ShellFeatures/IdentityFeature.cs

#LineLine coverage
 1using AspNetCore.Authentication.ApiKey;
 2using CShells.Configuration;
 3using CShells.FastEndpoints.Features;
 4using CShells.Features;
 5using Elsa.Common.Multitenancy;
 6using Elsa.Extensions;
 7using Elsa.Identity.Contracts;
 8using Elsa.Identity.Entities;
 9using Elsa.Identity.Multitenancy;
 10using Elsa.Identity.Options;
 11using Elsa.Identity.Providers;
 12using Elsa.Identity.Services;
 13using JetBrains.Annotations;
 14using Microsoft.Extensions.Configuration;
 15using Microsoft.Extensions.DependencyInjection;
 16
 17namespace Elsa.Identity.ShellFeatures;
 18
 19/// <summary>
 20/// Provides identity feature to authenticate &amp; authorize API requests.
 21/// </summary>
 22[ShellFeature(
 23    DisplayName = "Identity",
 24    Description = "Provides identity management, authentication and authorization capabilities",
 25    DependsOn = ["SystemClock"])]
 26[UsedImplicitly]
 27public class IdentityFeature : IFastEndpointsShellFeature
 28{
 29    public void ConfigureServices(IServiceCollection services)
 30    {
 031        services.AddOptions<IdentityTokenOptions>().Configure<ShellConfiguration>((options, config) => config.GetSection
 032        services.Configure<ApiKeyOptions>(ApiKeyDefaults.AuthenticationScheme, options =>
 033        {
 034            options.Realm = "Elsa Workflows";
 035            options.KeyName = "ApiKey";
 036        });
 037        services.Configure<UsersOptions>(_ => { });
 038        services.Configure<ApplicationsOptions>(_ => { });
 039        services.Configure<RolesOptions>(_ => { });
 40
 41        // Memory stores.
 042        services
 043            .AddMemoryStore<User, MemoryUserStore>()
 044            .AddMemoryStore<Application, MemoryApplicationStore>()
 045            .AddMemoryStore<Role, MemoryRoleStore>();
 46
 47        // User providers.
 048        services
 049            .AddScoped<AdminUserProvider>()
 050            .AddScoped<StoreBasedUserProvider>()
 051            .AddScoped<ConfigurationBasedUserProvider>();
 52
 53        // Application providers.
 054        services
 055            .AddScoped<StoreBasedApplicationProvider>()
 056            .AddScoped<ConfigurationBasedApplicationProvider>();
 57
 58        // Role providers.
 059        services
 060            .AddScoped<AdminRoleProvider>()
 061            .AddScoped<StoreBasedRoleProvider>()
 062            .AddScoped<ConfigurationBasedRoleProvider>();
 63
 64        // Tenant resolution strategies.
 065        services
 066            .AddScoped<ITenantResolver, ClaimsTenantResolver>()
 067            .AddScoped<ITenantResolver, CurrentUserTenantResolver>();
 68
 69        // Services.
 070        services
 071            .AddScoped<IUserManager, UserManager>()
 072            .AddScoped<IRoleManager, RoleManager>()
 073            .AddScoped<ISecretHasher, DefaultSecretHasher>()
 074            .AddScoped<IAccessTokenIssuer, DefaultAccessTokenIssuer>()
 075            .AddScoped<IUserCredentialsValidator, DefaultUserCredentialsValidator>()
 076            .AddScoped<IApplicationCredentialsValidator, DefaultApplicationCredentialsValidator>()
 077            .AddScoped<IApiKeyGenerator>(sp => sp.GetRequiredService<DefaultApiKeyGeneratorAndParser>())
 078            .AddScoped<IApiKeyParser>(sp => sp.GetRequiredService<DefaultApiKeyGeneratorAndParser>())
 079            .AddScoped<IClientIdGenerator, DefaultClientIdGenerator>()
 080            .AddScoped<ISecretGenerator, DefaultSecretGenerator>()
 081            .AddScoped<IRandomStringGenerator, DefaultRandomStringGenerator>()
 082            .AddScoped<DefaultApiKeyGeneratorAndParser>()
 083            .AddHttpContextAccessor()
 084            ;
 85
 86        // Overridable services.
 087        services
 088            .AddScoped<IUserStore, MemoryUserStore>()
 089            .AddScoped<IApplicationStore, MemoryApplicationStore>()
 090            .AddScoped<IRoleStore, MemoryRoleStore>()
 091            .AddScoped<IUserProvider, StoreBasedUserProvider>()
 092            .AddScoped<IApplicationProvider, StoreBasedApplicationProvider>()
 093            .AddScoped<IRoleProvider, StoreBasedRoleProvider>();
 094    }
 95}