File indexing completed on 2024-04-21 04:57:51

0001 /*
0002     SPDX-FileCopyrightText: 2020 Elvis Angelaccio <elvis.angelaccio@kde.org>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #ifndef S3BACKEND_H
0007 #define S3BACKEND_H
0008 
0009 #include "s3url.h"
0010 
0011 #include <KIO/Job>
0012 #include <KIO/WorkerBase>
0013 
0014 #include <QUrl>
0015 
0016 #include <aws/s3/S3Client.h>
0017 
0018 class S3Worker;
0019 
0020 class S3Backend
0021 {
0022 public:
0023 
0024     S3Backend(S3Worker *q);
0025 
0026     Q_REQUIRED_RESULT KIO::WorkerResult listDir(const QUrl &url);
0027     Q_REQUIRED_RESULT KIO::WorkerResult stat(const QUrl &url);
0028     Q_REQUIRED_RESULT KIO::WorkerResult mimetype(const QUrl &url);
0029     Q_REQUIRED_RESULT KIO::WorkerResult get(const QUrl &url);
0030     Q_REQUIRED_RESULT KIO::WorkerResult put(const QUrl &url, int permissions, KIO::JobFlags flags);
0031     Q_REQUIRED_RESULT KIO::WorkerResult copy(const QUrl &src, const QUrl &dest, int permissions, KIO::JobFlags flags);
0032     Q_REQUIRED_RESULT KIO::WorkerResult mkdir(const QUrl &url, int permissions);
0033     Q_REQUIRED_RESULT KIO::WorkerResult del(const QUrl &url, bool isFile);
0034     Q_REQUIRED_RESULT KIO::WorkerResult rename(const QUrl &src, const QUrl &dest, KIO::JobFlags flags);
0035 
0036 private:
0037     Q_DISABLE_COPY(S3Backend)
0038 
0039     enum CwdAccess {
0040         ReadOnlyCwd,
0041         WritableCwd
0042     };
0043 
0044     bool listBuckets();
0045     void listBucket(const Aws::String &bucketName);
0046     void listKey(const S3Url &s3url);
0047     void listCwdEntry(CwdAccess access = WritableCwd);
0048     bool deletePrefix(const Aws::S3::S3Client &client, const S3Url &s3url, const Aws::String &prefix);
0049     QString contentType(const S3Url &s3url);
0050 
0051     Aws::String m_configProfileName;    // This must be passed to the S3Client objects to get the proper region from ~/.aws/config
0052     S3Worker *q = nullptr;
0053 };
0054 
0055 #endif // S3BACKEND_H