Files
tnsu-approval-route/backend/Tnsu.ApprovalRoute.Infrastructure/TnsuPortal/TnsuPortalCallerToken.cs
T
gorbenko.pavel a1e6c5c8b4
Tests / frontend-test (pull_request) Successful in 47s
Tests / backend-test (pull_request) Successful in 2m36s
подписка
2026-08-19 13:31:38 +05:00

38 lines
1.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Microsoft.AspNetCore.Http;
namespace Tnsu.ApprovalRoute.Infrastructure.TnsuPortal;
/// <summary>
/// Authorization, с которым идти в api.tnsu.kz в пределах текущей области DI.
///
/// Два источника, и второй нужен именно фоновым задачам:
/// • обрабатывается HTTP-запрос — заголовок берётся прямо из него;
/// • выполняется задача Hangfire — своего HttpContext'а у неё нет, поэтому
/// токен инициировавшего пользователя ей передают аргументом и кладут сюда
/// через <see cref="Set"/> (см. CreateNextListPartitionJob).
///
/// Scoped: Hangfire создаёт отдельную область DI на каждое выполнение задачи,
/// поэтому положенный здесь токен не протекает между задачами.
/// </summary>
public sealed class TnsuPortalCallerToken(IHttpContextAccessor httpContextAccessor)
{
private string? _explicit;
/// <summary>
/// Заголовок целиком, вида «Bearer …». null — вызывающего токена нет
/// (тогда авторизация уходит на client_credentials, см. TnsuPortalAuthorizer).
/// </summary>
public string? Current
{
get
{
var incoming = httpContextAccessor.HttpContext?.Request.Headers.Authorization.ToString();
return string.IsNullOrWhiteSpace(incoming) ? _explicit : incoming;
}
}
/// <summary>Положить токен явно — для кода без HttpContext (фоновые задачи).</summary>
public void Set(string? authorization) =>
_explicit = string.IsNullOrWhiteSpace(authorization) ? null : authorization;
}