< Summary

Information
Class: ArturRios.Util.WebApi.Security.Authentication.JwtTokenValidator
Assembly: ArturRios.Util.WebApi
File(s): D:\Repositories\dotnet-webapi-util\src\Security\Authentication\JwtTokenValidator.cs
Line coverage
88%
Covered lines: 16
Uncovered lines: 2
Coverable lines: 18
Total lines: 47
Line coverage: 88.8%
Branch coverage
80%
Covered branches: 8
Total branches: 10
Branch coverage: 80%
Method coverage
100%
Covered methods: 2
Fully covered methods: 1
Total methods: 2
Method coverage: 100%
Full method coverage: 50%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ValidateAsync()80%101088.23%

File(s)

D:\Repositories\dotnet-webapi-util\src\Security\Authentication\JwtTokenValidator.cs

#LineLine coverage
 1using ArturRios.Jwt;
 2using ArturRios.Util.WebApi.Security.Configuration;
 3using ArturRios.Util.WebApi.Security.Enums;
 4using ArturRios.Util.WebApi.Security.Factories;
 5using ArturRios.Util.WebApi.Security.Interfaces;
 6using ArturRios.Util.WebApi.Security.Records;
 7using Microsoft.AspNetCore.Http;
 8using Microsoft.Extensions.DependencyInjection;
 9
 10namespace ArturRios.Util.WebApi.Security.Authentication;
 11
 12/// <summary>Validates the app's own HMAC-signed JWT and resolves the user by claims or by an <see cref="IAuthentication
 13/// <param name="jwtConfig">Provides the signing secret used to validate the token.</param>
 14/// <param name="jwtHandler">Validates signatures and reads the user id claim.</param>
 15/// <param name="options">Controls how the user is resolved once the signature is valid.</param>
 1016public class JwtTokenValidator(JwtConfiguration jwtConfig, JwtHandler jwtHandler, AuthenticationOptions options) : IToke
 17{
 18    /// <inheritdoc />
 19    public async Task<TokenValidationResult> ValidateAsync(string token, HttpContext context)
 920    {
 921        var isValid = await jwtHandler.IsTokenValidAsync(token, jwtConfig.Secret);
 22
 923        if (!isValid)
 324        {
 325            return new TokenValidationResult(null, "Invalid token");
 26        }
 27
 628        if (options.JwtMode == JwtValidationMode.ClaimsOnly)
 429        {
 430            var claimsUser = AuthenticatedUserFactory.FromToken(token);
 31
 432            return new TokenValidationResult(claimsUser, claimsUser is null ? "Could not retrieve user from token" : nul
 33        }
 34
 235        var userId = jwtHandler.GetUserIdFromToken(token);
 36
 237        if (!userId.HasValue)
 038        {
 039            return new TokenValidationResult(null, "Could not retrieve user id from token");
 40        }
 41
 242        var provider = context.RequestServices.GetRequiredService<IAuthenticationProvider>();
 243        var user = provider.GetAuthenticatedUserById(userId.Value);
 44
 245        return new TokenValidationResult(user, user is null ? "User not found" : null);
 946    }
 47}