< Summary

Information
Class: Elsa.AI.Host.Endpoints.AI.AIHttpContextIdentity
Assembly: Elsa.AI.Host
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.AI.Host/Endpoints/AI/AIHttpContextIdentity.cs
Line coverage
85%
Covered lines: 24
Uncovered lines: 4
Coverable lines: 28
Total lines: 61
Line coverage: 85.7%
Branch coverage
90%
Covered branches: 40
Total branches: 44
Branch coverage: 90.9%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
GetActorId(...)92.85%1414100%
GetTenantId(...)100%1616100%
GetPermissions(...)100%44100%
GetAuthorizedAgent(...)100%66100%
HasRequiredPermissions(...)25%9433.33%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.AI.Host/Endpoints/AI/AIHttpContextIdentity.cs

#LineLine coverage
 1using System.Security.Claims;
 2using Elsa.AI.Host.Options;
 3using Elsa.Common.Multitenancy;
 4using Microsoft.AspNetCore.Http;
 5using Microsoft.Extensions.DependencyInjection;
 6
 7namespace Elsa.AI.Host.Endpoints.AI;
 8
 9internal static class AIHttpContextIdentity
 10{
 11    private const string TenantIdClaimType = "http://schemas.microsoft.com/identity/claims/tenantid";
 12
 13    public static string GetActorId(HttpContext? context) =>
 1014        context?.User.FindFirstValue(ClaimTypes.NameIdentifier) ??
 1015        context?.User.FindFirstValue("sub") ??
 1016        context?.User.Identity?.Name ??
 1017        "anonymous";
 18
 19    public static string? GetTenantId(HttpContext? context)
 20    {
 1021        var tenantAccessor = context?.RequestServices?.GetService<ITenantAccessor>();
 1022        if (tenantAccessor != null)
 123            return tenantAccessor.TenantId;
 24
 925        return context?.User.FindFirstValue(TenantIdClaimType) ??
 926               context?.User.FindFirstValue("tenant_id") ??
 927               context?.User.FindFirstValue("tenantId");
 28    }
 29
 30    public static ICollection<string> GetPermissions(HttpContext? context) =>
 1031        context?.User
 1032            .FindAll(PermissionNames.ClaimType)
 133            .Select(x => x.Value)
 134            .Where(x => !string.IsNullOrWhiteSpace(x))
 1035            .Distinct(StringComparer.OrdinalIgnoreCase)
 1036            .ToList() ?? [];
 37
 38    public static string? GetAuthorizedAgent(string? requestedAgent, AIHostOptions options, ICollection<string> userPerm
 39    {
 1040        if (string.IsNullOrWhiteSpace(requestedAgent))
 741            return null;
 42
 643        var agent = options.Agents.FirstOrDefault(x => string.Equals(x.Name, requestedAgent, StringComparison.OrdinalIgn
 344        if (agent == null || !HasRequiredPermissions(agent.Permissions, userPermissions))
 145            return null;
 46
 247        return agent.Name;
 48    }
 49
 50    private static bool HasRequiredPermissions(ICollection<string> requiredPermissions, ICollection<string> userPermissi
 51    {
 252        if (requiredPermissions.Count == 0)
 253            return true;
 54
 055        var grantedPermissions = userPermissions
 056            .Where(x => !string.IsNullOrWhiteSpace(x))
 057            .ToHashSet(StringComparer.OrdinalIgnoreCase);
 58
 059        return grantedPermissions.Contains(PermissionNames.All) || requiredPermissions.All(grantedPermissions.Contains);
 60    }
 61}