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"