Try to authenticate new account details before setting them
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 30 Sep 2024 05:46:47 +0000 (13:46 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 11 Oct 2024 08:40:47 +0000 (16:40 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension+ClientInterface.swift

index 61f0a06052fb5bdee0ea92d01bbaff0cceaa8a5e..7d439245d66ceb89ebd79132a5d6b4037b8cd570 100644 (file)
@@ -119,11 +119,28 @@ extension FileProviderExtension: NSFileProviderServicing, ChangeNotificationInte
         )
         ncKit.setup(delegate: changeObserver)
 
-        Logger.fileProviderExtension.info(
-            "Nextcloud account set up in File Provider extension for user: \(user, privacy: .public) at server: \(serverUrl, privacy: .public)"
-        )
-
-        signalEnumeratorAfterAccountSetup()
+        Task {
+            switch (await ncKit.tryAuthenticationAttempt()) {
+            case .authenticationError:
+                Logger.fileProviderExtension.info(
+                    "\(user, privacy: .public) authentication failed due to bad creds, stopping"
+                )
+                ncAccount = nil
+                ncKit.setup(user: "", userId: "", password: "", urlBase: "") // In case ongoing ops
+            case .connectionError:
+                Logger.fileProviderExtension.info(
+                    "\(user, privacy: .public) authentication try failed due to internet connectivity issues."
+                )
+            case .success:
+                Logger.fileProviderExtension.info(
+                    """
+                    Authenticated! Nextcloud account set up in File Provider extension.
+                    User: \(user, privacy: .public) at server: \(serverUrl, privacy: .public)
+                    """
+                )
+                Task { @MainActor in signalEnumeratorAfterAccountSetup() }
+            }
+        }
     }
 
     @objc func removeAccountConfig() {