Add user identity system with channel pairing and web /link command
Introduce Luna.Identity project with user identity service, pairing code generation, and channel linking. Channels (Telegram, CLI) now verify link status before routing messages and prompt users to pair via the web interface. WebChannel handles /link <channel-type> <code> commands to complete the pairing flow. Fix inverted expiration check in IsPairingCodeExpired that caused codes to be treated as expired immediately after creation.
This commit is contained in:
@@ -2,12 +2,17 @@ using Luna.Channels.Abstractions;
|
||||
using Luna.Channels.Cli;
|
||||
using Luna.Channels.Web;
|
||||
using Luna.Core.Abstractions;
|
||||
using Luna.Identity.Abstractions;
|
||||
using Luna.Shared;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
|
||||
namespace Luna.Core.Hubs;
|
||||
|
||||
public class ChatHub(IChannelManager channelManager, IChatHubContext hubContext) : Hub
|
||||
public class ChatHub(
|
||||
IChannelManager channelManager,
|
||||
IChatHubContext hubContext,
|
||||
IUserIdentityService identityService)
|
||||
: Hub
|
||||
{
|
||||
public override Task OnConnectedAsync()
|
||||
{
|
||||
@@ -15,8 +20,8 @@ public class ChatHub(IChannelManager channelManager, IChatHubContext hubContext)
|
||||
|
||||
IChannel channel = clientType switch
|
||||
{
|
||||
"web" => new WebChannel(Context.ConnectionId, hubContext),
|
||||
_ => new CliChannel(Context.ConnectionId, hubContext)
|
||||
"web" => new WebChannel(Context.ConnectionId, hubContext, identityService),
|
||||
_ => new CliChannel(Context.ConnectionId, hubContext, identityService)
|
||||
};
|
||||
|
||||
channelManager.RegisterChannel(channel);
|
||||
@@ -29,7 +34,7 @@ public class ChatHub(IChannelManager channelManager, IChatHubContext hubContext)
|
||||
return base.OnDisconnectedAsync(exception);
|
||||
}
|
||||
|
||||
public void OnMessageReceived(ChannelMessage message)
|
||||
public async Task OnMessageReceivedAsync(ChannelMessage message)
|
||||
{
|
||||
var channel = channelManager.GetChannel(Context.ConnectionId);
|
||||
|
||||
@@ -39,7 +44,7 @@ public class ChatHub(IChannelManager channelManager, IChatHubContext hubContext)
|
||||
cli.RaiseMessageReceived(this, message);
|
||||
break;
|
||||
case WebChannel web:
|
||||
web.RaiseMessageReceived(this, message);
|
||||
await web.RaiseMessageReceivedAsync(this, message);
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException(
|
||||
|
||||
Reference in New Issue
Block a user