23 lines
823 B
C#
23 lines
823 B
C#
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.SignalR;
|
|
|
|
namespace Distribution.Features.Notifications;
|
|
|
|
/// <summary>
|
|
/// Server → client only. The server pushes a "notification" event to each recipient; clients never
|
|
/// invoke hub methods. Users are addressed by their id (see <see cref="NotificationUserIdProvider"/>).
|
|
/// </summary>
|
|
[Authorize]
|
|
public class NotificationHub : Hub
|
|
{
|
|
public const string Path = "/hubs/notifications";
|
|
public const string ClientEvent = "notification";
|
|
}
|
|
|
|
/// <summary>Maps a SignalR connection to the "UserId" claim that <c>AuthMiddleware</c> puts on the principal.</summary>
|
|
public class NotificationUserIdProvider : IUserIdProvider
|
|
{
|
|
public string? GetUserId(HubConnectionContext connection) =>
|
|
connection.User?.FindFirst("UserId")?.Value;
|
|
}
|