mirror of
https://github.com/Govor-team/Govor.git
synced 2026-07-21 19:54:55 +00:00
be0edb0f94
Introduces IHubUserAccessor and its implementation to centralize user ID retrieval from SignalR HubCallerContext, replacing duplicated logic in ChatsHub, FriendsHub, and PresenceHub. Moves extension and mapping files to a Common directory, adds UserToUserDtoMappingAction for online status mapping, and implements OnlineUserStore with tests for tracking online users. Updates dependency injection and test code to use the new abstractions.
30 lines
889 B
C#
30 lines
889 B
C#
using Microsoft.AspNetCore.SignalR;
|
|
|
|
namespace Govor.API.Common.SignalR.Helpers;
|
|
|
|
public class HubUserAccessor : IHubUserAccessor
|
|
{
|
|
private readonly ILogger<HubUserAccessor> _logger;
|
|
|
|
public HubUserAccessor(ILogger<HubUserAccessor> logger)
|
|
{
|
|
_logger = logger;
|
|
}
|
|
|
|
public Guid GetUserId(HubCallerContext context, bool suppressException = false)
|
|
{
|
|
var userIdClaim = context.User?.FindFirst("userId")?.Value;
|
|
if (string.IsNullOrEmpty(userIdClaim) || !Guid.TryParse(userIdClaim, out var userId))
|
|
{
|
|
if (!suppressException)
|
|
{
|
|
_logger.LogError("Could not retrieve sender userId. Claim was: {UserIDClaim}", userIdClaim);
|
|
throw new UnauthorizedAccessException("userID claim is missing or invalid.");
|
|
}
|
|
|
|
return Guid.Empty;
|
|
}
|
|
|
|
return userId;
|
|
}
|
|
} |