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"