Эх сурвалжийг харах

Fix share link read-only permission

- add re-share permission, bc server includes it automatically (9e626f231107365072fcb65f7d43e260f23e916c)
  - fix tests
- only update if update is needed (a7aff4b4a50b2d9db767130dd296823188e6d503)

Signed-off-by: Henrik Storch <henrik.storch@nextcloud.com>
Henrik Storch 3 жил өмнө
parent
commit
2735305f09

+ 2 - 4
NextcloudTests/SharePermissionTest.swift

@@ -67,10 +67,8 @@ class SharePermissionTest: XCTestCase {
         XCTAssertFalse(NCLinkPermission.allowEdit.hasResharePermission(for: 13))
         XCTAssertFalse(NCLinkPermission.allowEdit.hasResharePermission(for: 1))
 
-        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 15))
-        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 11))
-        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 7))
-        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 1))
+        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 25))
+        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 17))
         XCTAssertFalse(NCLinkPermission.viewOnly.hasResharePermission(for: 12))
         XCTAssertFalse(NCLinkPermission.viewOnly.hasResharePermission(for: 2))
 

+ 1 - 1
iOSClient/Share/Advanced/NCShareAdvancePermission.swift

@@ -55,7 +55,7 @@ class NCShareAdvancePermission: UITableViewController, NCShareAdvanceFotterDeleg
 
     var oldTableShare: tableShare?
     var share: NCTableShareable!
-    var isNewShare: Bool { NCManageDatabase.shared.getTableShare(account: share.account, idShare: share.idShare) == nil }
+    var isNewShare: Bool { share is NCTableShareOptions }
     var metadata: tableMetadata!
     var shareConfig: NCShareConfig!
     var networking: NCShareNetworking?

+ 3 - 1
iOSClient/Share/Advanced/NCShareCells.swift

@@ -115,7 +115,9 @@ enum NCLinkPermission: NCPermission {
                 andCanCreate: false,
                 andCanChange: false,
                 andCanDelete: false,
-                andCanShare: false,
+                // not possible to create "read-only" shares without reshare option
+                // https://github.com/nextcloud/server/blame/f99876997a9119518fe5f7ad3a3a51d33459d4cc/apps/files_sharing/lib/Controller/ShareAPIController.php#L1104-L1107
+                andCanShare: true,
                 andIsFolder: true)
         case .uploadEdit:
             return CCUtility.getPermissionsValue(

+ 5 - 9
iOSClient/Share/NCShare+Helper.swift

@@ -25,15 +25,15 @@ import UIKit
 import NCCommunication
 
 extension tableShare: NCTableShareable { }
+extension NCCommunicationShare: NCTableShareable { }
+
 protocol NCTableShareable: AnyObject {
     var shareType: Int { get set }
     var permissions: Int { get set }
 
-    var account: String { get }
-
     var idShare: Int { get set }
     var shareWith: String { get set }
-//    var publicUpload: Bool? = false
+
     var hideDownload: Bool { get set }
     var password: String { get set }
     var label: String { get set }
@@ -51,8 +51,7 @@ extension NCTableShareable {
     }
 
     func hasChanges(comparedTo other: NCTableShareable) -> Bool {
-        return other.account != account
-        || other.shareType != shareType
+        return other.shareType != shareType
         || other.permissions != permissions
         || other.hideDownload != hideDownload
         || other.password != password
@@ -66,11 +65,9 @@ class NCTableShareOptions: NCTableShareable {
     var shareType: Int
     var permissions: Int
 
-    let account: String
-
     var idShare: Int = 0
     var shareWith: String = ""
-//    var publicUpload: Bool? = false
+
     var hideDownload: Bool = false
     var password: String = ""
     var label: String = ""
@@ -81,7 +78,6 @@ class NCTableShareOptions: NCTableShareable {
     private init(shareType: Int, metadata: tableMetadata, password: String?) {
         self.permissions = NCManageDatabase.shared.getCapabilitiesServerInt(account: metadata.account, elements: ["ocs", "data", "capabilities", "files_sharing", "default_permissions"]) & metadata.sharePermissionsCollaborationServices
         self.shareType = shareType
-        self.account = metadata.account
         if let password = password {
             self.password = password
         }

+ 3 - 1
iOSClient/Share/NCShareNetworking.swift

@@ -78,9 +78,11 @@ class NCShareNetworking: NSObject {
             NCUtility.shared.stopActivityIndicator()
             if errorCode == 0, let share = share {
                 option.idShare = share.idShare
-                self.updateShare(option: option)
                 NCManageDatabase.shared.addShare(urlBase: self.urlBase, account: self.metadata.account, shares: [share])
                 self.appDelegate.shares = NCManageDatabase.shared.getTableShares(account: self.metadata.account)
+                if option.hasChanges(comparedTo: share) {
+                    self.updateShare(option: option)
+                }
             } else {
                 NCContentPresenter.shared.messageNotification("_share_", description: errorDescription, delay: NCGlobal.shared.dismissAfterSecond, type: NCContentPresenter.messageType.error, errorCode: NCGlobal.shared.errorInternalError)
             }