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 "permissiondeletejob.h"
0010 #include "driveservice.h"
0011 #include "permission.h"
0012 #include "utils.h"
0013 
0014 #include <QNetworkRequest>
0015 #include <QUrlQuery>
0016 
0017 using namespace KGAPI2;
0018 using namespace KGAPI2::Drive;
0019 
0020 namespace
0021 {
0022 static constexpr bool useDomainAdminAccessDefault = false;
0023 }
0024 
0025 class Q_DECL_HIDDEN PermissionDeleteJob::Private
0026 {
0027 public:
0028     QString fileId;
0029     QStringList permissionsIds;
0030     bool supportsAllDrives;
0031     bool useDomainAdminAccess;
0032 };
0033 
0034 PermissionDeleteJob::PermissionDeleteJob(const QString &fileId, const PermissionPtr &permission, const AccountPtr &account, QObject *parent)
0035     : DeleteJob(account, parent)
0036     , d(new Private)
0037 {
0038     d->supportsAllDrives = true;
0039     d->useDomainAdminAccess = useDomainAdminAccessDefault;
0040     d->fileId = fileId;
0041     d->permissionsIds << permission->id();
0042 }
0043 
0044 PermissionDeleteJob::PermissionDeleteJob(const QString &fileId, const QString &permissionId, const AccountPtr &account, QObject *parent)
0045     : DeleteJob(account, parent)
0046     , d(new Private)
0047 {
0048     d->supportsAllDrives = true;
0049     d->useDomainAdminAccess = useDomainAdminAccessDefault;
0050     d->fileId = fileId;
0051     d->permissionsIds << permissionId;
0052 }
0053 
0054 PermissionDeleteJob::PermissionDeleteJob(const QString &fileId, const PermissionsList &permissions, const AccountPtr &account, QObject *parent)
0055     : DeleteJob(account, parent)
0056     , d(new Private)
0057 {
0058     d->supportsAllDrives = true;
0059     d->useDomainAdminAccess = useDomainAdminAccessDefault;
0060     d->fileId = fileId;
0061     for (const PermissionPtr &permission : std::as_const(permissions)) {
0062         d->permissionsIds << permission->id();
0063     }
0064 }
0065 
0066 PermissionDeleteJob::PermissionDeleteJob(const QString &fileId, const QStringList &permissionsIds, const AccountPtr &account, QObject *parent)
0067     : DeleteJob(account, parent)
0068     , d(new Private)
0069 {
0070     d->supportsAllDrives = true;
0071     d->useDomainAdminAccess = useDomainAdminAccessDefault;
0072     d->fileId = fileId;
0073     d->permissionsIds << permissionsIds;
0074 }
0075 
0076 PermissionDeleteJob::~PermissionDeleteJob() = default;
0077 
0078 bool PermissionDeleteJob::supportsAllDrives() const
0079 {
0080     return d->supportsAllDrives;
0081 }
0082 
0083 void PermissionDeleteJob::setSupportsAllDrives(bool supportsAllDrives)
0084 {
0085     d->supportsAllDrives = supportsAllDrives;
0086 }
0087 
0088 bool PermissionDeleteJob::useDomainAdminAccess() const
0089 {
0090     return d->useDomainAdminAccess;
0091 }
0092 
0093 void PermissionDeleteJob::setUseDomainAdminAccess(bool useDomainAdminAccess)
0094 {
0095     d->useDomainAdminAccess = useDomainAdminAccess;
0096 }
0097 
0098 void PermissionDeleteJob::start()
0099 {
0100     if (d->permissionsIds.isEmpty()) {
0101         emitFinished();
0102         return;
0103     }
0104 
0105     const QString permissionId = d->permissionsIds.takeFirst();
0106     QUrl url = DriveService::deletePermissionUrl(d->fileId, permissionId);
0107     QUrlQuery query(url);
0108     query.addQueryItem(QStringLiteral("supportsAllDrives"), Utils::bool2Str(d->supportsAllDrives));
0109     if (d->useDomainAdminAccess != useDomainAdminAccessDefault) {
0110         query.addQueryItem(QStringLiteral("useDomainAdminAccess"), Utils::bool2Str(d->useDomainAdminAccess));
0111     }
0112     url.setQuery(query);
0113     QNetworkRequest request(url);
0114 
0115     enqueueRequest(request);
0116 }
0117 
0118 #include "moc_permissiondeletejob.cpp"