File indexing completed on 2024-05-12 05:22:22

0001 /*
0002  * This file is part of LibKGAPI library
0003  *
0004  * SPDX-FileCopyrightText: 2013 Daniel Vrátil <dvratil@redhat.com>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007  */
0008 
0009 #include "permissionfetchjob.h"
0010 #include "driveservice.h"
0011 #include "file.h"
0012 #include "permission.h"
0013 #include "utils.h"
0014 
0015 #include <QNetworkReply>
0016 #include <QNetworkRequest>
0017 #include <QUrlQuery>
0018 
0019 using namespace KGAPI2;
0020 using namespace KGAPI2::Drive;
0021 
0022 namespace
0023 {
0024 static constexpr bool useDomainAdminAccessDefault = false;
0025 }
0026 
0027 class Q_DECL_HIDDEN PermissionFetchJob::Private
0028 {
0029 public:
0030     QString fileId;
0031     QString permissionId;
0032     bool supportsAllDrives;
0033     bool useDomainAdminAccess;
0034 };
0035 
0036 PermissionFetchJob::PermissionFetchJob(const QString &fileId, const AccountPtr &account, QObject *parent)
0037     : FetchJob(account, parent)
0038     , d(new Private)
0039 {
0040     d->supportsAllDrives = true;
0041     d->useDomainAdminAccess = useDomainAdminAccessDefault;
0042     d->fileId = fileId;
0043 }
0044 
0045 PermissionFetchJob::PermissionFetchJob(const FilePtr &file, const AccountPtr &account, QObject *parent)
0046     : FetchJob(account, parent)
0047     , d(new Private)
0048 {
0049     d->supportsAllDrives = true;
0050     d->useDomainAdminAccess = useDomainAdminAccessDefault;
0051     d->fileId = file->id();
0052 }
0053 
0054 PermissionFetchJob::PermissionFetchJob(const QString &fileId, const QString &permissionId, const AccountPtr &account, QObject *parent)
0055     : FetchJob(account, parent)
0056     , d(new Private)
0057 {
0058     d->supportsAllDrives = true;
0059     d->useDomainAdminAccess = useDomainAdminAccessDefault;
0060     d->fileId = fileId;
0061     d->permissionId = permissionId;
0062 }
0063 
0064 PermissionFetchJob::PermissionFetchJob(const FilePtr &file, const QString &permissionId, const AccountPtr &account, QObject *parent)
0065     : FetchJob(account, parent)
0066     , d(new Private)
0067 {
0068     d->supportsAllDrives = true;
0069     d->useDomainAdminAccess = useDomainAdminAccessDefault;
0070     d->fileId = file->id();
0071     d->permissionId = permissionId;
0072 }
0073 
0074 PermissionFetchJob::~PermissionFetchJob() = default;
0075 
0076 bool PermissionFetchJob::supportsAllDrives() const
0077 {
0078     return d->supportsAllDrives;
0079 }
0080 
0081 void PermissionFetchJob::setSupportsAllDrives(bool supportsAllDrives)
0082 {
0083     d->supportsAllDrives = supportsAllDrives;
0084 }
0085 
0086 bool PermissionFetchJob::useDomainAdminAccess() const
0087 {
0088     return d->useDomainAdminAccess;
0089 }
0090 
0091 void PermissionFetchJob::setUseDomainAdminAccess(bool useDomainAdminAccess)
0092 {
0093     d->useDomainAdminAccess = useDomainAdminAccess;
0094 }
0095 
0096 void PermissionFetchJob::start()
0097 {
0098     QUrl url;
0099     if (d->permissionId.isEmpty()) {
0100         url = DriveService::fetchPermissionsUrl(d->fileId);
0101     } else {
0102         url = DriveService::fetchPermissionUrl(d->fileId, d->permissionId);
0103     }
0104 
0105     QUrlQuery query(url);
0106     query.addQueryItem(QStringLiteral("supportsAllDrives"), Utils::bool2Str(d->supportsAllDrives));
0107     if (d->useDomainAdminAccess != useDomainAdminAccessDefault) {
0108         query.addQueryItem(QStringLiteral("useDomainAdminAccess"), Utils::bool2Str(d->useDomainAdminAccess));
0109     }
0110     url.setQuery(query);
0111     QNetworkRequest request(url);
0112     enqueueRequest(request);
0113 }
0114 
0115 ObjectsList PermissionFetchJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0116 {
0117     ObjectsList items;
0118 
0119     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0120     ContentType ct = Utils::stringToContentType(contentType);
0121     if (ct == KGAPI2::JSON) {
0122         if (d->permissionId.isEmpty()) {
0123             items << Permission::fromJSONFeed(rawData);
0124         } else {
0125             items << Permission::fromJSON(rawData);
0126         }
0127     } else {
0128         setError(KGAPI2::InvalidResponse);
0129         setErrorString(tr("Invalid response content type"));
0130     }
0131 
0132     emitFinished();
0133     return items;
0134 }
0135 
0136 #include "moc_permissionfetchjob.cpp"