mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
72 lines
2.8 KiB
Swift
72 lines
2.8 KiB
Swift
/*
|
|
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
import Foundation
|
|
import NCDesktopClientSocketKit
|
|
import NextcloudFileProviderKit
|
|
import OSLog
|
|
|
|
class FileProviderSocketLineProcessor: NSObject, LineProcessor {
|
|
var delegate: FileProviderExtension
|
|
|
|
required init(delegate: FileProviderExtension) {
|
|
self.delegate = delegate
|
|
}
|
|
|
|
func process(_ line: String) {
|
|
if line.contains("~") { // We use this as the separator specifically in ACCOUNT_DETAILS
|
|
Logger.desktopClientConnection.debug(
|
|
"Processing file provider line with potentially sensitive user data")
|
|
} else {
|
|
Logger.desktopClientConnection.debug(
|
|
"Processing file provider line: \(line, privacy: .public)")
|
|
}
|
|
|
|
let splitLine = line.split(separator: ":", maxSplits: 1)
|
|
guard let commandSubsequence = splitLine.first else {
|
|
Logger.desktopClientConnection.error("Input line did not have a first element")
|
|
return
|
|
}
|
|
let command = String(commandSubsequence)
|
|
|
|
Logger.desktopClientConnection.debug("Received command: \(command, privacy: .public)")
|
|
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 {
|
|
Logger.desktopClientConnection.error("Account details did not have a first element")
|
|
return
|
|
}
|
|
let splitAccountDetails = accountDetailsSubsequence.split(separator: "~", maxSplits: 4)
|
|
|
|
let userAgent = String(splitAccountDetails[0])
|
|
let user = String(splitAccountDetails[1])
|
|
let userId = String(splitAccountDetails[2])
|
|
let serverUrl = String(splitAccountDetails[3])
|
|
let password = String(splitAccountDetails[4])
|
|
|
|
delegate.setupDomainAccount(
|
|
user: user,
|
|
userId: userId,
|
|
serverUrl: serverUrl,
|
|
password: password,
|
|
userAgent: userAgent
|
|
)
|
|
} else if command == "IGNORE_LIST" {
|
|
guard let ignoreListSubsequence = splitLine.last else {
|
|
Logger.desktopClientConnection.error("Ignore list missing contents!")
|
|
return
|
|
}
|
|
let ignoreList = ignoreListSubsequence.components(separatedBy: "_~IL$~_")
|
|
Logger.desktopClientConnection.debug(
|
|
"Applying \(ignoreList.count, privacy: .public) ignore file patterns"
|
|
)
|
|
delegate.ignoredFiles = IgnoredFilesMatcher(ignoreList: ignoreList)
|
|
}
|
|
}
|
|
}
|