< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.IdentityModel.Selectors.GenericSecurityTokenAuthenticator
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/IdentityModel/Selectors/GenericSecurityTokenAuthenticator.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 30
Coverable lines: 30
Total lines: 77
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor()100%110%
.ctor(...)100%110%
CanValidateTokenCore(...)100%110%
ValidateTokenCoreAsync()0%10100%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/IdentityModel/Selectors/GenericSecurityTokenAuthenticator.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System;
 5using System.Collections.Generic;
 6using System.Collections.ObjectModel;
 7using System.Threading.Tasks;
 8using CoreWCF.IdentityModel.Claims;
 9using CoreWCF.IdentityModel.Policy;
 10using CoreWCF.IdentityModel.Tokens;
 11using CoreWCF.Security;
 12
 13namespace CoreWCF.IdentityModel.Selectors
 14{
 15    internal class GenericSecurityTokenAuthenticator : SecurityTokenAuthenticator
 16    {
 17        private readonly LdapSettings _ldapSettings;
 018        public GenericSecurityTokenAuthenticator()
 19        {
 020        }
 21
 022        public GenericSecurityTokenAuthenticator(LdapSettings ldapSettings)
 23        {
 024            _ldapSettings = ldapSettings;
 025        }
 26
 27        protected override bool CanValidateTokenCore(SecurityToken token)
 28        {
 029            return token is GenericIdentitySecurityToken;
 30        }
 31
 32        protected override async ValueTask<ReadOnlyCollection<IAuthorizationPolicy>> ValidateTokenCoreAsync(SecurityToke
 33        {
 034            var genericToken = (GenericIdentitySecurityToken)token;
 035            string principalName = genericToken.Name;
 036            if (principalName == null)
 37            {
 038                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(principalName));
 39            }
 40
 41            Claim identityClaim;
 42            Claim primaryPrincipal;
 043            if (principalName.Contains("@") || principalName.Contains(@"\"))
 44            {
 045                identityClaim = new Claim(ClaimTypes.Upn, principalName, Rights.Identity);
 046                primaryPrincipal = Claim.CreateUpnClaim(principalName);
 47            }
 48            else
 49            {
 050                identityClaim = new Claim(ClaimTypes.Spn, principalName, Rights.Identity);
 051                primaryPrincipal = Claim.CreateSpnClaim(principalName);
 52            }
 53
 054            List<Claim> claims = new List<Claim>(2)
 055            {
 056                identityClaim,
 057                primaryPrincipal
 058            };
 59
 60
 061            if (_ldapSettings != null)
 62            {
 063                List<Claim> allCaims = await LdapAdapter.RetrieveClaimsAsync(_ldapSettings, genericToken.GenericIdentity
 64                // if this is made async, many other API changes has to happen. COnsidering this is one of the scenario,
 065                foreach (Claim claim in allCaims)
 66                {
 067                    claims.Add(claim);
 68                }
 69            }
 070            List<IAuthorizationPolicy> policies = new List<IAuthorizationPolicy>(1)
 071            {
 072                new UnconditionalPolicy(genericToken.GenericIdentity, new DefaultClaimSet(ClaimSet.Anonymous, claims))
 073            };
 074            return policies.AsReadOnly();
 075        }
 76    }
 77}