Архивация списков (#13)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/13
This commit was merged in pull request #13.
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user