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 "permissionmodifyjob.h"
0010 #include "driveservice.h"
0011 #include "permission.h"
0012 #include "utils.h"
0013 
0014 #include <QNetworkReply>
0015 #include <QNetworkRequest>
0016 #include <QUrlQuery>
0017 
0018 using namespace KGAPI2;
0019 using namespace KGAPI2::Drive;
0020 
0021 namespace
0022 {
0023 static constexpr bool removeExpirationDefault = false;
0024 static constexpr bool transferOwnershipDefault = false;
0025 static constexpr bool useDomainAdminAccessDefault = false;
0026 }
0027 
0028 class Q_DECL_HIDDEN PermissionModifyJob::Private
0029 {
0030 public:
0031     Private(PermissionModifyJob *parent);
0032     void processNext();
0033 
0034     QString fileId;
0035     PermissionsList permissions;
0036     bool supportsAllDrives;
0037     bool removeExpiration;
0038     bool transferOwnership;
0039     bool useDomainAdminAccess;
0040 
0041 private:
0042     PermissionModifyJob *const q;
0043 };
0044 
0045 PermissionModifyJob::Private::Private(PermissionModifyJob *parent)
0046     : supportsAllDrives(true)
0047     , removeExpiration(removeExpirationDefault)
0048     , transferOwnership(transferOwnershipDefault)
0049     , useDomainAdminAccess(useDomainAdminAccessDefault)
0050     , q(parent)
0051 {
0052 }
0053 
0054 void PermissionModifyJob::Private::processNext()
0055 {
0056     if (permissions.isEmpty()) {
0057         q->emitFinished();
0058         return;
0059     }
0060 
0061     const PermissionPtr permission = permissions.takeFirst();
0062     QUrl url = DriveService::modifyPermissionUrl(fileId, permission->id());
0063 
0064     QUrlQuery query(url);
0065     query.addQueryItem(QStringLiteral("supportsAllDrives"), Utils::bool2Str(supportsAllDrives));
0066 
0067     if (removeExpiration != removeExpirationDefault) {
0068         query.addQueryItem(QStringLiteral("removeExpiration"), Utils::bool2Str(removeExpiration));
0069     }
0070 
0071     if (transferOwnership != transferOwnershipDefault) {
0072         query.addQueryItem(QStringLiteral("transferOwnership"), Utils::bool2Str(transferOwnership));
0073     }
0074 
0075     if (useDomainAdminAccess != useDomainAdminAccessDefault) {
0076         query.addQueryItem(QStringLiteral("useDomainAdminAccess"), Utils::bool2Str(useDomainAdminAccess));
0077     }
0078 
0079     url.setQuery(query);
0080     QNetworkRequest request(url);
0081 
0082     const QByteArray rawData = Permission::toJSON(permission);
0083     q->enqueueRequest(request, rawData, QStringLiteral("application/json"));
0084 }
0085 
0086 PermissionModifyJob::PermissionModifyJob(const QString &fileId, const PermissionPtr &permission, const AccountPtr &account, QObject *parent)
0087     : ModifyJob(account, parent)
0088     , d(new Private(this))
0089 {
0090     d->fileId = fileId;
0091     d->permissions << permission;
0092 }
0093 
0094 PermissionModifyJob::PermissionModifyJob(const QString &fileId, const PermissionsList &permissions, const AccountPtr &account, QObject *parent)
0095     : ModifyJob(account, parent)
0096     , d(new Private(this))
0097 {
0098     d->fileId = fileId;
0099     d->permissions << permissions;
0100 }
0101 
0102 PermissionModifyJob::~PermissionModifyJob() = default;
0103 
0104 bool PermissionModifyJob::removeExpiration() const
0105 {
0106     return d->removeExpiration;
0107 }
0108 
0109 void PermissionModifyJob::setRemoveExpiration(bool removeExpiration)
0110 {
0111     d->removeExpiration = removeExpiration;
0112 }
0113 
0114 bool PermissionModifyJob::supportsAllDrives() const
0115 {
0116     return d->supportsAllDrives;
0117 }
0118 
0119 void PermissionModifyJob::setSupportsAllDrives(bool supportsAllDrives)
0120 {
0121     d->supportsAllDrives = supportsAllDrives;
0122 }
0123 
0124 bool PermissionModifyJob::transferOwnership() const
0125 {
0126     return d->transferOwnership;
0127 }
0128 
0129 void PermissionModifyJob::setTransferOwnership(bool transferOwnership)
0130 {
0131     d->transferOwnership = transferOwnership;
0132 }
0133 
0134 bool PermissionModifyJob::useDomainAdminAccess() const
0135 {
0136     return d->useDomainAdminAccess;
0137 }
0138 
0139 void PermissionModifyJob::setUseDomainAdminAccess(bool useDomainAdminAccess)
0140 {
0141     d->useDomainAdminAccess = useDomainAdminAccess;
0142 }
0143 
0144 void PermissionModifyJob::start()
0145 {
0146     d->processNext();
0147 }
0148 
0149 ObjectsList PermissionModifyJob::handleReplyWithItems(const QNetworkReply *reply, const QByteArray &rawData)
0150 {
0151     const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader).toString();
0152     ContentType ct = Utils::stringToContentType(contentType);
0153     ObjectsList items;
0154     if (ct == KGAPI2::JSON) {
0155         items << Permission::fromJSON(rawData);
0156     } else {
0157         setError(KGAPI2::InvalidResponse);
0158         setErrorString(tr("Invalid response content type"));
0159         emitFinished();
0160     }
0161 
0162     // Enqueue next item or finish
0163     d->processNext();
0164 
0165     return items;
0166 }
0167 
0168 #include "moc_permissionmodifyjob.cpp"