This commit is contained in:
Hugh Nimmo-Smith 2023-01-06 18:14:14 +00:00
parent 7b3c3d0dbb
commit e375fa0e67
4 changed files with 13 additions and 5 deletions

View File

@ -57,7 +57,7 @@ data class WellKnown(
val integrations: JsonDict? = null, val integrations: JsonDict? = null,
/** /**
* For delegation of auth via OIDC as per [MSC2965](https://github.com/matrix-org/matrix-spec-proposals/pull/2965) * For delegation of auth via OIDC as per [MSC2965](https://github.com/matrix-org/matrix-spec-proposals/pull/2965).
*/ */
@Json(name = "org.matrix.msc2965.authentication") @Json(name = "org.matrix.msc2965.authentication")
val unstableDelegatedAuthConfig: DelegatedAuthConfig? = null, val unstableDelegatedAuthConfig: DelegatedAuthConfig? = null,

View File

@ -818,7 +818,10 @@ class LoginViewModel @AssistedInject constructor(
val loginMode = when { val loginMode = when {
// SSO login is taken first // SSO login is taken first
data.supportedLoginTypes.contains(LoginFlowTypes.SSO) && data.supportedLoginTypes.contains(LoginFlowTypes.SSO) &&
data.supportedLoginTypes.contains(LoginFlowTypes.PASSWORD) -> LoginMode.SsoAndPassword(data.ssoIdentityProviders.toSsoState(), data.hasOidcCompatibilityFlow) data.supportedLoginTypes.contains(LoginFlowTypes.PASSWORD) -> LoginMode.SsoAndPassword(
data.ssoIdentityProviders.toSsoState(),
data.hasOidcCompatibilityFlow
)
data.supportedLoginTypes.contains(LoginFlowTypes.SSO) -> LoginMode.Sso(data.ssoIdentityProviders.toSsoState(), data.hasOidcCompatibilityFlow) data.supportedLoginTypes.contains(LoginFlowTypes.SSO) -> LoginMode.Sso(data.ssoIdentityProviders.toSsoState(), data.hasOidcCompatibilityFlow)
data.supportedLoginTypes.contains(LoginFlowTypes.PASSWORD) -> LoginMode.Password data.supportedLoginTypes.contains(LoginFlowTypes.PASSWORD) -> LoginMode.Password
else -> LoginMode.Unsupported else -> LoginMode.Unsupported

View File

@ -78,7 +78,8 @@ class SocialLoginButtonsView @JvmOverloads constructor(context: Context, attrs:
transformationMethod = null transformationMethod = null
textAlignment = View.TEXT_ALIGNMENT_CENTER textAlignment = View.TEXT_ALIGNMENT_CENTER
}.let { }.let {
it.text = if (hasOidcCompatibilityFlow) context.getString(R.string.login_continue) else getButtonTitle(context.getString(R.string.login_social_sso)) it.text = if (hasOidcCompatibilityFlow) context.getString(R.string.login_continue)
else getButtonTitle(context.getString(R.string.login_social_sso))
it.textAlignment = View.TEXT_ALIGNMENT_CENTER it.textAlignment = View.TEXT_ALIGNMENT_CENTER
it.setOnClickListener { it.setOnClickListener {
listener?.onProviderSelected(null) listener?.onProviderSelected(null)
@ -175,6 +176,7 @@ fun SocialLoginButtonsView.render(loginMode: LoginMode, mode: SocialLoginButtons
SsoState.Fallback -> null SsoState.Fallback -> null
is SsoState.IdentityProviders -> state.providers.sorted() is SsoState.IdentityProviders -> state.providers.sorted()
} }
this.hasOidcCompatibilityFlow = (loginMode is LoginMode.Sso && loginMode.hasOidcCompatibilityFlow) || (loginMode is LoginMode.SsoAndPassword && loginMode.hasOidcCompatibilityFlow) this.hasOidcCompatibilityFlow = (loginMode is LoginMode.Sso && loginMode.hasOidcCompatibilityFlow)
|| (loginMode is LoginMode.SsoAndPassword && loginMode.hasOidcCompatibilityFlow)
this.listener = SocialLoginButtonsView.InteractionListener { listener(it) } this.listener = SocialLoginButtonsView.InteractionListener { listener(it) }
} }

View File

@ -53,7 +53,10 @@ class StartAuthenticationFlowUseCase @Inject constructor(
) )
private fun LoginFlowResult.findPreferredLoginMode() = when { private fun LoginFlowResult.findPreferredLoginMode() = when {
supportedLoginTypes.containsAllItems(LoginFlowTypes.SSO, LoginFlowTypes.PASSWORD) -> LoginMode.SsoAndPassword(ssoIdentityProviders.toSsoState(), hasOidcCompatibilityFlow) supportedLoginTypes.containsAllItems(LoginFlowTypes.SSO, LoginFlowTypes.PASSWORD) -> LoginMode.SsoAndPassword(
ssoIdentityProviders.toSsoState(),
hasOidcCompatibilityFlow
)
supportedLoginTypes.contains(LoginFlowTypes.SSO) -> LoginMode.Sso(ssoIdentityProviders.toSsoState(), hasOidcCompatibilityFlow) supportedLoginTypes.contains(LoginFlowTypes.SSO) -> LoginMode.Sso(ssoIdentityProviders.toSsoState(), hasOidcCompatibilityFlow)
supportedLoginTypes.contains(LoginFlowTypes.PASSWORD) -> LoginMode.Password supportedLoginTypes.contains(LoginFlowTypes.PASSWORD) -> LoginMode.Password
else -> LoginMode.Unsupported else -> LoginMode.Unsupported