using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; using MareSynchronosShared.Utils; using System.Globalization; namespace MareSynchronosShared.RequirementHandlers; public class ValidTokenRequirementHandler : AuthorizationHandler { protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ValidTokenRequirement requirement) { var expirationClaimValue = context.User.Claims.SingleOrDefault(r => string.Equals(r.Type, MareClaimTypes.Expires, StringComparison.Ordinal)); if (expirationClaimValue == null) { context.Fail(); } DateTime expirationDate = new(long.Parse(expirationClaimValue.Value, CultureInfo.InvariantCulture), DateTimeKind.Utc); if (expirationDate < DateTime.UtcNow) { context.Fail(); } context.Succeed(requirement); return Task.CompletedTask; } } public class ValidTokenHubRequirementHandler : AuthorizationHandler { protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ValidTokenRequirement requirement, HubInvocationContext resource) { var expirationClaimValue = context.User.Claims.SingleOrDefault(r => string.Equals(r.Type, MareClaimTypes.Expires, StringComparison.Ordinal)); if (expirationClaimValue == null) { context.Fail(); } DateTime expirationDate = new(long.Parse(expirationClaimValue.Value, CultureInfo.InvariantCulture), DateTimeKind.Utc); if (expirationDate < DateTime.UtcNow) { context.Fail(); } context.Succeed(requirement); return Task.CompletedTask; } }