Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions Sources/NextcloudKit/Extensions/Data+Extension.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// SPDX-FileCopyrightText: Nextcloud GmbH
// SPDX-FileCopyrightText: 2025 Marino Faggiana
// SPDX-License-Identifier: GPL-3.0-or-later

import Foundation

extension Data {
func printJson() {
do {
let json = try JSONSerialization.jsonObject(with: self, options: [])
let data = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
guard let jsonString = String(data: data, encoding: .utf8) else {
print("Invalid data")
return
}
print(jsonString)
} catch {
print("Error: \(error.localizedDescription)")
}
}

func jsonToString() -> String {
do {
let json = try JSONSerialization.jsonObject(with: self, options: [])
let data = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
guard let jsonString = String(data: data, encoding: .utf8) else {
print("Invalid data")
return ""
}
return jsonString
} catch {
print("Error: \(error.localizedDescription)")
}
return ""
}
}
6 changes: 3 additions & 3 deletions Sources/NextcloudKit/NKInterceptor.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,19 @@ final class NKInterceptor: RequestInterceptor, Sendable {

if let array = groupDefaults.array(forKey: nkCommonInstance.groupDefaultsUnauthorized) as? [String],
array.contains(account) {
nkLog(tag: "AUTH", message: "Unauthorized for account: \(account)")
nkLog(tag: "AUTH", emoji: .error, message: "Unauthorized for account: \(account)")
let error = AFError.responseValidationFailed(reason: .unacceptableStatusCode(code: 401))
return completion(.failure(error))

} else if let array = groupDefaults.array(forKey: nkCommonInstance.groupDefaultsUnavailable) as? [String],
array.contains(account) {
nkLog(tag: "SERVICE", message: "Unavailable for account: \(account)")
nkLog(tag: "SERVICE", emoji: .error, message: "Unavailable for account: \(account)")
let error = AFError.responseValidationFailed(reason: .unacceptableStatusCode(code: 503))
return completion(.failure(error))

} else if let array = groupDefaults.array(forKey: nkCommonInstance.groupDefaultsToS) as? [String],
array.contains(account) {
nkLog(tag: "TOS", message: "Terms of service error for account: \(account)")
nkLog(tag: "TOS", emoji: .error, message: "Terms of service error for account: \(account)")
let error = AFError.responseValidationFailed(reason: .unacceptableStatusCode(code: 403))
return completion(.failure(error))
}
Expand Down
3 changes: 0 additions & 3 deletions Sources/NextcloudKit/NKSession.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ public struct NKSession: Sendable {
public var password: String
public var account: String
public var userAgent: String
public var nextcloudVersion: Int
public let groupIdentifier: String
public let httpMaximumConnectionsPerHost: Int
public let httpMaximumConnectionsPerHostInDownload: Int
Expand All @@ -33,7 +32,6 @@ public struct NKSession: Sendable {
password: String,
account: String,
userAgent: String,
nextcloudVersion: Int,
groupIdentifier: String,
httpMaximumConnectionsPerHost: Int,
httpMaximumConnectionsPerHostInDownload: Int,
Expand All @@ -44,7 +42,6 @@ public struct NKSession: Sendable {
self.password = password
self.account = account
self.userAgent = userAgent
self.nextcloudVersion = nextcloudVersion
self.groupIdentifier = groupIdentifier
self.httpMaximumConnectionsPerHost = httpMaximumConnectionsPerHost
self.httpMaximumConnectionsPerHostInDownload = httpMaximumConnectionsPerHostInDownload
Expand Down
39 changes: 0 additions & 39 deletions Sources/NextcloudKit/NextcloudKit+API.swift
Original file line number Diff line number Diff line change
Expand Up @@ -610,45 +610,6 @@ public extension NextcloudKit {
}
// MARK: -

func getCapabilities(account: String,
options: NKRequestOptions = NKRequestOptions(),
taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in },
completion: @escaping (_ account: String, _ responseData: AFDataResponse<Data>?, _ error: NKError) -> Void) {
let endpoint = "ocs/v1.php/cloud/capabilities"
guard let nkSession = nkCommonInstance.getSession(account: account),
let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint, options: options),
let headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else {
return options.queue.async { completion(account, nil, .urlError) }
}

nkSession.sessionData.request(url, method: .get, encoding: URLEncoding.default, headers: headers, interceptor: NKInterceptor(nkCommonInstance: nkCommonInstance)).validate(statusCode: 200..<300).onURLSessionTaskCreation { task in
task.taskDescription = options.taskDescription
taskHandler(task)
}.responseData(queue: self.nkCommonInstance.backgroundQueue) { response in
switch response.result {
case .failure(let error):
let error = NKError(error: error, afResponse: response, responseData: response.data)
options.queue.async { completion(account, response, error) }
case .success:
options.queue.async { completion(account, response, .success) }
}
}
}

func getCapabilitiesAsync(account: String,
options: NKRequestOptions = NKRequestOptions(),
taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }) async -> (account: String, responseData: AFDataResponse<Data>?, error: NKError) {
await withUnsafeContinuation { continuation in
getCapabilities(account: account,
options: options,
taskHandler: taskHandler) { account, responseData, error in
continuation.resume(returning: (account, responseData, error))
}
}
}

// MARK: -

func getRemoteWipeStatus(serverUrl: String,
token: String,
account: String,
Expand Down
Loading
Loading