< Summary

Information
Class: Elsa.ExternalAuthentication.Services.ConfigurationSecretBindingResolver
Assembly: Elsa.ExternalAuthentication
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.ExternalAuthentication/Services/ConfigurationSecretBindingResolver.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 17
Coverable lines: 17
Total lines: 38
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
get_Type()100%210%
GetStateAsync(...)100%210%
ResolveAsync(...)0%620%
EnsureType(...)0%2040%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.ExternalAuthentication/Services/ConfigurationSecretBindingResolver.cs

#LineLine coverage
 1using Elsa.ExternalAuthentication.Contracts;
 2using Elsa.ExternalAuthentication.Models;
 3using Microsoft.Extensions.Configuration;
 4
 5namespace Elsa.ExternalAuthentication.Services;
 6
 7/// <summary>Resolves a deployment-owned secret from configuration without ever exposing it through connection models.</
 08public sealed class ConfigurationSecretBindingResolver(
 09    IConfiguration configuration,
 010    IExternalAuthenticationHandleHasher hasher) : ISecretBindingResolver
 11{
 12    public const string ResolverType = "configuration";
 013    public string Type => ResolverType;
 14
 15    public ValueTask<SecretBindingState> GetStateAsync(SecretBinding binding, CancellationToken cancellationToken = defa
 16    {
 017        cancellationToken.ThrowIfCancellationRequested();
 018        EnsureType(binding);
 019        var configured = !string.IsNullOrWhiteSpace(configuration[binding.Reference]);
 020        return ValueTask.FromResult(new SecretBindingState(configured, configured));
 21    }
 22
 23    public ValueTask<ResolvedSecretBinding> ResolveAsync(SecretBinding binding, CancellationToken cancellationToken = de
 24    {
 025        cancellationToken.ThrowIfCancellationRequested();
 026        EnsureType(binding);
 027        var value = configuration[binding.Reference];
 028        if (string.IsNullOrWhiteSpace(value))
 029            throw new InvalidOperationException("The configured secret binding could not be resolved.");
 030        return ValueTask.FromResult(new ResolvedSecretBinding(new SensitiveString(value), hasher.Hash($"{ResolverType}:{
 31    }
 32
 33    private static void EnsureType(SecretBinding binding)
 34    {
 035        if (!string.Equals(binding.ResolverType, ResolverType, StringComparison.Ordinal) || string.IsNullOrWhiteSpace(bi
 036            throw new InvalidOperationException("The configured secret binding is invalid.");
 037    }
 38}