Sfoglia il codice sorgente

Fix unit tests SecureFileDrop

Signed-off-by: alex-z <blackslayer4@gmail.com>
alex-z 2 anni fa
parent
commit
31c3aee447

+ 3 - 1
src/libsync/clientsideencryption.cpp

@@ -1580,6 +1580,8 @@ void FolderMetadata::setupExistingMetadata(const QByteArray& metadata)
     const auto metadataKeyChecksum = metaDataDoc.object()["metadata"].toObject()["checksum"].toString().toUtf8();
 
     _fileDrop = metaDataDoc.object().value("filedrop").toObject();
+    // for unit tests
+    _fileDropFromServer = metaDataDoc.object().value("filedrop").toObject();
 
     // Iterate over the document to store the keys. I'm unsure that the keys are in order,
     // perhaps it's better to store a map instead of a vector, perhaps this just doesn't matter.
@@ -1929,7 +1931,7 @@ bool FolderMetadata::moveFromFileDropToFiles()
 
 QJsonObject FolderMetadata::fileDrop() const
 {
-    return _fileDrop;
+    return _fileDropFromServer;
 }
 
 bool EncryptionHelper::fileEncryption(const QByteArray &key, const QByteArray &iv, QFile *input, QFile *output, QByteArray& returnTag)

+ 2 - 0
src/libsync/clientsideencryption.h

@@ -243,6 +243,8 @@ private:
     RequiredMetadataVersion _requiredMetadataVersion = RequiredMetadataVersion::Version1_2;
     QVector<QPair<QString, QString>> _sharing;
     QJsonObject _fileDrop;
+    // used by unit tests, must get assigned simultaneously with _fileDrop and not erased
+    QJsonObject _fileDropFromServer;
     bool _isMetadataSetup = false;
     bool _encryptedMetadataNeedUpdate = false;
 };

+ 3 - 0
test/CMakeLists.txt

@@ -74,6 +74,9 @@ nextcloud_add_test(SecureFileDrop)
 target_link_libraries(SecureFileDropTest PRIVATE Nextcloud::sync)
 configure_file(fake2eelocksucceeded.json "${PROJECT_BINARY_DIR}/bin/fake2eelocksucceeded.json" COPYONLY)
 configure_file(fakefiledrope2eefoldermetadata.json "${PROJECT_BINARY_DIR}/bin/fakefiledrope2eefoldermetadata.json" COPYONLY)
+configure_file(e2etestsfakecert.pem "${PROJECT_BINARY_DIR}/bin/e2etestsfakecert.pem" COPYONLY)
+configure_file(e2etestsfakecertprivatekey.pem "${PROJECT_BINARY_DIR}/bin/e2etestsfakecertprivatekey.pem" COPYONLY)
+configure_file(e2etestsfakecertpublickey.pem "${PROJECT_BINARY_DIR}/bin/e2etestsfakecertpublickey.pem" COPYONLY)
 
 
 if(ADD_E2E_TESTS)

+ 22 - 0
test/e2etestsfakecert.pem

@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDnjCCAoagAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJERTEb
+MBkGA1UECAwSQmFkZW4tV3VlcnR0ZW1iZXJnMRIwEAYDVQQHDAlTdHV0dGdhcnQx
+EjAQBgNVBAoMCU5leHRjbG91ZDEUMBIGA1UEAwwLbmV3c3RhbmRhcmQwHhcNMjMw
+MzEwMjEzODAwWhcNNDMwMzA1MjEzODAwWjBoMQswCQYDVQQGEwJERTEbMBkGA1UE
+CAwSQmFkZW4tV3VlcnR0ZW1iZXJnMRIwEAYDVQQHDAlTdHV0dGdhcnQxEjAQBgNV
+BAoMCU5leHRjbG91ZDEUMBIGA1UEAwwLbmV3c3RhbmRhcmQwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQDFUbXE6XY/FbrkhHJP8x1QzhajMukiRXGFVzIy
+CHZZN9gcU8XEo+MTeKRW0PoAC4CtdjGYDCYCUshU5SYIvsN9ywgZqMgfzNVY947T
+S6k79rGgzVHPYn6oZoQXneeUryQrHxUkHrCJmrX+EVq8FGN/saOS5QO9VBPFyCCC
+JPTeq586RoGVnrt7NPnjFsjyyelkLQNwUPzBKqhIqqUFhHJ+iAXNbZ2XtwKSEEZs
+1Fh1W2KvRj9LOr7JWxbb7+XvOYUniMnmmv9Bo4PvekqhV1DSS7A4YKg1HGyNE7RR
+6u6+DVjXQiNwNVFuGJuj/oOBWX6HVgYiIZ4n2PFjvHPHbRQhAgMBAAGjUzBRMB0G
+A1UdDgQWBBSQsMu9lbr5aklphhaY4x5bqCP8PjAfBgNVHSMEGDAWgBSQsMu9lbr5
+aklphhaY4x5bqCP8PjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IB
+AQA5tktr5eVAZ6rNbmGMlJWvoFAdZqxeUiS9+pqPIz2uwa4cqlVfGpavbifqYG6j
+0+m6mMPd946FUCf0kHgZrmAdUOBFfsdSr7Sf/iwuKaI4s1mWiTZuXq8txr7memOd
+vUx1+WcEXvtrAZb0wyAoWlSm3ZliL3a6e0gWxslAV7NKZB8KCiF7lgoef9cSPNl+
+NNE8+o1p6z39JfnBy2sEYbQR5Q75cXvYDgTfwTVAzaoU2ZThgvRmEYQ4C1ruDJ1N
+YGMx13SHn8hOV0O1s0xj/DHCkF+0yG9ugztNQeZc1CYV49JWYuLOLY4qsg/RPpH1
+ZrGxt2IZxiSWZH845v9YZzxB
+-----END CERTIFICATE-----

+ 28 - 0
test/e2etestsfakecertprivatekey.pem

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDFUbXE6XY/Fbrk
+hHJP8x1QzhajMukiRXGFVzIyCHZZN9gcU8XEo+MTeKRW0PoAC4CtdjGYDCYCUshU
+5SYIvsN9ywgZqMgfzNVY947TS6k79rGgzVHPYn6oZoQXneeUryQrHxUkHrCJmrX+
+EVq8FGN/saOS5QO9VBPFyCCCJPTeq586RoGVnrt7NPnjFsjyyelkLQNwUPzBKqhI
+qqUFhHJ+iAXNbZ2XtwKSEEZs1Fh1W2KvRj9LOr7JWxbb7+XvOYUniMnmmv9Bo4Pv
+ekqhV1DSS7A4YKg1HGyNE7RR6u6+DVjXQiNwNVFuGJuj/oOBWX6HVgYiIZ4n2PFj
+vHPHbRQhAgMBAAECggEAY6tydZS39gWz8do1I81Z8YcoSCdfO8B4JzJ0WHGN1mMu
+9qAaNcnS2fMGkBPfNEabKQOa6YK5cFMAfmGBZMl3VgNIhC2NaQK+gcIKkxCU24Ux
+FFiiCm9mKwodjxBj+ea+DkoVE7ms0tUjOMLrYjWqTMYeKgUkbm4Zzr3YLeUdC5wh
+1fwtEExwCcx5CrtCuXPS33nnwowXNV5YLZgh7q6vSh57//yozt03B7qRMis52l8l
+HuafOIaLlZZuijM7vVCJUvctbQcNYY/C4kzymCeuJSgTRXUB+xbJHszWhNQnioVv
+xqOU4u4yVteR6I5J1oWN0Z5e5ukMZSH8UVsNfDNZQQKBgQDt27cr8K8plui3g+pN
+SpEMZMw56rH/pnvGvzpxBMrslCP/Alvu9eSEqzuekuhdu6wTaNxjltlO1jzGtZUL
+hUBCyBvkR7DCpRnLyEBjvy9oQWQUYxzprHdh2U1NFFnQhkeKM1AqK9ZZodNlZmBw
+ZuYAu0rY/KIYrB5DStJKJt2cnwKBgQDUXnOYXNnKY4VHBJG3Av2ALHDwpgJE+xa1
+5CGDgmPqsEEWRX7+GiqK+p2Gt22uN1OBRxCpmZwtiTBYjwSRCX34ub7N1PNvpVhQ
+8gXlm01Zrk3+N/ArC5u6uoi+dUmBdei+VpZSzFPqRbKleWDPIz2ifWFKDwqR3tm5
+s8Ttr2bXPwKBgEvywhQXr/Z5pykhx+iSDKqGbOd5VwioYhFd8g0wWJMd4jiEylIM
+1cC+5DSH+AYl7JXt/6EVA6I2qgVQ6ZxaGeC5AJ7tfTVJfmkhMd4np72EU65mz06V
+sTDfL92Sx/LbTXCFXe15PeI018ki3VxGnt5Q719Fm4SBQNB/zZG7wztFAoGBAJRd
+8HBv3hBRexlkjdDIHAbiBX163XcH3JPy758LB3c88Bv5LYGlEjfKYydtGwltyb81
+wORcVwpRIB+eu1gAw6tzSWRP9Er5vzu9+nSxDVcsOXzz46yPDZtlGofFNTdnAtWH
+dLof2jh/vRFyPTo5qqPM6J1u6LmEcaQVfe14b2bNAoGAIf6XKCLnEkfZC//7pFS3
+M5b6DCrEg03MivpXU2PNMGO4rVdfyzjRjL2aFt7GEN7wAiqLGPDB9cJIAQ6KyJYR
+qSZ+DNIkK1671HtcR2ixa0dGmtf1CZJYbT9Z/gOSmrOtuSE/46TbIhd3rwJgs/Vf
+ImL20AomzY9Dw4OWqOjXCR8=
+-----END PRIVATE KEY-----

+ 9 - 0
test/e2etestsfakecertpublickey.pem

@@ -0,0 +1,9 @@
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxVG1xOl2PxW65IRyT/Md
+UM4WozLpIkVxhVcyMgh2WTfYHFPFxKPjE3ikVtD6AAuArXYxmAwmAlLIVOUmCL7D
+fcsIGajIH8zVWPeO00upO/axoM1Rz2J+qGaEF53nlK8kKx8VJB6wiZq1/hFavBRj
+f7GjkuUDvVQTxcgggiT03qufOkaBlZ67ezT54xbI8snpZC0DcFD8wSqoSKqlBYRy
+fogFzW2dl7cCkhBGbNRYdVtir0Y/Szq+yVsW2+/l7zmFJ4jJ5pr/QaOD73pKoVdQ
+0kuwOGCoNRxsjRO0Ueruvg1Y10IjcDVRbhibo/6DgVl+h1YGIiGeJ9jxY7xzx20U
+IQIDAQAB
+-----END PUBLIC KEY-----

File diff suppressed because it is too large
+ 0 - 0
test/fakefiledrope2eefoldermetadata.json


+ 23 - 0
test/testsecurefiledrop.cpp

@@ -43,6 +43,29 @@ private slots:
     {
         _fakeFolder.remoteModifier().mkdir(fakeE2eeFolderName);
         _fakeFolder.remoteModifier().insert(fakeE2eeFolderName + QStringLiteral("/") + QStringLiteral("fake_e2ee_file"), 100);
+
+        {
+            QFile e2eTestFakeCert(QStringLiteral("e2etestsfakecert.pem"));
+            if (e2eTestFakeCert.open(QFile::ReadOnly)) {
+                _fakeFolder.syncEngine().account()->e2e()->_certificate = QSslCertificate(e2eTestFakeCert.readAll());
+                e2eTestFakeCert.close();
+            }
+        }
+        {
+            QFile e2etestsfakecertpublickey(QStringLiteral("e2etestsfakecertpublickey.pem"));
+            if (e2etestsfakecertpublickey.open(QFile::ReadOnly)) {
+                _fakeFolder.syncEngine().account()->e2e()->_publicKey = QSslKey(e2etestsfakecertpublickey.readAll(), QSsl::KeyAlgorithm::Rsa, QSsl::EncodingFormat::Pem, QSsl::KeyType::PublicKey);
+                e2etestsfakecertpublickey.close();
+            }
+        }
+        {
+            QFile e2etestsfakecertprivatekey(QStringLiteral("e2etestsfakecertprivatekey.pem"));
+            if (e2etestsfakecertprivatekey.open(QFile::ReadOnly)) {
+                _fakeFolder.syncEngine().account()->e2e()->_privateKey = e2etestsfakecertprivatekey.readAll();
+                e2etestsfakecertprivatekey.close();
+            }
+        }
+
         _fakeFolder.setServerOverride([this](QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *device) {
             Q_UNUSED(device);
             QNetworkReply *reply = nullptr;

Some files were not shown because too many files changed in this diff