feat: add password protection for channels

- Updated IChatService to include password parameter in JoinChannelAsync method.
- Modified ChannelDto and related models to support password functionality.
- Implemented password handling in ChannelService for channel creation and membership validation.
- Enhanced IrcCommandHandler to manage channel join requests with passwords.
- Added ChannelPasswordDialog for user input when joining protected channels.
- Created database migration to add PasswordHash column to Channels table.
- Updated tests to cover new password functionality in channel joining and management.
This commit is contained in:
HueByte
2026-07-16 03:13:03 +02:00
parent 15187c4665
commit 3ca9dbfd91
31 changed files with 1056 additions and 96 deletions
@@ -169,11 +169,21 @@ internal sealed class ConnectionManager : IAsyncDisposable
// ── Channel Operations ────────────────────────────────────────────────
public async Task<List<MessageDto>> JoinChannelAsync(string channelName)
public async Task<List<MessageDto>> JoinChannelAsync(string channelName, string? password = null)
{
if (_connection is null) throw new InvalidOperationException("Not connected");
_joinedChannels.Add(channelName);
return await _connection.JoinChannelAsync(channelName);
try
{
var history = await _connection.JoinChannelAsync(channelName, password);
_joinedChannels.Add(channelName);
return history;
}
catch (ChannelPasswordRequiredException)
{
// Not actually joined — don't track, or reconnects would retry a doomed join
_joinedChannels.Remove(channelName);
throw;
}
}
public async Task LeaveChannelAsync(string channelName)