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"