mirror of
https://github.com/RedWizardsLab/EchoHub.git
synced 2026-09-04 16:46:08 +02:00
feat: Implement message encryption and decryption support
- Added IMessageEncryptionService and its implementation MessageEncryptionService for handling message encryption. - Updated ChannelsController and ChatService to encrypt messages before storing and sending. - Introduced encryption key retrieval endpoint in ServerController. - Modified EchoHubDbContext to accommodate increased message content and embed JSON lengths for encrypted data. - Created migrations to support encryption-related database changes. - Enhanced FirstRunSetup to ensure encryption key is generated if not present. - Updated appsettings.example.json to include encryption configuration. - Added comprehensive unit tests for encryption service and compatibility tests between client and server encryption.
This commit is contained in:
@@ -22,6 +22,7 @@ public static class FirstRunSetup
|
||||
return;
|
||||
|
||||
EnsureJwtSecret(settingsPath);
|
||||
EnsureEncryptionKey(settingsPath);
|
||||
}
|
||||
|
||||
private static void EnsureJwtSecret(string settingsPath)
|
||||
@@ -45,4 +46,27 @@ public static class FirstRunSetup
|
||||
File.WriteAllText(settingsPath, root.ToJsonString(writeOptions));
|
||||
Console.WriteLine("Generated new JWT secret in appsettings.json.");
|
||||
}
|
||||
|
||||
private static void EnsureEncryptionKey(string settingsPath)
|
||||
{
|
||||
var json = File.ReadAllText(settingsPath);
|
||||
var root = JsonNode.Parse(json, documentOptions: new JsonDocumentOptions { CommentHandling = JsonCommentHandling.Skip });
|
||||
if (root is null)
|
||||
return;
|
||||
|
||||
var currentKey = root["Encryption"]?["Key"]?.GetValue<string>();
|
||||
|
||||
if (!string.IsNullOrEmpty(currentKey))
|
||||
return;
|
||||
|
||||
// Generate a 256-bit (32-byte) AES key
|
||||
var key = Convert.ToBase64String(RandomNumberGenerator.GetBytes(32));
|
||||
|
||||
root["Encryption"] ??= new JsonObject();
|
||||
root["Encryption"]!["Key"] = key;
|
||||
|
||||
var writeOptions = new JsonSerializerOptions { WriteIndented = true };
|
||||
File.WriteAllText(settingsPath, root.ToJsonString(writeOptions));
|
||||
Console.WriteLine("Generated new encryption key in appsettings.json.");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user