feat: implement end-to-end encryption for chat messages and files, including key management and decryption functionality; enhance chat components to support encrypted content display
This commit is contained in:
@@ -23,12 +23,16 @@ export const chatTables = {
|
||||
conversaId: v.id('conversas'),
|
||||
remetenteId: v.id('usuarios'),
|
||||
tipo: v.union(v.literal('texto'), v.literal('arquivo'), v.literal('imagem')),
|
||||
conteudo: v.string(), // texto ou nome do arquivo
|
||||
conteudoBusca: v.optional(v.string()), // versão normalizada para busca
|
||||
conteudo: v.string(), // texto ou nome do arquivo (pode ser criptografado)
|
||||
conteudoBusca: v.optional(v.string()), // versão normalizada para busca (não criptografada se mensagem for E2E)
|
||||
arquivoId: v.optional(v.id('_storage')),
|
||||
arquivoNome: v.optional(v.string()),
|
||||
arquivoTamanho: v.optional(v.number()),
|
||||
arquivoTipo: v.optional(v.string()),
|
||||
// Campos para criptografia E2E
|
||||
criptografado: v.optional(v.boolean()), // Indica se a mensagem está criptografada
|
||||
iv: v.optional(v.string()), // Initialization Vector (base64) para descriptografia
|
||||
keyId: v.optional(v.string()), // Identificador da chave usada para criptografar
|
||||
linkPreview: v.optional(
|
||||
v.object({
|
||||
url: v.string(),
|
||||
@@ -169,5 +173,17 @@ export const chatTables = {
|
||||
atualizadoEm: v.number()
|
||||
})
|
||||
.index('by_usuario_conversa', ['usuarioId', 'conversaId'])
|
||||
.index('by_conversa', ['conversaId'])
|
||||
.index('by_conversa', ['conversaId']),
|
||||
|
||||
// Chaves de Criptografia E2E por Conversa
|
||||
chavesCriptografia: defineTable({
|
||||
conversaId: v.id('conversas'),
|
||||
chaveCompartilhada: v.string(), // Chave criptografada compartilhada (base64)
|
||||
keyId: v.string(), // Identificador único da chave
|
||||
criadoPor: v.id('usuarios'), // Usuário que criou/compartilhou a chave
|
||||
criadoEm: v.number(),
|
||||
ativo: v.boolean() // Se a chave está ativa (permite rotação de chaves)
|
||||
})
|
||||
.index('by_conversa', ['conversaId', 'ativo'])
|
||||
.index('by_key_id', ['keyId'])
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user