< Summary

Information
Class: ArturRios.Util.WebApi.Security.Authentication.GoogleTokenValidator
Assembly: ArturRios.Util.WebApi
File(s): D:\Repositories\dotnet-webapi-util\src\Security\Authentication\GoogleTokenValidator.cs
Line coverage
87%
Covered lines: 14
Uncovered lines: 2
Coverable lines: 16
Total lines: 39
Line coverage: 87.5%
Branch coverage
87%
Covered branches: 7
Total branches: 8
Branch coverage: 87.5%
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()87.5%8886.66%

File(s)

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

#LineLine coverage
 1using ArturRios.Util.WebApi.Security.Configuration;
 2using ArturRios.Util.WebApi.Security.Interfaces;
 3using ArturRios.Util.WebApi.Security.Records;
 4using Microsoft.AspNetCore.Http;
 5using Microsoft.Extensions.DependencyInjection;
 6
 7namespace ArturRios.Util.WebApi.Security.Authentication;
 8
 9/// <summary>Validates a Google ID token via <see cref="IGoogleTokenVerifier"/> and resolves the app user by the token's
 10/// <param name="verifier">Verifies the Google ID token against the configured client IDs.</param>
 11/// <param name="options">Supplies the accepted Google client IDs (audiences).</param>
 612public class GoogleTokenValidator(IGoogleTokenVerifier verifier, AuthenticationOptions options) : ITokenValidator
 13{
 14    /// <inheritdoc />
 15    public async Task<TokenValidationResult> ValidateAsync(string token, HttpContext context)
 516    {
 517        var payload = await verifier.VerifyAsync(token, options.GoogleClientIds);
 18
 519        if (payload is null)
 120        {
 121            return new TokenValidationResult(null, "Invalid Google token");
 22        }
 23
 424        if (string.IsNullOrWhiteSpace(payload.Email))
 025        {
 026            return new TokenValidationResult(null, "Google token has no email");
 27        }
 28
 429        if (!payload.EmailVerified)
 130        {
 131            return new TokenValidationResult(null, "Google email not verified");
 32        }
 33
 334        var provider = context.RequestServices.GetRequiredService<IAuthenticationProvider>();
 335        var user = provider.GetAuthenticatedUserByEmail(payload.Email);
 36
 337        return new TokenValidationResult(user, user is null ? "User not found" : null);
 538    }
 39}