@@ -78,6 +78,7 @@ class NewLoginViewModel(
7878 defaultServerConfig : ServerConfig .Links ,
7979 defaultSSOCodeConfig : String ,
8080 private val recoverableLogoutExceptionDetector : NewLoginRecoverableLogoutExceptionDetector ,
81+ private val sharedAuthNewLoginAdapter : SharedAuthNewLoginAdapter = LegacySharedAuthNewLoginAdapter ,
8182) : ActionsViewModel<NewLoginAction>() {
8283
8384 private val preFilledUserIdentifier: PreFilledUserIdentifierType = loginNavArgs.userHandle ? : PreFilledUserIdentifierType .None
@@ -146,6 +147,7 @@ class NewLoginViewModel(
146147 viewModelScope.launch(dispatchers.io()) {
147148 updateLoginFlowState(NewLoginFlowState .Loading )
148149 val sanitizedInput = userIdentifierTextState.text.trim().toString()
150+ if (tryStartSharedAuthLogin(sanitizedInput)) return @launch
149151 when (validateEmailOrSSOCode(sanitizedInput)) {
150152 ValidateEmailOrSSOCodeUseCase .Result .InvalidInput -> {
151153 updateLoginFlowState(NewLoginFlowState .Error .TextFieldError .InvalidValue )
@@ -163,6 +165,43 @@ class NewLoginViewModel(
163165 }
164166 }
165167
168+ private suspend fun tryStartSharedAuthLogin (userIdentifier : String ): Boolean =
169+ sharedAuthNewLoginAdapter.tryStartLogin(
170+ request = SharedAuthNewLoginRequest (
171+ userIdentifier = userIdentifier,
172+ serverConfig = serverConfig,
173+ customServerConfig = loginNavArgs.loginPasswordPath?.customServerConfig,
174+ ),
175+ callbacks = object : SharedAuthNewLoginCallbacks {
176+ override suspend fun showInvalidInput () {
177+ updateLoginFlowState(NewLoginFlowState .Error .TextFieldError .InvalidValue )
178+ }
179+
180+ override suspend fun showGenericError (failure : CoreFailure ) {
181+ updateLoginFlowState(NewLoginFlowState .Error .DialogError .GenericError (failure))
182+ }
183+
184+ override suspend fun showCustomServerDialog (serverLinks : ServerConfig .Links ) {
185+ updateLoginFlowState(NewLoginFlowState .CustomConfigDialog (serverLinks))
186+ }
187+
188+ override suspend fun openEmailPassword (userIdentifier : String , loginPasswordPath : LoginPasswordPath ) {
189+ sendAction(NewLoginAction .EmailPassword (userIdentifier, loginPasswordPath))
190+ updateLoginFlowState(NewLoginFlowState .Default )
191+ }
192+
193+ override suspend fun openSso (url : String , config : SSOUrlConfig ) {
194+ sendAction(NewLoginAction .SSO (url, config))
195+ updateLoginFlowState(NewLoginFlowState .Default )
196+ }
197+
198+ override suspend fun openEnterpriseLoginNotSupported (userIdentifier : String ) {
199+ sendAction(NewLoginAction .EnterpriseLoginNotSupported (userIdentifier))
200+ updateLoginFlowState(NewLoginFlowState .Default )
201+ }
202+ }
203+ )
204+
166205 @VisibleForTesting
167206 internal suspend fun getEnterpriseLoginFlow (email : String ) = withContext(dispatchers.io()) {
168207 ssoExtension.withAuthenticationScope(
0 commit comments