mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-20 00:24:43 +02:00
chore: FOSS Merge 1.27.11 (MESSENGER-7276)
Merge commit 'af0b6d4be985d9f26e5111d3fa01389c7321949f' into feature/7276_FOSS_Merge_1_27_11 # Conflicts: # Config/AppVersion.xcconfig # Gemfile.lock # IDETemplateMacros.plist # Podfile # Podfile.lock # README.md # Riot/Modules/Authentication/AuthenticationCoordinator.swift # Riot/Modules/Room/CellData/RoomBubbleCellData.m # Riot/target.yml # RiotNSE/NotificationService.swift # RiotSwiftUI/Modules/Authentication/ServerSelection/AuthenticationServerSelectionModels.swift # RiotSwiftUI/Modules/Authentication/ServerSelection/AuthenticationServerSelectionViewModel.swift # RiotSwiftUI/Modules/Authentication/ServerSelection/Coordinator/AuthenticationServerSelectionCoordinator.swift # RiotSwiftUI/Modules/Authentication/ServerSelection/View/AuthenticationServerSelectionScreen.swift # RiotSwiftUI/Modules/Room/CompletionSuggestion/Service/CompletionSuggestionService.swift # fastlane/Fastfile
This commit is contained in:
+2
-2
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
+13
-5
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2021-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
@@ -149,8 +149,13 @@ class AuthenticationService: NSObject {
|
||||
self.registrationWizard = registrationWizard
|
||||
} catch {
|
||||
guard homeserver.preferredLoginMode.hasSSO, error as? RegistrationError == .registrationDisabled else {
|
||||
throw error
|
||||
if homeserver.preferredLoginMode.providesDelegatedOIDCCompatibility {
|
||||
throw RegistrationError.delegatedOIDCRequiresReplacementApp
|
||||
} else {
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
// Continue without throwing when registration is disabled but SSO is available.
|
||||
}
|
||||
}
|
||||
@@ -306,10 +311,13 @@ class AuthenticationService: NSObject {
|
||||
// Get the login flow
|
||||
let loginFlowResponse = try await client.getLoginSession()
|
||||
|
||||
let identityProviders = loginFlowResponse.flows?.compactMap { $0 as? MXLoginSSOFlow }.first?.identityProviders ?? []
|
||||
let firstSSOFlow = loginFlowResponse.flows?.compactMap { $0 as? MXLoginSSOFlow }.first
|
||||
let identityProviders = firstSSOFlow?.identityProviders ?? []
|
||||
let providesDelegatedOIDCCompatibility = firstSSOFlow?.delegatedOIDCCompatibility ?? false
|
||||
return LoginFlowResult(supportedLoginTypes: loginFlowResponse.flows?.compactMap { $0 } ?? [],
|
||||
ssoIdentityProviders: identityProviders.sorted { $0.name < $1.name }.map(\.ssoIdentityProvider),
|
||||
homeserverAddress: client.homeserver)
|
||||
homeserverAddress: client.homeserver,
|
||||
providesDelegatedOIDCCompatibility: providesDelegatedOIDCCompatibility)
|
||||
}
|
||||
|
||||
/// Perform a well-known request on the specified homeserver URL.
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
@@ -12,13 +12,15 @@ struct LoginFlowResult {
|
||||
let supportedLoginTypes: [MXLoginFlow]
|
||||
let ssoIdentityProviders: [SSOIdentityProvider]
|
||||
let homeserverAddress: String
|
||||
let providesDelegatedOIDCCompatibility: Bool
|
||||
|
||||
var loginMode: LoginMode {
|
||||
if supportedLoginTypes.contains(where: { $0.type == kMXLoginFlowTypeSSO }),
|
||||
supportedLoginTypes.contains(where: { $0.type == kMXLoginFlowTypePassword }) {
|
||||
supportedLoginTypes.contains(where: { $0.type == kMXLoginFlowTypePassword }),
|
||||
!providesDelegatedOIDCCompatibility {
|
||||
return .ssoAndPassword(ssoIdentityProviders: ssoIdentityProviders)
|
||||
} else if supportedLoginTypes.contains(where: { $0.type == kMXLoginFlowTypeSSO }) {
|
||||
return .sso(ssoIdentityProviders: ssoIdentityProviders)
|
||||
return .sso(ssoIdentityProviders: ssoIdentityProviders, providesDelegatedOIDCCompatibility: providesDelegatedOIDCCompatibility)
|
||||
} else if supportedLoginTypes.contains(where: { $0.type == kMXLoginFlowTypePassword }) {
|
||||
return .password
|
||||
} else {
|
||||
@@ -34,7 +36,7 @@ enum LoginMode {
|
||||
/// The homeserver supports login with a password.
|
||||
case password
|
||||
/// The homeserver supports login via one or more SSO providers.
|
||||
case sso(ssoIdentityProviders: [SSOIdentityProvider])
|
||||
case sso(ssoIdentityProviders: [SSOIdentityProvider], providesDelegatedOIDCCompatibility: Bool)
|
||||
/// The homeserver supports login with either a password or via an SSO provider.
|
||||
case ssoAndPassword(ssoIdentityProviders: [SSOIdentityProvider])
|
||||
/// The homeserver only allows login with unsupported mechanisms. Use fallback instead.
|
||||
@@ -42,7 +44,7 @@ enum LoginMode {
|
||||
|
||||
var ssoIdentityProviders: [SSOIdentityProvider]? {
|
||||
switch self {
|
||||
case .sso(let ssoIdentityProviders), .ssoAndPassword(let ssoIdentityProviders):
|
||||
case .sso(let ssoIdentityProviders, _), .ssoAndPassword(let ssoIdentityProviders):
|
||||
// Provide a backup for homeservers that support SSO but don't offer any identity providers
|
||||
// https://spec.matrix.org/latest/client-server-api/#client-login-via-sso
|
||||
return ssoIdentityProviders.count > 0 ? ssoIdentityProviders : [SSOIdentityProvider(id: "", name: "SSO", brand: nil, iconURL: nil)]
|
||||
@@ -60,6 +62,15 @@ enum LoginMode {
|
||||
}
|
||||
}
|
||||
|
||||
var providesDelegatedOIDCCompatibility: Bool {
|
||||
switch self {
|
||||
case .sso(_, providesDelegatedOIDCCompatibility: true):
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
var supportsPasswordFlow: Bool {
|
||||
switch self {
|
||||
case .password, .ssoAndPassword:
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
//
|
||||
// Copyright 2022-2024 New Vector Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
// Please see LICENSE in the repository root for full details.
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
Reference in New Issue
Block a user