mirror of
https://github.com/nextcloud/desktop.git
synced 2025-10-26 11:17:43 +00:00
Make ncAccount in FileProviderExtension an optional, make state of FileProviderDomainAccountData immediately on init
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
This commit is contained in:
parent
a8dfafabde
commit
9095df2482
@ -21,7 +21,7 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension {
|
||||
let domain: NSFileProviderDomain
|
||||
|
||||
let appGroupIdentifier: String? = Bundle.main.object(forInfoDictionaryKey: "SocketApiPrefix") as? String
|
||||
var ncAccount: FileProviderDomainNextcloudAccountData = FileProviderDomainNextcloudAccountData()
|
||||
var ncAccount: NextcloudAccount?
|
||||
lazy var socketClient: LocalSocketClient? = {
|
||||
guard let fileProviderSocketApiPrefix = appGroupIdentifier else {
|
||||
NSLog("Could not start file provider socket client properly as SocketApiPrefix is missing")
|
||||
@ -113,6 +113,6 @@ class FileProviderExtension: NSObject, NSFileProviderReplicatedExtension {
|
||||
}
|
||||
|
||||
func setupDomainAccount(keychainAccount:String) {
|
||||
ncAccount = FileProviderDomainNextcloudAccountData(withKeychainAccount:keychainAccount)
|
||||
ncAccount = NextcloudAccount(withKeychainAccount:keychainAccount)
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,28 +15,48 @@
|
||||
import Foundation
|
||||
import FileProvider
|
||||
|
||||
class FileProviderDomainNextcloudAccountData: NSObject {
|
||||
class NextcloudAccount: NSObject {
|
||||
let webDavUrlSuffix: String = "/remote.php/dav"
|
||||
|
||||
private(set) var username: String?
|
||||
private(set) var password: String?
|
||||
private(set) var serverUrl: URL?
|
||||
private(set) var davUrl: URL?
|
||||
let username, password: String?
|
||||
let serverUrl, davUrl: URL?
|
||||
|
||||
var isNull: Bool {
|
||||
return username?.isEmpty ?? false || serverUrl?.absoluteString.isEmpty ?? false
|
||||
}
|
||||
|
||||
override init() {
|
||||
init?(withKeychainAccount account:String) {
|
||||
// The client sets the account field in the keychain entry as a colon-separated string consisting of
|
||||
// an account's username, its homeserver url, and the id of the account
|
||||
guard let passwordData = NextcloudAccount.getUserPasswordFromKeychain(accountString: account),
|
||||
let passwordString = String(data: passwordData, encoding: .utf8) else {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
let keychainAccountSplit = account.split(separator: ":")
|
||||
let usernameSubstring = keychainAccountSplit[0]
|
||||
let serverUrlSubstring = keychainAccountSplit[1]
|
||||
let clientAccountIdSubstring = keychainAccountSplit[2]
|
||||
|
||||
let usernameString = String(usernameSubstring)
|
||||
let serverUrlString = String(serverUrlSubstring)
|
||||
let clientAccountIdString = String(clientAccountIdSubstring)
|
||||
|
||||
guard let serverUrlUrl = URL(string: String(serverUrlString)) else {
|
||||
return nil
|
||||
}
|
||||
|
||||
let davUrlUrl = serverUrlUrl.appendingPathComponent(webDavUrlSuffix)
|
||||
|
||||
username = usernameString
|
||||
password = passwordString
|
||||
serverUrl = serverUrlUrl
|
||||
davUrl = davUrlUrl
|
||||
|
||||
super.init()
|
||||
}
|
||||
|
||||
init(withKeychainAccount account:String) {
|
||||
super.init()
|
||||
getAccountDetails(keychainAccount: account)
|
||||
}
|
||||
|
||||
static func getUserPasswordFromKeychain(accountString:String) -> Data? {
|
||||
private static func getUserPasswordFromKeychain(accountString:String) -> Data? {
|
||||
let query = [
|
||||
kSecClass as String : kSecClassGenericPassword,
|
||||
kSecAttrAccount as String : accountString,
|
||||
@ -54,30 +74,5 @@ class FileProviderDomainNextcloudAccountData: NSObject {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
private func getAccountDetails(keychainAccount: String) {
|
||||
// The client sets the account field in the keychain entry as a colon-separated string consisting of
|
||||
// an account's username, its homeserver url, and the id of the account
|
||||
guard let passwordData = FileProviderDomainNextcloudAccountData.getUserPasswordFromKeychain(accountString: keychainAccount),
|
||||
let passwordString = String(data: passwordData, encoding: .utf8)
|
||||
else { return }
|
||||
|
||||
let keychainAccountSplit = keychainAccount.split(separator: ":")
|
||||
let usernameSubstring = keychainAccountSplit[0]
|
||||
let serverUrlSubstring = keychainAccountSplit[1]
|
||||
let clientAccountIdSubstring = keychainAccountSplit[2]
|
||||
|
||||
let usernameString = String(usernameSubstring)
|
||||
let serverUrlString = String(serverUrlSubstring)
|
||||
let clientAccountIdString = String(clientAccountIdSubstring)
|
||||
|
||||
guard let serverUrlUrl = URL(string: String(serverUrlString)) else { return }
|
||||
let davUrlUrl = serverUrlUrl.appendingPathComponent(webDavUrlSuffix)
|
||||
|
||||
username = usernameString
|
||||
password = passwordString
|
||||
serverUrl = serverUrlUrl
|
||||
davUrl = davUrlUrl
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user