Continue with no auth if well known is not provided, fixes #4040

This commit is contained in:
ismailgulek
2021-04-07 14:14:04 +03:00
parent 9e0b574040
commit f8ca68329d
@@ -22,9 +22,14 @@ import JitsiMeetSDK
enum JitsiServiceError: Error {
case widgetContentCreationFailed
case emptyResponse
case noWellKnown
case unknown
}
private enum HTTPStatusCodes {
static let notFound: Int = 404
}
/// JitsiService enables to abstract and configure Jitsi Meet SDK
@objcMembers
final class JitsiService: NSObject {
@@ -120,6 +125,11 @@ final class JitsiService: NSObject {
completion(.failure(error))
}
}, failure: { (error) in
if let urlResponse = MXHTTPOperation.urlResponse(fromError: error),
urlResponse.statusCode == HTTPStatusCodes.notFound {
completion(.failure(JitsiServiceError.noWellKnown))
return
}
completion(.failure(error ?? JitsiServiceError.unknown))
})
}
@@ -127,20 +137,37 @@ final class JitsiService: NSObject {
/// Create Jitsi widget content
@discardableResult
func createJitsiWidgetContent(jitsiServerURL: URL, roomID: String, isAudioOnly: Bool, success: @escaping ([String: Any]) -> Void, failure: @escaping ((Error) -> Void)) -> MXHTTPOperation? {
guard let serverDomain = jitsiServerURL.host else {
failure(JitsiServiceError.widgetContentCreationFailed)
return nil
}
return self.getWellKnown(for: jitsiServerURL) { (result) in
var continueOperation: Bool = false
var authType: JitsiAuthenticationType?
switch result {
case .success(let jitsiWellKnown):
if let serverDomain = jitsiServerURL.host, let widgetContent = self.createJitsiWidgetContent(serverDomain: serverDomain,
authenticationType: jitsiWellKnown.authenticationType,
roomID: roomID,
isAudioOnly: isAudioOnly) {
success(widgetContent)
} else {
failure(JitsiServiceError.widgetContentCreationFailed)
}
authType = jitsiWellKnown.authenticationType
continueOperation = true
case .failure(let error):
NSLog("[JitsiService] Fail to get Jitsi Well Known with error: \(error)")
failure(error)
if let error = error as? JitsiServiceError, error == .noWellKnown {
// no well-known, continue with no auth
continueOperation = true
} else {
failure(error)
}
}
if continueOperation,
let widgetContent = self.createJitsiWidgetContent(serverDomain: serverDomain,
authenticationType: authType,
roomID: roomID,
isAudioOnly: isAudioOnly) {
success(widgetContent)
} else {
failure(JitsiServiceError.widgetContentCreationFailed)
}
}
}