瀏覽代碼

Ensure that maximum expire dates are enforced when the server enforces them

Signed-off-by: Claudio Cambra <developer@claudiocambra.com>
Claudio Cambra 2 年之前
父節點
當前提交
f4d9142ffd

+ 6 - 0
iOSClient/Data/NCElementsJSON.swift

@@ -34,6 +34,12 @@ import UIKit
 
     @objc public let capabilitiesFileSharingApiEnabled: Array = ["ocs", "data", "capabilities", "files_sharing", "api_enabled"]
     @objc public let capabilitiesFileSharingPubPasswdEnforced: Array = ["ocs", "data", "capabilities", "files_sharing", "public", "password", "enforced"]
+    @objc public let capabilitiesFileSharingPubExpireDateEnforced: Array = ["ocs", "data", "capabilities", "files_sharing", "public", "expire_date", "enforced"]
+    @objc public let capabilitiesFileSharingPubExpireDateDays: Array = ["ocs", "data", "capabilities", "files_sharing", "public", "expire_date", "days"]
+    @objc public let capabilitiesFileSharingInternalExpireDateEnforced: Array = ["ocs", "data", "capabilities", "files_sharing", "public", "expire_date_internal", "enforced"]
+    @objc public let capabilitiesFileSharingInternalExpireDateDays: Array = ["ocs", "data", "capabilities", "files_sharing", "public", "expire_date_internal", "days"]
+    @objc public let capabilitiesFileSharingRemoteExpireDateEnforced: Array = ["ocs", "data", "capabilities", "files_sharing", "public", "expire_date_remote", "enforced"]
+    @objc public let capabilitiesFileSharingRemoteExpireDateDays: Array = ["ocs", "data", "capabilities", "files_sharing", "public", "expire_date_remote", "days"]
     @objc public let capabilitiesFileSharingDefaultPermissions: Array = ["ocs", "data", "capabilities", "files_sharing", "default_permissions"]
     // NC >= 23
     @objc public let capabilitiesFileSharingSendPasswordMail: Array = ["ocs", "data", "capabilities", "files_sharing", "sharebymail", "send_password_by_mail"]

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

@@ -157,6 +157,7 @@ class NCShareAdvancePermission: UITableViewController, NCShareAdvanceFotterDeleg
         case .expirationDate:
             let cell = tableView.cellForRow(at: indexPath) as? NCShareDateCell
             cell?.textField.becomeFirstResponder()
+            cell?.checkMaximumDate(account: metadata.account)
         case .password:
             guard share.password.isEmpty else {
                 share.password = ""

+ 52 - 0
iOSClient/Share/Advanced/NCShareCells.swift

@@ -264,11 +264,16 @@ class NCShareDateCell: UITableViewCell {
     let textField = UITextField()
 
     var onReload: (() -> Void)?
+    
+    var shareType: Int
 
     init(share: NCTableShareable) {
+        self.shareType = share.shareType
+        
         super.init(style: .value1, reuseIdentifier: "shareExpDate")
         picker.datePickerMode = .date
         picker.minimumDate = Date()
+        
         if #available(iOS 13.4, *) {
             picker.preferredDatePickerStyle = .wheels
         }
@@ -301,4 +306,51 @@ class NCShareDateCell: UITableViewCell {
     required public init?(coder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
     }
+    
+    func checkMaximumDate(account: String) {
+        let defaultExpDays = defaultExpirationDays(account: account)
+        
+        if defaultExpDays > 0 && isExpireDateEnforced(account: account) {
+            let enforcedInSecs = TimeInterval(defaultExpDays * 24 * 60 * 60);
+            self.picker.maximumDate = Date().advanced(by: enforcedInSecs)
+        }
+    }
+    
+    private func isExpireDateEnforced(account: String) -> Bool {
+        switch self.shareType {
+        case NCShareCommon.shared.SHARE_TYPE_LINK,
+            NCShareCommon.shared.SHARE_TYPE_EMAIL,
+            NCShareCommon.shared.SHARE_TYPE_GUEST:
+            return NCManageDatabase.shared.getCapabilitiesServerBool(account: account, elements: NCElementsJSON.shared.capabilitiesFileSharingPubExpireDateEnforced, exists: false)
+        case NCShareCommon.shared.SHARE_TYPE_USER,
+            NCShareCommon.shared.SHARE_TYPE_GROUP,
+            NCShareCommon.shared.SHARE_TYPE_CIRCLE,
+            NCShareCommon.shared.SHARE_TYPE_ROOM:
+            return NCManageDatabase.shared.getCapabilitiesServerBool(account: account, elements: NCElementsJSON.shared.capabilitiesFileSharingInternalExpireDateEnforced, exists: false)
+        case NCShareCommon.shared.SHARE_TYPE_REMOTE,
+            NCShareCommon.shared.SHARE_TYPE_REMOTE_GROUP:
+            return NCManageDatabase.shared.getCapabilitiesServerBool(account: account, elements: NCElementsJSON.shared.capabilitiesFileSharingRemoteExpireDateEnforced, exists: false)
+        default:
+            return false
+        }
+    }
+    
+    private func defaultExpirationDays(account: String) -> Int {
+        switch self.shareType {
+        case NCShareCommon.shared.SHARE_TYPE_LINK,
+            NCShareCommon.shared.SHARE_TYPE_EMAIL,
+            NCShareCommon.shared.SHARE_TYPE_GUEST:
+            return NCManageDatabase.shared.getCapabilitiesServerInt(account: account, elements: NCElementsJSON.shared.capabilitiesFileSharingPubExpireDateDays)
+        case NCShareCommon.shared.SHARE_TYPE_USER,
+            NCShareCommon.shared.SHARE_TYPE_GROUP,
+            NCShareCommon.shared.SHARE_TYPE_CIRCLE,
+            NCShareCommon.shared.SHARE_TYPE_ROOM:
+            return NCManageDatabase.shared.getCapabilitiesServerInt(account: account, elements: NCElementsJSON.shared.capabilitiesFileSharingInternalExpireDateDays)
+        case NCShareCommon.shared.SHARE_TYPE_REMOTE,
+            NCShareCommon.shared.SHARE_TYPE_REMOTE_GROUP:
+            return NCManageDatabase.shared.getCapabilitiesServerInt(account: account, elements: NCElementsJSON.shared.capabilitiesFileSharingRemoteExpireDateDays)
+        default:
+            return 0
+        }
+    }
 }