diff --git a/Sources/RemoteSession.swift b/Sources/RemoteSession.swift
index 8013593..4e947ad 100644
--- a/Sources/RemoteSession.swift
+++ b/Sources/RemoteSession.swift
@@ -91,7 +91,7 @@ extension FileProviderHTTPError {
}
/// Defines HTTP Authentication method required to access
-internal enum HTTPAuthenticationType {
+public enum HTTPAuthenticationType {
/// Basic method for authentication
case basic
/// Digest method for authentication
diff --git a/Sources/WebDAVFileProvider.swift b/Sources/WebDAVFileProvider.swift
index 8230d16..c974412 100644
--- a/Sources/WebDAVFileProvider.swift
+++ b/Sources/WebDAVFileProvider.swift
@@ -33,6 +33,7 @@ open class WebDAVFileProvider: FileProviderBasicRemote {
}
public weak var delegate: FileProviderDelegate?
+ public var credentialType: HTTPAuthenticationType = .digest
open var credential: URLCredential? {
didSet {
sessionDelegate?.credential = credential
@@ -160,6 +161,7 @@ open class WebDAVFileProvider: FileProviderBasicRemote {
var request = URLRequest(url: url)
request.httpMethod = "PROPFIND"
request.setValue("1", forHTTPHeaderField: "Depth")
+ request.set(httpAuthentication: credential, with: credentialType)
request.set(contentType: .xml)
request.httpBody = "\n\n\(WebDavFileObject.propString(including))\n".data(using: .utf8)
request.setValue(String(request.httpBody!.count), forHTTPHeaderField: "Content-Length")
@@ -202,6 +204,7 @@ open class WebDAVFileProvider: FileProviderBasicRemote {
var request = URLRequest(url: url)
request.httpMethod = "PROPFIND"
request.setValue("1", forHTTPHeaderField: "Depth")
+ request.set(httpAuthentication: credential, with: credentialType)
request.set(contentType: .xml)
request.httpBody = "\n\n\(WebDavFileObject.propString(including))\n".data(using: .utf8)
request.setValue(String(request.httpBody!.count), forHTTPHeaderField: "Content-Length")
@@ -231,6 +234,7 @@ open class WebDAVFileProvider: FileProviderBasicRemote {
var request = URLRequest(url: baseURL)
request.httpMethod = "PROPFIND"
request.setValue("0", forHTTPHeaderField: "Depth")
+ request.set(httpAuthentication: credential, with: credentialType)
request.set(contentType: .xml)
request.httpBody = "\n\n\n".data(using: .utf8)
request.setValue(String(request.httpBody!.count), forHTTPHeaderField: "Content-Length")
@@ -253,6 +257,7 @@ open class WebDAVFileProvider: FileProviderBasicRemote {
var request = URLRequest(url: url)
request.httpMethod = "PROPFIND"
//request.setValue("1", forHTTPHeaderField: "Depth")
+ request.set(httpAuthentication: credential, with: credentialType)
request.set(contentType: .xml)
request.httpBody = "\n\n".data(using: .utf8)
runDataTask(with: request, completionHandler: { (data, response, error) in
@@ -284,6 +289,7 @@ open class WebDAVFileProvider: FileProviderBasicRemote {
var request = URLRequest(url: baseURL!)
request.httpMethod = "PROPFIND"
request.setValue("0", forHTTPHeaderField: "Depth")
+ request.set(httpAuthentication: credential, with: credentialType)
request.set(contentType: .xml)
request.httpBody = "\n\n\n".data(using: .utf8)
request.setValue(String(request.httpBody!.count), forHTTPHeaderField: "Content-Length")
@@ -306,6 +312,7 @@ extension WebDAVFileProvider: FileProviderOperations {
let url = self.url(of: atPath).appendingPathComponent(folderName.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? folderName, isDirectory: true)
var request = URLRequest(url: url)
request.httpMethod = "MKCOL"
+ request.set(httpAuthentication: credential, with: credentialType)
let task = session.dataTask(with: request, completionHandler: { (data, response, error) in
var responseError: FileProviderWebDavError?
if let code = (response as? HTTPURLResponse)?.statusCode , code >= 300, let rCode = FileProviderHTTPErrorCode(rawValue: code) {
@@ -364,6 +371,7 @@ extension WebDAVFileProvider: FileProviderOperations {
return nil
}
+ request.set(httpAuthentication: credential, with: credentialType)
if let overwrite = overwrite, !overwrite {
request.setValue("F", forHTTPHeaderField: "Overwrite")
}
@@ -412,6 +420,7 @@ extension WebDAVFileProvider: FileProviderOperations {
request.setValue("F", forHTTPHeaderField: "Overwrite")
}
request.httpMethod = "PUT"
+ request.set(httpAuthentication: credential, with: credentialType)
let task = session.uploadTask(with: request, fromFile: localFile)
completionHandlersForTasks[session.sessionDescription!]?[task.taskIdentifier] = { [weak self] error in
var responseError: FileProviderWebDavError?
@@ -434,7 +443,8 @@ extension WebDAVFileProvider: FileProviderOperations {
return nil
}
let url = self.url(of:path)
- let request = URLRequest(url: url)
+ var request = URLRequest(url: url)
+ request.set(httpAuthentication: credential, with: credentialType)
let task = session.downloadTask(with: request)
completionHandlersForTasks[session.sessionDescription!]?[task.taskIdentifier] = completionHandler
downloadCompletionHandlersForTasks[session.sessionDescription!]?[task.taskIdentifier] = { tempURL in
@@ -470,6 +480,7 @@ extension WebDAVFileProvider: FileProviderReadWrite {
let opType = FileOperationType.fetch(path: path)
let url = self.url(of: path)
var request = URLRequest(url: url)
+ request.set(httpAuthentication: credential, with: credentialType)
request.set(rangeWithOffset: offset, length: length)
let task = session.downloadTask(with: request)
@@ -508,6 +519,7 @@ extension WebDAVFileProvider: FileProviderReadWrite {
let url = atomically ? self.url(of: path).appendingPathExtension("tmp") : self.url(of: path)
var request = URLRequest(url: url)
request.httpMethod = "PUT"
+ request.set(httpAuthentication: credential, with: credentialType)
if !overwrite {
request.setValue("F", forHTTPHeaderField: "Overwrite")
}
@@ -563,6 +575,7 @@ extension WebDAVFileProvider: ExtendedFileProvider {
let url = URL(string: self.url(of: path).absoluteString + "?preview&size=\(dimension.width)x\(dimension.height)")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
+ request.set(httpAuthentication: credential, with: credentialType)
let task = session.dataTask(with: request, completionHandler: { (data, response, error) in
var responseError: FileProviderWebDavError?
if let code = (response as? HTTPURLResponse)?.statusCode , code >= 300, let rCode = FileProviderHTTPErrorCode(rawValue: code) {
@@ -598,7 +611,8 @@ extension WebDAVFileProvider: FileProviderSharing {
let url = self.url(of: path)
var request = URLRequest(url: url)
- request.httpMethod = "PROPPATCG"
+ request.httpMethod = "PROPPATCH"
+ request.set(httpAuthentication: credential, with: credentialType)
request.set(contentType: .xml)
let body = "\n\ntrue\n\n"
request.httpBody = body.data(using: .utf8)