< 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
93%
Covered lines: 60
Uncovered lines: 4
Coverable lines: 64
Total lines: 117
Line coverage: 93.7%
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%1193.75%

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.Common.ShellFeatures;
 7using Elsa.Extensions;
 8using Elsa.Identity.Contracts;
 9using Elsa.Identity.Entities;
 10using Elsa.Identity.Multitenancy;
 11using Elsa.Identity.Options;
 12using Elsa.Identity.Providers;
 13using Elsa.Identity.Services;
 14using Elsa.Platform.PackageManifest.Generator.Hints;
 15using JetBrains.Annotations;
 16using Microsoft.Extensions.Configuration;
 17using Microsoft.Extensions.DependencyInjection;
 18using Microsoft.Extensions.DependencyInjection.Extensions;
 19
 20namespace Elsa.Identity.ShellFeatures;
 21
 22/// <summary>
 23/// Provides identity feature to authenticate &amp; authorize API requests.
 24/// </summary>
 25[ManifestFeatureCategory("Identity")]
 26[ManifestFeatureCategory("Security")]
 27[ShellFeature(
 28    DisplayName = "Identity",
 29    Description = "Provides identity management, authentication and authorization capabilities",
 30    DependsOn = [typeof(SystemClockFeature)])]
 31[UsedImplicitly]
 32public class IdentityFeature : IFastEndpointsShellFeature
 33{
 34    public void ConfigureServices(IServiceCollection services)
 35    {
 236        services.AddOptions<IdentityTokenOptions>().Configure<ShellConfiguration>((options, config) => config.GetSection
 237        services.Configure<ApiKeyOptions>(ApiKeyDefaults.AuthenticationScheme, options =>
 238        {
 039            options.Realm = "Elsa Workflows";
 040            options.KeyName = "ApiKey";
 241        });
 242        services.Configure<AdminUserProviderOptions>(_ => { });
 243        services.Configure<UsersOptions>(_ => { });
 244        services.Configure<ApplicationsOptions>(_ => { });
 245        services.Configure<RolesOptions>(_ => { });
 46
 47        // The identity stores are tenant-scoped, so a host that never enables multitenancy still needs an
 48        // accessor. TryAdd leaves an existing registration -- notably MultitenancyFeature's -- untouched.
 249        services.TryAddSingleton<ITenantAccessor, DefaultTenantAccessor>();
 250        services.AddHostedService<HostedServices.StoredPermissionValidator>();
 251        services.AddHostedService<HostedServices.IdentityBootstrapDiagnostic>();
 252        services.AddScoped<Services.RoleSecurityNotifier>();
 253        services.AddMemoryCache();
 254        services.Configure<PermissionStampOptions>(_ => { });
 255        services.AddScoped<Services.IPermissionStampCalculator, Services.PermissionStampCalculator>();
 256        services.AddScoped<Services.PermissionStampValidator>();
 57
 58        // Memory stores.
 259        services
 260            .AddMemoryStore<User, MemoryUserStore>()
 261            .AddMemoryStore<Application, MemoryApplicationStore>()
 262            .AddMemoryStore<Role, MemoryRoleStore>();
 63
 64        // User providers.
 265        services
 266            .AddScoped<AdminUserProvider>()
 267            .AddScoped<StoreBasedUserProvider>()
 268            .AddScoped<ConfigurationBasedUserProvider>();
 69
 70        // Application providers.
 271        services
 272            .AddScoped<StoreBasedApplicationProvider>()
 273            .AddScoped<ConfigurationBasedApplicationProvider>();
 74
 75        // Role providers.
 276        services
 277            .AddScoped<AdminRoleProvider>()
 278            .AddScoped<StoreBasedRoleProvider>()
 279            .AddScoped<ConfigurationBasedRoleProvider>();
 80
 81        // Tenant resolution strategies.
 282        services
 283            .AddScoped<ITenantResolver, ClaimsTenantResolver>()
 284            .AddScoped<ITenantResolver, CurrentUserTenantResolver>();
 85
 86        // Services.
 287        services
 288            .AddScoped<IUserManager, UserManager>()
 289            .AddScoped<IRoleManager, RoleManager>()
 290            .AddScoped<IRoleAuthorizationService, RoleAuthorizationService>()
 291            .AddScoped<IRoleDeletionCoordinator, RoleDeletionCoordinator>()
 292            .AddScoped<IUserDeletionCoordinator, UserDeletionCoordinator>()
 293            .AddScoped<ISecretHasher, DefaultSecretHasher>()
 294            .AddScoped<IElsaTokenService, DefaultElsaTokenService>()
 195            .AddScoped<IAccessTokenIssuer>(sp => ActivatorUtilities.CreateInstance<DefaultAccessTokenIssuer>(sp))
 296            .AddScoped<IIdentityRefreshTokenService, DefaultIdentityRefreshTokenService>()
 297            .AddScoped<IUserCredentialsValidator, DefaultUserCredentialsValidator>()
 298            .AddScoped<IApplicationCredentialsValidator, DefaultApplicationCredentialsValidator>()
 099            .AddScoped<IApiKeyGenerator>(sp => sp.GetRequiredService<DefaultApiKeyGeneratorAndParser>())
 0100            .AddScoped<IApiKeyParser>(sp => sp.GetRequiredService<DefaultApiKeyGeneratorAndParser>())
 2101            .AddScoped<IClientIdGenerator, DefaultClientIdGenerator>()
 2102            .AddScoped<ISecretGenerator, DefaultSecretGenerator>()
 2103            .AddScoped<IRandomStringGenerator, DefaultRandomStringGenerator>()
 2104            .AddScoped<DefaultApiKeyGeneratorAndParser>()
 2105            .AddHttpContextAccessor()
 2106            ;
 107
 108        // Overridable services.
 2109        services
 2110            .AddScoped<IUserStore, MemoryUserStore>()
 2111            .AddScoped<IApplicationStore, MemoryApplicationStore>()
 2112            .AddScoped<IRoleStore, MemoryRoleStore>()
 2113            .AddScoped<IUserProvider, StoreBasedUserProvider>()
 2114            .AddScoped<IApplicationProvider, StoreBasedApplicationProvider>()
 2115            .AddScoped<IRoleProvider, StoreBasedRoleProvider>();
 2116    }
 117}