Unauthenticate the file provider extension when account is logged out
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Sat, 11 Mar 2023 14:55:46 +0000 (15:55 +0100)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 12 May 2023 05:21:29 +0000 (13:21 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension.swift
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderSocketLineProcessor.swift
src/gui/macOS/fileprovidersocketcontroller.cpp
src/gui/macOS/fileprovidersocketcontroller.h

index c8e252d80f949c7ff9813c62f4d5267028e1c03f..c6e12ec61364fa10b77006941dcd96d9c4c56125 100644 (file)
@@ -628,4 +628,8 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension, NKComm
 
         signalEnumeratorAfterAccountSetup()
     }
+
+    func removeAccountConfig() {
+        ncAccount = nil
+    }
 }
index 1082baa5223e8f2322041b8b52f2ad2ce1c1d4e7..8a46f9d220dfb7a40400774475fce329705dfe88 100644 (file)
@@ -18,7 +18,7 @@ import NCDesktopClientSocketKit
 class FileProviderSocketLineProcessor: NSObject, LineProcessor {
     var delegate: FileProviderExtension
 
-    init(delegate: FileProviderExtension) {
+    required init(delegate: FileProviderExtension) {
         self.delegate = delegate
     }
 
@@ -35,6 +35,8 @@ class FileProviderSocketLineProcessor: NSObject, LineProcessor {
         NSLog("Received command: %@", command)
         if (command == "SEND_FILE_PROVIDER_DOMAIN_IDENTIFIER") {
             delegate.sendFileProviderDomainIdentifier()
+        } else if (command == "ACCOUNT_NOT_AUTHENTICATED") {
+            delegate.removeAccountConfig()
         } else if (command == "ACCOUNT_DETAILS") {
             guard let accountDetailsSubsequence = splitLine.last else { return }
             let splitAccountDetails = accountDetailsSubsequence.split(separator: "~", maxSplits: 2)
index 57671c3710f60363cb88dcc295a4ae9e74cd969f..88bf26adfb74c92c65aa4242f3ae725dba1b9ae1 100644 (file)
@@ -148,6 +148,7 @@ void FileProviderSocketController::slotAccountStateChanged(const AccountState::S
     case AccountState::SignedOut:
     case AccountState::AskingCredentials:
         // Notify File Provider that it should show the not authenticated message
+        sendNotAuthenticated();
         break;
     case AccountState::Connected:
         // Provide credentials
@@ -156,6 +157,19 @@ void FileProviderSocketController::slotAccountStateChanged(const AccountState::S
     }
 }
 
+void FileProviderSocketController::sendNotAuthenticated() const
+{
+    Q_ASSERT(_accountState);
+    const auto account = _accountState->account();
+    Q_ASSERT(account);
+
+    qCDebug(lcFileProviderSocketController) << "About to send not authenticated message to file provider extension"
+                                            << account->displayName();
+
+    const auto message = QString(QStringLiteral("ACCOUNT_NOT_AUTHENTICATED"));
+    sendMessage(message);
+}
+
 void FileProviderSocketController::sendAccountDetails() const
 {
     Q_ASSERT(_accountState);
@@ -165,7 +179,7 @@ void FileProviderSocketController::sendAccountDetails() const
     qCDebug(lcFileProviderSocketController) << "About to send account details to file provider extension"
                                             << account->displayName();
 
-    connect(_accountState.data(), &AccountState::stateChanged, this, &FileProviderSocketController::slotAccountStateChanged);
+    connect(_accountState.data(), &AccountState::stateChanged, this, &FileProviderSocketController::slotAccountStateChanged, Qt::UniqueConnection);
 
     if (!_accountState->isConnected()) {
         qCDebug(lcFileProviderSocketController) << "Not sending account details yet as account is not connected"
index 4826dc95e11e720e37b310138e551619126c6df7..52d195fc6c93600e32e36b9de2509c4abe54aca3 100644 (file)
@@ -48,6 +48,7 @@ private slots:
     void parseReceivedLine(const QString &receivedLine);
     void requestFileProviderDomainInfo() const;
     void sendAccountDetails() const;
+    void sendNotAuthenticated() const;
 
 private:
     static AccountStatePtr accountStateFromFileProviderDomainIdentifier(const QString &domainIdentifier);