< Summary

Information
Class: Elsa.ExternalAuthentication.Endpoints.Connections.ConnectionEndpointSupport
Assembly: Elsa.ExternalAuthentication
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.ExternalAuthentication/Endpoints/Connections/ConnectionEndpointSupport.cs
Line coverage
85%
Covered lines: 18
Uncovered lines: 3
Coverable lines: 21
Total lines: 45
Line coverage: 85.7%
Branch coverage
65%
Covered branches: 17
Total branches: 26
Branch coverage: 65.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
TryGetExpectedRevision(...)50%1010100%
SetEtag(...)100%11100%
SendMutationResultAsync(...)70%141066.66%
SendErrorAsync(...)100%11100%
SendErrorAsync(...)100%11100%
HasPermission(...)100%22100%
RequiresPolicyManagement(...)75%44100%
IsDatabaseOwned(...)100%11100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.ExternalAuthentication/Endpoints/Connections/ConnectionEndpointSupport.cs

#LineLine coverage
 1using System.Security.Claims;
 2using Elsa.Abstractions;
 3using Elsa.ExternalAuthentication.Contracts;
 4using Elsa.ExternalAuthentication.Models;
 5using Elsa.ExternalAuthentication.Permissions;
 6using Elsa.ExternalAuthentication.Services;
 7using Microsoft.AspNetCore.Http;
 8
 9namespace Elsa.ExternalAuthentication.Endpoints.Connections;
 10
 11internal static class ConnectionEndpointSupport
 12{
 13    public static bool TryGetExpectedRevision(HttpContext context, out long revision)
 14    {
 2515        revision = default;
 2516        var value = context.Request.Headers.IfMatch.FirstOrDefault();
 2517        return !string.IsNullOrWhiteSpace(value) && value.Length >= 2 && value[0] == '"' && value[^1] == '"' && long.Try
 18    }
 19
 3120    public static void SetEtag(HttpContext context, long revision) => context.Response.Headers.ETag = $"\"{revision}\"";
 21
 1422    public static Task SendMutationResultAsync(HttpContext context, ManagementConnectionMutationResult result, IdentityP
 1423    {
 024        ManagementConnectionMutationResult.NotFound => SendErrorAsync(context, StatusCodes.Status404NotFound, "not_found
 025        ManagementConnectionMutationResult.Forbidden => SendErrorAsync(context, StatusCodes.Status403Forbidden, "forbidd
 426        ManagementConnectionMutationResult.Conflict conflict => SendErrorAsync(context, StatusCodes.Status409Conflict, "
 227        ManagementConnectionMutationResult.PreconditionFailed conflict => SendErrorAsync(context, StatusCodes.Status412P
 828        ManagementConnectionMutationResult.ValidationFailed validation => SendErrorAsync(context, StatusCodes.Status400B
 029        _ => throw new InvalidOperationException("A successful connection mutation must be handled by the endpoint.")
 1430    };
 31
 32    public static Task SendErrorAsync(HttpContext context, int statusCode, string error, string message, object? details
 33    {
 2334        context.Response.StatusCode = statusCode;
 2335        return context.Response.WriteAsJsonAsync(
 2336            new ManagementErrorResponse(error, message, details, BrokerErrorFactory.CreateCorrelationId()),
 2337            cancellationToken);
 38    }
 39
 940    public static Task SendErrorAsync(HttpContext context, int statusCode, string error, string message, CancellationTok
 41
 1642    public static bool HasPermission(ClaimsPrincipal user, string permission) => user.FindAll(PermissionNames.ClaimType)
 2743    public static bool RequiresPolicyManagement(ConnectionRequest request) => request.UnlinkedPolicy is not null || requ
 2544    public static bool IsDatabaseOwned(EffectiveIdentityProviderConnection connection) => connection.Ownership == Connec
 45}