From 0d16017f4368d0f2607ebb28db816614f377c3af Mon Sep 17 00:00:00 2001 From: SBiOSoftWhare Date: Tue, 27 Oct 2020 10:16:39 +0100 Subject: [PATCH] Add Jitsi Well Known codable representation. --- .../Jitsi/JitsiAuthenticationType.swift | 47 ++++++++++++ .../Widgets/Jitsi/JitsiWellKnown.swift | 41 ++++++++++ RiotTests/JitsiWellKnownTests.swift | 76 +++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 Riot/Modules/Integrations/Widgets/Jitsi/JitsiAuthenticationType.swift create mode 100644 Riot/Modules/Integrations/Widgets/Jitsi/JitsiWellKnown.swift create mode 100644 RiotTests/JitsiWellKnownTests.swift diff --git a/Riot/Modules/Integrations/Widgets/Jitsi/JitsiAuthenticationType.swift b/Riot/Modules/Integrations/Widgets/Jitsi/JitsiAuthenticationType.swift new file mode 100644 index 000000000..d7248afb2 --- /dev/null +++ b/Riot/Modules/Integrations/Widgets/Jitsi/JitsiAuthenticationType.swift @@ -0,0 +1,47 @@ +// +// Copyright 2020 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +/// `JitsiAuthenticationType` represents authentification type supported by a Jitsi server +enum JitsiAuthenticationType: Equatable { + case openIDTokenJWT + case other(String) + + private enum KnownAuthenticationType: String { + case openIDTokenJWT = "openidtoken-jwt" + } + + var identifier: String { + switch self { + case .openIDTokenJWT: + return KnownAuthenticationType.openIDTokenJWT.rawValue + case .other(let authentificationString): + return authentificationString + } + } +} + +extension JitsiAuthenticationType { + init(_ value: String) { + switch value { + case KnownAuthenticationType.openIDTokenJWT.rawValue: + self = .openIDTokenJWT + default: + self = .other(value) + } + } +} diff --git a/Riot/Modules/Integrations/Widgets/Jitsi/JitsiWellKnown.swift b/Riot/Modules/Integrations/Widgets/Jitsi/JitsiWellKnown.swift new file mode 100644 index 000000000..4214b7c14 --- /dev/null +++ b/Riot/Modules/Integrations/Widgets/Jitsi/JitsiWellKnown.swift @@ -0,0 +1,41 @@ +// +// Copyright 2020 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import Foundation + +/// `JitsiWellKnown` represents configuration specific to a Jitsi domain +struct JitsiWellKnown { + let authenticationType: JitsiAuthenticationType? +} + +// MARK: Decodable +extension JitsiWellKnown: Decodable { + /// JSON keys associated to VectorWellKnown properties + enum CodingKeys: String, CodingKey { + case authenticationType = "auth" + } + + init(from decoder: Decoder) throws { + + let container = try decoder.container(keyedBy: CodingKeys.self) + + if let authenticationTypeString = try container.decodeIfPresent(String.self, forKey: .authenticationType) { + self.authenticationType = JitsiAuthenticationType(authenticationTypeString) + } else { + self.authenticationType = nil + } + } +} diff --git a/RiotTests/JitsiWellKnownTests.swift b/RiotTests/JitsiWellKnownTests.swift new file mode 100644 index 000000000..1d32effa3 --- /dev/null +++ b/RiotTests/JitsiWellKnownTests.swift @@ -0,0 +1,76 @@ +// +// Copyright 2020 New Vector Ltd +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +import XCTest + +@testable import Riot + +class JitsiWellKnownTests: XCTestCase { + + override func setUpWithError() throws { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDownWithError() throws { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + // MARK: - Tests + + func testJitsiWellKnownParsingKnownValue() { + + let wellKnownDictionary: [String: Any] = [ + "auth": "openidtoken-jwt" + ] + + let serializationService = SerializationService() + + do { + let jitsiWellKnown: JitsiWellKnown = try serializationService.deserialize(wellKnownDictionary) + + let jistiAuthenticationType = jitsiWellKnown.authenticationType + + XCTAssertNotNil(jistiAuthenticationType) + + XCTAssertEqual(jistiAuthenticationType, .openIDTokenJWT) + } catch { + XCTFail("Fail with error: \(error)") + } + } + + func testJitsiWellKnownParsingUnknownValue() { + + let expectedAuthenticationTypeString = "other-authentication" + + let wellKnownDictionary: [String: Any] = [ + "auth": expectedAuthenticationTypeString + ] + + let serializationService = SerializationService() + + do { + let jitsiWellKnown: JitsiWellKnown = try serializationService.deserialize(wellKnownDictionary) + + let jistiAuthenticationType = jitsiWellKnown.authenticationType + + XCTAssertNotNil(jistiAuthenticationType) + + XCTAssertEqual(jistiAuthenticationType, .other(expectedAuthenticationTypeString)) + } catch { + XCTFail("Fail with error: \(error)") + } + } +}