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