Check server capabilities for file sharing default permissions.
authorCamila <hello@camila.codes>
Tue, 24 Aug 2021 12:47:36 +0000 (14:47 +0200)
committerMatthieu Gallien (Rebase PR Action) <matthieu_gallien@yahoo.fr>
Mon, 27 Sep 2021 08:53:45 +0000 (08:53 +0000)
Signed-off-by: Camila <hello@camila.codes>
src/gui/owncloudgui.cpp
src/gui/shareusergroupwidget.cpp
src/libsync/capabilities.cpp
src/libsync/capabilities.h

index f4aeef11a0d3b051cd44c52499fb194cdc3806a9..3941d9b0f3ecc038c5fb750654468bc2910085a2 100644 (file)
@@ -631,19 +631,7 @@ void ownCloudGui::slotShowShareDialog(const QString &sharePath, const QString &l
         }
     }
 
-    // As a first approximation, set the set of permissions that can be granted
-    // either to everything (resharing allowed) or nothing (no resharing).
-    //
-    // The correct value will be found with a propfind from ShareDialog.
-    // (we want to show the dialog directly, not wait for the propfind first)
-    SharePermissions maxSharingPermissions =
-        SharePermissionRead
-        | SharePermissionUpdate | SharePermissionCreate | SharePermissionDelete
-        | SharePermissionShare;
-    if (!resharingAllowed) {
-        maxSharingPermissions = {};
-    }
-
+    auto maxSharingPermissions = resharingAllowed? SharePermissions(accountState->account()->capabilities().shareDefaultPermissions()) : SharePermissions({});
 
     ShareDialog *w = nullptr;
     if (_shareDialogs.contains(localPath) && _shareDialogs[localPath]) {
index ce28fbb642625346262b6e48430a035727d887f0..1ca12736b6092c6d631f945a1554ce4105c279b8 100644 (file)
@@ -402,11 +402,8 @@ void ShareUserGroupWidget::slotCompleterActivated(const QModelIndex &index)
             }
         }
 
-        // Default permissions on creation
-        int permissions = SharePermissionCreate | SharePermissionUpdate
-                | SharePermissionDelete | SharePermissionShare;
         _manager->createShare(_sharePath, Share::ShareType(sharee->type()),
-            sharee->shareWith(), SharePermission(permissions), password);
+            sharee->shareWith(), _maxSharingPermissions, password);
     }
 
     _ui->shareeLineEdit->setEnabled(false);
index 9983821aec34da20a71afa434379bcc822bbbdc7..7eabe70dc3e6d12ff0e0e109a672eb8e9261ab12 100644 (file)
@@ -100,6 +100,15 @@ bool Capabilities::shareResharing() const
     return _capabilities["files_sharing"].toMap()["resharing"].toBool();
 }
 
+int Capabilities::shareDefaultPermissions() const
+{
+    if(_capabilities["files_sharing"].toMap().contains("default_permissions")) {
+        return _capabilities["files_sharing"].toMap()["default_permissions"].toInt();
+    }
+    
+    return {};
+}
+
 bool Capabilities::clientSideEncryptionAvailable() const
 {
     auto it = _capabilities.constFind(QStringLiteral("end-to-end-encryption"));
index 3040db89059b06920fb717ac0e574c5b51fee6d4..8e0c900abe149167542c8b948e3747717a0dfc0f 100644 (file)
@@ -57,6 +57,7 @@ public:
     int sharePublicLinkExpireDateDays() const;
     bool sharePublicLinkMultiple() const;
     bool shareResharing() const;
+    int shareDefaultPermissions() const;
     bool chunkingNg() const;
     bool userStatusNotification() const;
     bool userStatus() const;