Privacy: IS Settings: Manage invalid IS

This commit is contained in:
manuroe
2019-09-26 09:28:34 +02:00
parent d6c9a09b0a
commit d8ca3950d9
5 changed files with 44 additions and 15 deletions
@@ -244,6 +244,13 @@ final class SettingsIdentityServerViewController: UIViewController {
cancelButtonTitle: VectorL10n.cancel,
onContinue: onContinue)
case .addActionAlert(.invalidIdentityServer(let newHost)):
self.showAlert(title: nil,
message: VectorL10n.identityServerSettingsAlertErrorInvalidIdentityServer(newHost),
continueButtonTitle: nil,
cancelButtonTitle: VectorL10n.cancel,
onContinue: onContinue)
case .disconnectActionAlert(.stillSharing3Pids(let oldHost)):
self.showAlert(title: VectorL10n.identityServerSettingsAlertDisconnectTitle,
message: VectorL10n.identityServerSettingsAlertDisconnectStillSharing3pid(oldHost.hostname()),
@@ -313,9 +320,9 @@ final class SettingsIdentityServerViewController: UIViewController {
switch displayMode {
case .noIdentityServer:
viewAction = .add(identityServer: identityServer)
viewAction = .add(identityServer: identityServer.makeURLValid())
case .identityServer:
viewAction = .change(identityServer: identityServer)
viewAction = .change(identityServer: identityServer.makeURLValid())
}
if let viewAction = viewAction {
@@ -339,12 +346,8 @@ extension SettingsIdentityServerViewController: SettingsIdentityServerViewModelV
}
}
fileprivate extension String {
func hostname() -> String {
return URL(string: self)?.host ?? self
}
}
// MARK: - ServiceTermsModalCoordinatorBridgePresenterDelegate
extension SettingsIdentityServerViewController: ServiceTermsModalCoordinatorBridgePresenterDelegate {
func serviceTermsModalCoordinatorBridgePresenterDelegateDidAccept(_ coordinatorBridgePresenter: ServiceTermsModalCoordinatorBridgePresenter) {
self.hideTerms(accepted: true)
@@ -354,3 +357,19 @@ extension SettingsIdentityServerViewController: ServiceTermsModalCoordinatorBrid
self.hideTerms(accepted: false)
}
}
// MARK: - Private extension
fileprivate extension String {
func hostname() -> String {
return URL(string: self)?.host ?? self
}
func makeURLValid() -> String {
if self.hasPrefix("http://") || self.hasPrefix("https://") {
return self
} else {
return "https://" + self
}
}
}
@@ -87,8 +87,7 @@ final class SettingsIdentityServerViewModel: SettingsIdentityServerViewModelType
switch identityServerValidity {
case .invalid:
// Present invalid IS alert
// TODO but how to detect it?
break
self.update(viewState: .alert(alert: SettingsIdentityServerAlert.addActionAlert(.invalidIdentityServer(newHost: newIdentityServer)), onContinue: {}))
case .valid(status: let termsStatus):
switch termsStatus {
case .noTerms:
@@ -280,7 +279,17 @@ final class SettingsIdentityServerViewModel: SettingsIdentityServerViewModelType
self.serviceTerms = serviceTerms
case .failure(let error):
completion(.failure(error))
guard let nsError = error as NSError? else {
completion(.failure(error))
return
}
if nsError.domain == MXIdentityServerRestClientErrorDomain
|| (nsError.domain == NSURLErrorDomain && nsError.code == NSURLErrorCannotFindHost) {
completion(.success(.invalid))
} else {
completion(.failure(error))
}
}
}
@@ -40,6 +40,7 @@ enum SettingsIdentityServerAlert {
enum AddActionAlert {
case noTerms(newHost: String)
case termsNotAccepted(newHost: String)
case invalidIdentityServer(newHost: String)
}
// enum ChangeActionAlert {