< Summary

Information
Class: LGDXRobotCloud.API.Authentication.ApiKeyAuthenticationSchemeHandler
Assembly: LGDXRobotCloud.API
File(s): /builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.API/Authentication/ApiKeyAuthenticationSchemeHandler.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 15
Coverable lines: 15
Total lines: 35
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 8
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)0%2040%
HandleAuthenticateAsync()0%2040%

File(s)

/builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.API/Authentication/ApiKeyAuthenticationSchemeHandler.cs

#LineLine coverage
 1using System.Security.Claims;
 2using System.Text.Encodings.Web;
 3using LGDXRobotCloud.API.Services.Administration;
 4using Microsoft.AspNetCore.Authentication;
 5using Microsoft.Extensions.Options;
 6
 7namespace LGDXRobotCloud.API.Authentication;
 8
 9public class ApiKeyAuthenticationSchemeHandler(
 10    IApiKeyService apiKeyService,
 11    ILoggerFactory logger,
 12    IOptionsMonitor<ApiKeyAuthenticationSchemeOptions> options,
 13    IWebHostEnvironment webHostEnvironment,
 14    UrlEncoder encoder
 015  ) : AuthenticationHandler<ApiKeyAuthenticationSchemeOptions>(options, logger, encoder)
 16{
 017  private readonly IApiKeyService _apiKeyService = apiKeyService ?? throw new ArgumentNullException(nameof(apiKeyService
 018  private readonly IWebHostEnvironment _webHostEnvironment = webHostEnvironment ?? throw new ArgumentNullException(nameo
 19
 20  protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
 021  {
 022    string? apiKey = Context.Request.Headers["X-API-KEY"];
 023    var apiKeyId = await _apiKeyService.ValidateApiKeyAsync(apiKey);
 024    if (!_webHostEnvironment.IsDevelopment() && apiKeyId == null)
 025    {
 026      return AuthenticateResult.Fail("X-API-KEY is invalid");
 27    }
 28
 029    Context.Items["ApiKeyId"] = apiKeyId;
 030    var identity = new ClaimsIdentity([], Scheme.Name);
 031    var principal = new ClaimsPrincipal(identity);
 032    var ticket = new AuthenticationTicket(principal, Scheme.Name);
 033    return AuthenticateResult.Success(ticket);
 034  }
 35}