feat: Implement end-to-end encryption for channels

- Added EncryptionSalt and WrappedRoomKey properties to Channel model.
- Introduced RoomCrypto class for client-side encryption and decryption.
- Updated ChannelService to handle encrypted channels, including creation and rekeying.
- Modified ChannelsController to expose crypto metadata and rekey functionality.
- Enhanced IrcCommandHandler to block joining encrypted channels over IRC.
- Updated database schema with migration for new encryption fields.
- Refactored file validation and image processing services to accommodate encrypted channels.
- Added unit tests for RoomCrypto functionality and updated existing tests for channel services.
This commit is contained in:
HueByte
2026-07-16 03:50:23 +02:00
parent ea8e583ee5
commit e05b420ce9
36 changed files with 1400 additions and 67 deletions
@@ -255,6 +255,22 @@ public sealed class ChatMessageManager
lines.Add(new ChatLine($" {trimmed}"));
}
}
// Clickable action to download the original image below the ASCII art
if (message.AttachmentUrl is not null)
{
var imageName = message.AttachmentFileName ?? "image";
var imageSize = FormatFileSize(message.AttachmentFileSize);
var saveLine = new ChatLine(new List<ChatSegment>
{
new(" ", null),
new($"[↓ save original] {imageName} [{imageSize}]", ChatColors.FileAttr),
});
saveLine.AttachmentUrl = message.AttachmentUrl;
saveLine.AttachmentFileName = imageName;
saveLine.Type = MessageType.Image;
lines.Add(saveLine);
}
break;
case MessageType.Audio: