Skip to content

Commit

Permalink
Feat: add a build setting flag to always show the server selection sc…
Browse files Browse the repository at this point in the history
…reen in login/registration flow.
  • Loading branch information
nimau committed May 10, 2023
1 parent ef4d85d commit a23a168
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 4 deletions.
3 changes: 3 additions & 0 deletions Config/BuildSettings.swift
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,9 @@ final class BuildSettings: NSObject {
static let serverConfigDefaultHomeserverUrlString = "https://matrix.org"
static let serverConfigDefaultIdentityServerUrlString = "https://vector.im"

// Force the user to set a homeserver instead of using the default one
static let forceHomeserverSelection = false

static let serverConfigSygnalAPIUrlString = "https://matrix.org/_matrix/push/v1/notify"


Expand Down
7 changes: 7 additions & 0 deletions Riot/Modules/Authentication/AuthenticationCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,13 @@ final class AuthenticationCoordinator: NSObject, AuthenticationCoordinatorProtoc
}

let flow: AuthenticationFlow = initialScreen == .login ? .login : .register

// Check if the user must select a server
if BuildSettings.forceHomeserverSelection && authenticationService.state.homeserver.addressFromUser == nil {
showServerSelectionScreen(for: flow)
return
}

do {
// Start the flow using the default server (or a provisioning link if set).
try await authenticationService.startFlow(flow)
Expand Down
18 changes: 16 additions & 2 deletions Riot/Modules/Authentication/Legacy/AuthenticationViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,14 @@ - (void)viewDidLoad
target:self
action:@selector(onButtonPressed:)];

self.defaultHomeServerUrl = RiotSettings.shared.homeserverUrlString;
if (BuildSettings.forceHomeserverSelection)
{
self.defaultHomeServerUrl = nil;
}
else
{
self.defaultHomeServerUrl = RiotSettings.shared.homeserverUrlString;
}

self.defaultIdentityServerUrl = RiotSettings.shared.identityServerUrlString;

Expand Down Expand Up @@ -1207,7 +1214,14 @@ - (void)setCustomServerFieldsVisible:(BOOL)isVisible
[self saveCustomServerInputs];

// Restore default configuration
[self setHomeServerTextFieldText:self.defaultHomeServerUrl];
if (BuildSettings.forceHomeserverSelection)
{
[self setHomeServerTextFieldText:nil];
}
else
{
[self setHomeServerTextFieldText:self.defaultHomeServerUrl];
}
[self setIdentityServerTextFieldText:self.defaultIdentityServerUrl];

[self.customServersTickButton setImage:AssetImages.selectionUntick.image forState:UIControlStateNormal];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ class HomeserverAddress: NSObject {
/// - Ensure the address contains a scheme, otherwise make it `https`.
/// - Remove any trailing slashes.
static func sanitized(_ address: String) -> String {
guard !address.isEmpty else {
// prevent prefixing an empty string with "https:"
return address
}
var address = address.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()

if !address.contains("://") {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ class AuthenticationService: NSObject {
/// - homeserverAddress: The homeserver to start the flow for, or `nil` to use the default.
/// If a provisioning link has been set, it will override the default homeserver when passing `nil`.
func startFlow(_ flow: AuthenticationFlow, for homeserverAddress: String? = nil) async throws {
let address = homeserverAddress ?? provisioningLink?.homeserverUrl ?? BuildSettings.serverConfigDefaultHomeserverUrlString
let address = homeserverAddress ?? provisioningLink?.homeserverUrl ?? state.homeserver.addressFromUser ?? BuildSettings.serverConfigDefaultHomeserverUrlString

var (client, homeserver) = try await loginFlow(for: address)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,13 @@ final class AuthenticationServerSelectionCoordinator: Coordinator, Presentable {
self.parameters = parameters

let homeserver = parameters.authenticationService.state.homeserver
let viewModel = AuthenticationServerSelectionViewModel(homeserverAddress: homeserver.displayableAddress,
let homeserverAddress: String
if BuildSettings.forceHomeserverSelection, homeserver.addressFromUser == nil {
homeserverAddress = ""
} else {
homeserverAddress = homeserver.displayableAddress
}
let viewModel = AuthenticationServerSelectionViewModel(homeserverAddress: homeserverAddress,
flow: parameters.authenticationService.state.flow,
hasModalPresentation: parameters.hasModalPresentation)
let view = AuthenticationServerSelectionScreen(viewModel: viewModel.context)
Expand Down

0 comments on commit a23a168

Please sign in to comment.