36 lines
1.0 KiB
C#
36 lines
1.0 KiB
C#
using RpgRoller.Api;
|
|
|
|
namespace RpgRoller.Components;
|
|
|
|
public sealed class WorkspaceSessionTokenAccessor
|
|
{
|
|
public WorkspaceSessionTokenAccessor(IHttpContextAccessor httpContextAccessor)
|
|
{
|
|
var httpContext = httpContextAccessor.HttpContext;
|
|
if (httpContext is null)
|
|
return;
|
|
|
|
if (httpContext.Items.TryGetValue(SessionTokenItemKey, out var storedToken) &&
|
|
storedToken is string sessionToken &&
|
|
!string.IsNullOrWhiteSpace(sessionToken))
|
|
{
|
|
m_SessionToken = sessionToken;
|
|
return;
|
|
}
|
|
|
|
if (httpContext.TryReadSessionTokenFromCookie(out sessionToken))
|
|
m_SessionToken = sessionToken;
|
|
}
|
|
|
|
public string GetRequiredSessionToken()
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(m_SessionToken))
|
|
return m_SessionToken;
|
|
|
|
throw new ApiRequestException(401, "You must be logged in.");
|
|
}
|
|
|
|
private const string SessionTokenItemKey = "__rpgroller.session-token";
|
|
private readonly string? m_SessionToken;
|
|
}
|