< Summary

Information
Class: Elsa.Identity.Providers.AdminApiKeyProvider
Assembly: Elsa.Identity
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Identity/Providers/AdminApiKeyProvider.cs
Line coverage
81%
Covered lines: 9
Uncovered lines: 2
Coverable lines: 11
Total lines: 44
Line coverage: 81.8%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.ctor()100%210%
.cctor()100%11100%
ProvideAsync(...)100%44100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Identity/Providers/AdminApiKeyProvider.cs

#LineLine coverage
 1using System.Security.Claims;
 2using AspNetCore.Authentication.ApiKey;
 3using Elsa.Identity.Models;
 4using Elsa.Identity.Options;
 5using Microsoft.Extensions.Options;
 6
 7namespace Elsa.Identity.Providers;
 8
 9/// <summary>
 10/// Provides an <see cref="IApiKey"/> with admin privileges for an explicitly configured admin API key.
 11/// </summary>
 29912public class AdminApiKeyProvider(IOptions<AdminApiKeyOptions> options) : IApiKeyProvider
 13{
 14    /// <summary>
 15    /// Initializes a new instance of the <see cref="AdminApiKeyProvider"/> class with no accepted API key.
 16    /// </summary>
 17    [Obsolete("Use the options-based constructor. The built-in admin API key is disabled unless explicitly configured.")
 018    public AdminApiKeyProvider() : this(Microsoft.Extensions.Options.Options.Create(new AdminApiKeyOptions()))
 19    {
 020    }
 21
 22    /// <summary>
 23    /// The all-zero development admin API key. Do not enable in production.
 24    /// </summary>
 225    public static readonly string DevelopmentApiKey = Guid.Empty.ToString();
 26
 27    /// <summary>
 28    /// The legacy development admin API key.
 29    /// </summary>
 30    [Obsolete("Use DevelopmentApiKey. The built-in admin API key is disabled unless explicitly configured.")]
 231    public static readonly string DefaultApiKey = DevelopmentApiKey;
 32
 33    /// <inheritdoc />
 34    public Task<IApiKey?> ProvideAsync(string key)
 35    {
 29936        var apiKeyOptions = options.Value;
 29937        if (string.IsNullOrWhiteSpace(apiKeyOptions.ApiKey) || key != apiKeyOptions.ApiKey)
 138            return Task.FromResult<IApiKey?>(null);
 39
 59640        var claims = apiKeyOptions.Permissions.Select(permission => new Claim("permissions", permission)).ToList();
 29841        var apiKey = new ApiKey(key, apiKeyOptions.OwnerName, claims);
 29842        return Task.FromResult<IApiKey>(apiKey)!;
 43    }
 44}