diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-10-02 03:58:06 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-10-02 23:01:13 +0200 |
| commit | 4900dbb3706309ac7558fbe661a64654d7d7d221 (patch) | |
| tree | 61891873a3ee4b759dbdc18f20336d58c1b1d90c /src/client/QXmppEncryptedHttpFileSharingProvider.cpp | |
| parent | 2f6a91642f2585c8b226011a0bb5a3725a012b15 (diff) | |
| download | qxmpp-4900dbb3706309ac7558fbe661a64654d7d7d221.tar.gz | |
Rename EncryptedHttpProvider to EncryptedProvider
Diffstat (limited to 'src/client/QXmppEncryptedHttpFileSharingProvider.cpp')
| -rw-r--r-- | src/client/QXmppEncryptedHttpFileSharingProvider.cpp | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/src/client/QXmppEncryptedHttpFileSharingProvider.cpp b/src/client/QXmppEncryptedHttpFileSharingProvider.cpp deleted file mode 100644 index 2ba0a665..00000000 --- a/src/client/QXmppEncryptedHttpFileSharingProvider.cpp +++ /dev/null @@ -1,114 +0,0 @@ -// SPDX-FileCopyrightText: 2022 Jonah BrĂ¼chert <jbb@kaidan.im> -// SPDX-FileCopyrightText: 2022 Linus Jahn <lnj@kaidan.im> -// -// SPDX-License-Identifier: LGPL-2.1-or-later - -#include "QXmppEncryptedHttpFileSharingProvider.h" - -#include "QXmppFileEncryption.h" -#include "QXmppFileMetadata.h" -#include "QXmppFileSharingManager.h" -#include "QXmppFutureUtils_p.h" -#include "QXmppUtils.h" - -#include "QcaInitializer_p.h" -#include <QMimeDatabase> - -using namespace QXmpp; -using namespace QXmpp::Private; - -/// -/// \class QXmppEncryptedHttpFileSharingProvider -/// -/// Encrypts or decrypts files on the fly when uploading or downloading. -/// -/// \since QXmpp 1.5 -/// - -class QXmppEncryptedHttpFileSharingProviderPrivate -{ -public: - QcaInitializer init; - QXmppFileSharingManager *manager; - std::shared_ptr<QXmppFileSharingProvider> uploadBaseProvider; -}; - -/// -/// \brief Create a new QXmppEncryptedHttpFileSharingProvider -/// -/// \param manager QXmppFileSharingManager to be used to find other providers for downloading -/// encrypted files. -/// \param uploadBaseProvider Provider to be used for uploading the encrypted files. -/// -QXmppEncryptedHttpFileSharingProvider::QXmppEncryptedHttpFileSharingProvider( - QXmppFileSharingManager *manager, - std::shared_ptr<QXmppFileSharingProvider> uploadBaseProvider) - : d(std::make_unique<QXmppEncryptedHttpFileSharingProviderPrivate>()) -{ - d->manager = manager; - d->uploadBaseProvider = std::move(uploadBaseProvider); -} - -QXmppEncryptedHttpFileSharingProvider::~QXmppEncryptedHttpFileSharingProvider() = default; - -auto QXmppEncryptedHttpFileSharingProvider::downloadFile(const std::any &source, - std::unique_ptr<QIODevice> target, - std::function<void(quint64, quint64)> reportProgress, - std::function<void(DownloadResult)> reportFinished) - -> std::shared_ptr<Download> -{ - QXmppEncryptedFileSource encryptedSource; - try { - encryptedSource = std::any_cast<QXmppEncryptedFileSource>(source); - } catch (const std::bad_any_cast &) { - qFatal("QXmppEncryptedHttpFileSharingProvider::downloadFile can only handle QXmppEncryptedFileSource sources"); - } - - auto output = std::make_unique<Encryption::DecryptionDevice>(std::move(target), encryptedSource.cipher(), encryptedSource.iv(), encryptedSource.key()); - - // find provider for source of encrypted file - std::any httpSource = encryptedSource.httpSources().front(); - if (auto provider = d->manager->providerForSource(httpSource)) { - return provider->downloadFile(httpSource, std::move(output), std::move(reportProgress), std::move(reportFinished)); - } - - reportFinished(QXmppError { QStringLiteral("No basic file sharing provider available for encrypted file."), {} }); - return {}; -} - -auto QXmppEncryptedHttpFileSharingProvider::uploadFile(std::unique_ptr<QIODevice> data, - const QXmppFileMetadata &, - std::function<void(quint64, quint64)> reportProgress, - std::function<void(UploadResult)> reportFinished) - -> std::shared_ptr<Upload> -{ - auto cipher = Aes256CbcPkcs7; - auto key = Encryption::generateKey(cipher); - auto iv = Encryption::generateInitializationVector(cipher); - - auto encDevice = std::make_unique<Encryption::EncryptionDevice>(std::move(data), cipher, key, iv); - auto encryptedSize = encDevice->size(); - - QXmppFileMetadata metadata; - metadata.setFilename(QXmppUtils::generateStanzaHash(10)); - metadata.setMediaType(QMimeDatabase().mimeTypeForName("application/octet-stream")); - metadata.setSize(encryptedSize); - - // find provider for source of encrypted file - Q_ASSERT(d->uploadBaseProvider); - return d->uploadBaseProvider->uploadFile( - std::move(encDevice), - metadata, - std::move(reportProgress), - [=, reportFinished = std::move(reportFinished)](UploadResult result) { - auto encryptedResult = visitForward<UploadResult>(std::move(result), [&](std::any httpSourceAny) { - QXmppEncryptedFileSource encryptedSource; - encryptedSource.setKey(key); - encryptedSource.setIv(iv); - encryptedSource.setHttpSources({ std::any_cast<QXmppHttpFileSource>(std::move(httpSourceAny)) }); - - return encryptedSource; - }); - reportFinished(std::move(encryptedResult)); - }); -} |
