From fb3bdcb3e9dc2c745297d230c7ada58be6f5c2e4 Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Thu, 5 Mar 2026 19:34:07 +0100 Subject: [PATCH] feat(e2ee): add basic support for e2ee metadata format 2.1 add ability to use encrypted root folder with 2.1 metadata format this is lacking ability to create public encrypted share link Signed-off-by: Matthieu Gallien --- src/libsync/foldermetadata.cpp | 3 +++ src/libsync/foldermetadata.h | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/libsync/foldermetadata.cpp b/src/libsync/foldermetadata.cpp index 333640374d5ad..af0fc20196975 100644 --- a/src/libsync/foldermetadata.cpp +++ b/src/libsync/foldermetadata.cpp @@ -409,6 +409,8 @@ void FolderMetadata::setupVersionFromExistingMetadata(const QByteArray &metadata _existingMetadataVersion = MetadataVersion::Version1_2; } else if (versionStringFromMetadata == QStringLiteral("2.0") || versionStringFromMetadata == QStringLiteral("2")) { _existingMetadataVersion = MetadataVersion::Version2_0; + } else if (versionStringFromMetadata == QStringLiteral("2.1")) { + _existingMetadataVersion = MetadataVersion::Version2_1; } else if (versionStringFromMetadata == QStringLiteral("1.0") || versionStringFromMetadata == QStringLiteral("1.1")) { // We used to have an intermediate 1.1 after applying a security-vulnerability fix for metadata keys. @@ -838,6 +840,7 @@ quint64 FolderMetadata::newCounter() const EncryptionStatusEnums::ItemEncryptionStatus FolderMetadata::fromMedataVersionToItemEncryptionStatus(const MetadataVersion metadataVersion) { switch (metadataVersion) { + case FolderMetadata::MetadataVersion::Version2_1: case FolderMetadata::MetadataVersion::Version2_0: return SyncFileItem::EncryptionStatus::EncryptedMigratedV2_0; case FolderMetadata::MetadataVersion::Version1_2: diff --git a/src/libsync/foldermetadata.h b/src/libsync/foldermetadata.h index 4c7d64e5e2c2d..8484afa01270d 100644 --- a/src/libsync/foldermetadata.h +++ b/src/libsync/foldermetadata.h @@ -36,14 +36,6 @@ class OWNCLOUDSYNC_EXPORT FolderMetadata : public QObject QByteArray encryptedMetadataKey; }; - // based on api-version and "version" key in metadata JSON - enum MetadataVersion { - VersionUndefined = -1, - Version1, - Version1_2, - Version2_0, - }; - struct UserWithFileDropEntryAccess { QString userId; QByteArray decryptedFiledropKey; @@ -90,6 +82,16 @@ class OWNCLOUDSYNC_EXPORT FolderMetadata : public QObject }; Q_ENUM(CertificateType) + // based on api-version and "version" key in metadata JSON + enum class MetadataVersion { + VersionUndefined = -1, + Version1, + Version1_2, + Version2_0, + Version2_1, + }; + Q_ENUM(MetadataVersion) + FolderMetadata(AccountPtr account, const QString &remoteFolderRoot, FolderType folderType = FolderType::Nested); /* * construct metadata based on RootEncryptedFolderInfo