< Summary

Information
Class: Elsa.ExternalAuthentication.Endpoints.Broker.InitiateExternal
Assembly: Elsa.ExternalAuthentication
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.ExternalAuthentication/Endpoints/Broker/InitiateExternal.cs
Line coverage
81%
Covered lines: 18
Uncovered lines: 4
Coverable lines: 22
Total lines: 56
Line coverage: 81.8%
Branch coverage
50%
Covered branches: 14
Total branches: 28
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
Configure()100%11100%
HandleAsync()50%382876.47%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.ExternalAuthentication/Endpoints/Broker/InitiateExternal.cs

#LineLine coverage
 1using Elsa.Abstractions;
 2using Elsa.Common.Multitenancy;
 3using Elsa.ExternalAuthentication.Constants;
 4using Elsa.ExternalAuthentication.Models;
 5using Elsa.ExternalAuthentication.Services;
 6using Microsoft.AspNetCore.Builder;
 7
 8namespace Elsa.ExternalAuthentication.Endpoints.Broker;
 9
 1010internal sealed class InitiateExternal(IExternalAuthenticationBroker broker, ITenantAccessor tenantAccessor) : ElsaEndpo
 11{
 12    public override void Configure()
 13    {
 914        Get("/external-authentication/authorize/{connectionKey}");
 915        AllowAnonymous();
 1816        Options(x => x.RequireRateLimiting(ExternalAuthenticationRateLimitPolicyNames.ExternalInitiation));
 917    }
 18
 19    public override async Task HandleAsync(InitiateExternalRequest request, CancellationToken cancellationToken)
 20    {
 121        var clientId = Query<string>("client_id", false) ?? request.ClientId;
 122        var redirectUriValue = Query<string>("redirect_uri", false) ?? request.RedirectUri;
 123        var responseType = Query<string>("response_type", false) ?? request.ResponseType;
 124        var codeChallenge = Query<string>("code_challenge", false) ?? request.CodeChallenge;
 125        var codeChallengeMethod = Query<string>("code_challenge_method", false) ?? request.CodeChallengeMethod;
 126        var returnPath = Query<string>("return_path", false) ?? request.ReturnPath;
 127        if (!Uri.TryCreate(redirectUriValue, UriKind.Absolute, out var redirectUri))
 28        {
 029            await BrokerEndpointSupport.SendErrorAsync(Send, BrokerErrorFactory.Create(BrokerErrorCategory.InvalidReques
 030            return;
 31        }
 32
 133        var result = await broker.InitiateExternalAsync(new(
 134            clientId ?? string.Empty, redirectUri, responseType ?? string.Empty, codeChallenge ?? string.Empty,
 135            codeChallengeMethod ?? string.Empty, returnPath ?? string.Empty, request.ConnectionKey ?? string.Empty, requ
 136        if (result.Error is { } error)
 37        {
 038            await BrokerEndpointSupport.SendErrorAsync(Send, error, cancellationToken);
 039            return;
 40        }
 41
 142        await Send.RedirectAsync(result.NavigationUri!.ToString(), false, true);
 143    }
 44}
 45
 46internal sealed class InitiateExternalRequest
 47{
 48    public string? ConnectionKey { get; set; }
 49    public string? ClientId { get; set; }
 50    public string? RedirectUri { get; set; }
 51    public string? ResponseType { get; set; }
 52    public string? CodeChallenge { get; set; }
 53    public string? CodeChallengeMethod { get; set; }
 54    public string? ReturnPath { get; set; }
 55    public string? State { get; set; }
 56}