From 60ef722b6057cb4d17c51d790bae4d5e730bce8a Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Fri, 22 Dec 2017 23:05:39 +0100 Subject: [PATCH] [CSE] Update the metadata when a file is being uploaded. --- src/libsync/propagateuploadencrypted.cpp | 35 ++++++++++++++++++++---- src/libsync/propagateuploadencrypted.h | 4 +++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/libsync/propagateuploadencrypted.cpp b/src/libsync/propagateuploadencrypted.cpp index 10262a7919..a498b636b9 100644 --- a/src/libsync/propagateuploadencrypted.cpp +++ b/src/libsync/propagateuploadencrypted.cpp @@ -141,12 +141,27 @@ void PropagateUploadEncrypted::slotFolderEncriptedMetadataReceived(const QJsonDo encryptedFile.metadataKey = 1; encryptedFile.originalFilename = info.fileName(); _metadata->addEncryptedFile(encryptedFile); + _encryptedFile = encryptedFile; - qDebug() << "Encrypting the file"; + qDebug() << "Metadata created, sending to the server."; + auto job = new UpdateMetadataApiJob(_propagator->account(), + _folderId, + _metadata->encryptedMetadata(), + _folderToken); + + connect(job, &UpdateMetadataApiJob::success, this, &PropagateUploadEncrypted::slotUpdateMetadataSuccess); + connect(job, &UpdateMetadataApiJob::error, this, &PropagateUploadEncrypted::slotUpdateMetadataError); + job->start(); +} + +void PropagateUploadEncrypted::slotUpdateMetadataSuccess(const QByteArray& fileId) +{ + qDebug() << "Uploading of the metadata success, Encrypting the file"; + QFileInfo info(_propagator->_localDir + QDir::separator() + _item->_file); auto *input = new QFile(info.absoluteFilePath()); - auto *output = new QFile(QDir::tempPath() + QDir::separator() + encryptedFile.encryptedFilename); - EncryptionHelper::fileEncryption(encryptedFile.encryptionKey, - encryptedFile.initializationVector, + auto *output = new QFile(QDir::tempPath() + QDir::separator() + _encryptedFile.encryptedFilename); + EncryptionHelper::fileEncryption(_encryptedFile.encryptionKey, + _encryptedFile.initializationVector, input, output); // File is Encrypted, Upload it. @@ -155,7 +170,17 @@ void PropagateUploadEncrypted::slotFolderEncriptedMetadataReceived(const QJsonDo output->deleteLater(); qDebug() << "Encrypted Info:" << outputInfo.path() << outputInfo.fileName() << outputInfo.size(); - emit finalized(outputInfo.path(),outputInfo.fileName(),outputInfo.size()); + // emit finalized(outputInfo.path(),outputInfo.fileName(),outputInfo.size()); + + auto *unlockJob = new UnlockEncryptFolderApiJob(_propagator->account(), _folderId, _folderToken, this); + connect(unlockJob, &UnlockEncryptFolderApiJob::success, []{ qDebug() << "Successfully Unlocked"; }); + connect(unlockJob, &UnlockEncryptFolderApiJob::error, []{ qDebug() << "Unlock Error"; }); + unlockJob->start(); +} + +void PropagateUploadEncrypted::slotUpdateMetadataError(const QByteArray& fileId, int httpErrorResponse) +{ + qDebug() << "Update metadata error for folder" << fileId << "with error" << httpErrorResponse; } void PropagateUploadEncrypted::slotUnlockEncryptedFolderSuccess(const QByteArray& fileId) diff --git a/src/libsync/propagateuploadencrypted.h b/src/libsync/propagateuploadencrypted.h index c6a6320eec..4b955e7020 100644 --- a/src/libsync/propagateuploadencrypted.h +++ b/src/libsync/propagateuploadencrypted.h @@ -11,6 +11,7 @@ #include #include "owncloudpropagator.h" +#include "clientsideencryption.h" namespace OCC { class FolderMetadata; @@ -49,6 +50,8 @@ private slots: void slotFolderEncriptedMetadataReceived(const QJsonDocument &json, int statusCode); void slotUnlockEncryptedFolderSuccess(const QByteArray& fileId); void slotUnlockEncryptedFolderError(const QByteArray& fileId, int httpReturnCode); + void slotUpdateMetadataSuccess(const QByteArray& fileId); + void slotUpdateMetadataError(const QByteArray& fileId, int httpReturnCode); signals: // Emmited after the file is encrypted and everythign is setup. @@ -68,6 +71,7 @@ private: QByteArray _generatedKey; QByteArray _generatedIv; FolderMetadata *_metadata; + EncryptedFile _encryptedFile; };