Properly provide both user-provided username AND backing user ID to File Provider...
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Mon, 30 Sep 2024 08:04:48 +0000 (16:04 +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/FileProviderSocketLineProcessor.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationProtocol.h
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/Services/ClientCommunicationService.swift
src/gui/macOS/fileprovidersocketcontroller.cpp
src/gui/macOS/fileproviderxpc_mac.mm

index 3a9f54a10abf46018022957b231cd8b01d57a7ee..ebc4bc4b999b01056e07862a6700edfb75abc1d6 100644 (file)
@@ -46,11 +46,12 @@ class FileProviderSocketLineProcessor: NSObject, LineProcessor {
             delegate.removeAccountConfig()
         } else if command == "ACCOUNT_DETAILS" {
             guard let accountDetailsSubsequence = splitLine.last else { return }
-            let splitAccountDetails = accountDetailsSubsequence.split(separator: "~", maxSplits: 2)
+            let splitAccountDetails = accountDetailsSubsequence.split(separator: "~", maxSplits: 3)
 
             let user = String(splitAccountDetails[0])
-            let serverUrl = String(splitAccountDetails[1])
-            let password = String(splitAccountDetails[2])
+            let userId = String(splitAccountDetails[1])
+            let serverUrl = String(splitAccountDetails[2])
+            let password = String(splitAccountDetails[3])
 
             delegate.setupDomainAccount(user: user, serverUrl: serverUrl, password: password)
         }
index 1ab5e8853d284301a519e239a8266a8736996138..6f7f0e24da6664dbddb1de90a0a74ab71be84e94 100644 (file)
@@ -21,6 +21,7 @@
 
 - (void)getExtensionAccountIdWithCompletionHandler:(void(^)(NSString *extensionAccountId, NSError *error))completionHandler;
 - (void)configureAccountWithUser:(NSString *)user
+                          userId:(NSString *)userId
                        serverUrl:(NSString *)serverUrl
                         password:(NSString *)password;
 - (void)removeAccountConfig;
index 76a0f00ce267af47ff756dca5616251be7f2782b..41670fe557a8d216a3a3c6972dbfb4ef0c83e6a3 100644 (file)
@@ -48,11 +48,13 @@ class ClientCommunicationService: NSObject, NSFileProviderServiceSource, NSXPCLi
         completionHandler(accountUserId, nil)
     }
 
-    func configureAccount(withUser user: String, 
+    func configureAccount(withUser user: String,
+                          userId: String,
                           serverUrl: String,
                           password: String) {
         Logger.desktopClientConnection.info("Received configure account information over client communication service")
         self.fpExtension.setupDomainAccount(user: user,
+                                            userId: userId,
                                             serverUrl: serverUrl,
                                             password: password)
     }
index fcd5517b77de6dad53e71b916f12bfb17b5bdeee..dad2032b5bd7800a2edd9bc7a8049667aed89032 100644 (file)
@@ -213,13 +213,15 @@ void FileProviderSocketController::sendAccountDetails() const
 
     const auto credentials = account->credentials();
     Q_ASSERT(credentials);
-    const auto accountUser = account->davUser();
-    const auto accountUrl = account->url().toString();
-    const auto accountPassword = credentials->password();
+    const auto accountUser = credentials->user(); // User-provided username/email
+    const auto accountUserId = account->davUser(); // Backing user id on server
+    const auto accountUrl = account->url().toString(); // Server base URL
+    const auto accountPassword = credentials->password(); // Account password
 
     // We cannot use colons as separators here due to "https://" in the url
     const auto message = QString(QStringLiteral("ACCOUNT_DETAILS:") +
                                  accountUser + "~" +
+                                 accountUserId + "~" +
                                  accountUrl + "~" +
                                  accountPassword);
     sendMessage(message);
index e94dc2cbcca48dbcf3ca5a0c76f4dca6d42d9ce7..b7128cf6941c8db76cea301419a41b42b810c703 100644 (file)
@@ -64,11 +64,13 @@ void FileProviderXPC::authenticateExtension(const QString &extensionAccountId) c
     const auto account = accountState->account();
     const auto credentials = account->credentials();
     NSString *const user = credentials->user().toNSString();
+    NSString *const userId = account->davUser().toNSString();
     NSString *const serverUrl = account->url().toString().toNSString();
     NSString *const password = credentials->password().toNSString();
 
     const auto clientCommService = (NSObject<ClientCommunicationProtocol> *)_clientCommServices.value(extensionAccountId);
     [clientCommService configureAccountWithUser:user
+                                         userId:userId
                                       serverUrl:serverUrl
                                        password:password];
 }