diff --git a/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/FidoConfigurationRepository.kt b/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/FidoConfigurationRepository.kt index 1e783e40082..b07a573507a 100644 --- a/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/FidoConfigurationRepository.kt +++ b/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/FidoConfigurationRepository.kt @@ -2,9 +2,11 @@ package io.jans.chip.repository import android.content.Context import android.util.Log +import com.nimbusds.jwt.JWTClaimsSet import io.jans.chip.retrofit.ApiAdapter import io.jans.chip.utils.AppConfig import io.jans.chip.AppDatabase +import io.jans.chip.factories.DPoPProofFactory import io.jans.chip.model.OPConfiguration import io.jans.chip.model.fido.config.FidoConfiguration import io.jans.chip.model.fido.config.FidoConfigurationResponse @@ -13,19 +15,18 @@ import retrofit2.Response class FidoConfigurationRepository(context: Context) { private val TAG = "FidoConfigurationRepository" private val appDatabase = AppDatabase.getInstance(context); - private var fidoConfigurationResponse: FidoConfigurationResponse? = - FidoConfigurationResponse(null, null, null) + private var fidoConfiguration: FidoConfiguration = FidoConfiguration("", null, null, null, null, null) var obtainedContext: Context = context - suspend fun fetchFidoConfiguration(configurationUrl: String): FidoConfigurationResponse? { + private suspend fun fetchFidoConfiguration(configurationUrl: String): FidoConfiguration? { val issuer: String = configurationUrl.replace(AppConfig.FIDO_CONFIG_URL, "") Log.d(TAG, "Inside fetchFIDOConfiguration :: configurationUrl ::$configurationUrl") try { val opConfigurationList: List = appDatabase.opConfigurationDao().getAll() if (opConfigurationList.isEmpty()) { - fidoConfigurationResponse?.isSuccessful = false - fidoConfigurationResponse?.errorMessage = "OpenID configuration not found in database." - return fidoConfigurationResponse + fidoConfiguration.isSuccessful = false + fidoConfiguration.errorMessage = "OpenID configuration not found in database." + return fidoConfiguration } val opConfiguration: OPConfiguration = opConfigurationList[0] @@ -33,55 +34,58 @@ class FidoConfigurationRepository(context: Context) { ApiAdapter.getInstance(issuer).getFidoConfiguration(configurationUrl) if (response.code() != 200) { - fidoConfigurationResponse?.isSuccessful = false - fidoConfigurationResponse?.errorMessage = + fidoConfiguration.isSuccessful = false + fidoConfiguration.errorMessage = "Error in fetching FIDO Configuration. Error message: ${response.message()}" - return fidoConfigurationResponse + return fidoConfiguration } - fidoConfigurationResponse = response.body() + val fidoConfigurationResponse: FidoConfigurationResponse? = response.body() if (!response.isSuccessful || fidoConfigurationResponse == null) { - fidoConfigurationResponse?.isSuccessful = false - fidoConfigurationResponse?.errorMessage = + fidoConfiguration.isSuccessful = false + fidoConfiguration.errorMessage = "Error in fetching FIDO Configuration. Error message: ${response.message()}" - return fidoConfigurationResponse + return fidoConfiguration } - fidoConfigurationResponse?.isSuccessful = true - val fidoConfigDB = FidoConfiguration( + fidoConfiguration = FidoConfiguration( AppConfig.DEFAULT_S_NO, - fidoConfigurationResponse?.issuer, - fidoConfigurationResponse?.attestation?.optionsEndpoint, - fidoConfigurationResponse?.attestation?.resultEndpoint, - fidoConfigurationResponse?.assertion?.optionsEndpoint, - fidoConfigurationResponse?.assertion?.resultEndpoint + fidoConfigurationResponse.issuer, + fidoConfigurationResponse.attestation?.optionsEndpoint, + fidoConfigurationResponse.attestation?.resultEndpoint, + fidoConfigurationResponse.assertion?.optionsEndpoint, + fidoConfigurationResponse.assertion?.resultEndpoint ) - + fidoConfiguration.isSuccessful = true Log.d( TAG, - "Inside fetchOPConfiguration :: opConfiguration :: ${fidoConfigurationResponse?.issuer}" + "Inside fetchOPConfiguration :: ${fidoConfigurationResponse.issuer}" ) appDatabase.fidoConfigurationDao().deleteAll() - appDatabase.fidoConfigurationDao().insert(fidoConfigDB) + appDatabase.fidoConfigurationDao().insert(fidoConfiguration) opConfiguration.fidoUrl = configurationUrl appDatabase.opConfigurationDao().update(opConfiguration) - return fidoConfigurationResponse + return fidoConfiguration } catch (e: Exception) { Log.e(TAG, "Error in fetching OP Configuration. ${e.message}".trimIndent()) - fidoConfigurationResponse?.isSuccessful = false - fidoConfigurationResponse?.errorMessage = + fidoConfiguration.isSuccessful = false + fidoConfiguration.errorMessage = "Error in fetching FIDO Configuration. Error message: ${e.message}" - return fidoConfigurationResponse + return fidoConfiguration } } - suspend fun getFidoConfigInDatabase(): FidoConfiguration? { - val fidoConfigurationList: List = appDatabase.fidoConfigurationDao() - .getAll() + suspend fun getFidoConfig(): FidoConfiguration? { + val fidoConfigurationList: List = appDatabase.fidoConfigurationDao().getAll() var fidoConfiguration: FidoConfiguration? = null - if(fidoConfigurationList.isNotEmpty()) { - fidoConfiguration = fidoConfigurationList.let { it -> it[0] } + if(!fidoConfigurationList.isNullOrEmpty()) { + fidoConfiguration = fidoConfigurationList[0] + fidoConfiguration.isSuccessful = true + return fidoConfiguration } + val jwtClaimsSet: JWTClaimsSet = DPoPProofFactory.getClaimsFromSSA() + val issuer: String = jwtClaimsSet.getClaim("iss").toString() + fidoConfiguration = fetchFidoConfiguration(issuer + AppConfig.FIDO_CONFIG_URL) return fidoConfiguration } diff --git a/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/LoginResponseRepository.kt b/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/LoginResponseRepository.kt index 1c8dfe834be..983ed1bda0a 100644 --- a/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/LoginResponseRepository.kt +++ b/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/LoginResponseRepository.kt @@ -15,7 +15,7 @@ class LoginResponseRepository(context: Context) { private val appDatabase = AppDatabase.getInstance(context); var obtainedContext: Context = context private var loginResponse: LoginResponse? = LoginResponse(null) - suspend fun processlogin( + suspend fun processLogin( usernameText: String, passwordText: String?, authMethod: String, diff --git a/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/OPConfigurationRepository.kt b/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/OPConfigurationRepository.kt index 349f108e5c4..5d7e340c04c 100644 --- a/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/OPConfigurationRepository.kt +++ b/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/OPConfigurationRepository.kt @@ -2,10 +2,13 @@ package io.jans.chip.repository import android.content.Context import android.util.Log +import com.nimbusds.jwt.JWTClaimsSet import io.jans.chip.model.OPConfiguration import io.jans.chip.retrofit.ApiAdapter import io.jans.chip.utils.AppConfig import io.jans.chip.AppDatabase +import io.jans.chip.factories.DPoPProofFactory +import io.jans.chip.model.OIDCClient import retrofit2.Response class OPConfigurationRepository (context: Context){ @@ -13,10 +16,10 @@ class OPConfigurationRepository (context: Context){ private val appDatabase = AppDatabase.getInstance(context); private var opConfiguration: OPConfiguration? = OPConfiguration("", null, null, null, null, null, null) - suspend fun fetchOPConfiguration(configurationUrl: String): OPConfiguration? { + private suspend fun fetchOPConfiguration(configurationUrl: String): OPConfiguration? { try { val issuer: String = configurationUrl.replace(AppConfig.OP_CONFIG_URL, "") - var response: Response = + val response: Response = ApiAdapter.getInstance(issuer).getOPConfiguration(configurationUrl) if (response.code() != 200) { opConfiguration?.isSuccessful = false @@ -57,12 +60,17 @@ class OPConfigurationRepository (context: Context){ return false } - suspend fun getOPConfigurationInDatabase(): OPConfiguration? { - var opConfigurations: List? = appDatabase.opConfigurationDao().getAll() + suspend fun getOPConfiguration(): OPConfiguration? { + val opConfigurations: List? = appDatabase.opConfigurationDao().getAll() var opConfiguration: OPConfiguration? = null - if(opConfigurations != null && !opConfigurations.isEmpty()) { - opConfiguration = opConfigurations?.let { it -> it.get(0) } + if(!opConfigurations.isNullOrEmpty()) { + opConfiguration = opConfigurations[0] + opConfiguration.isSuccessful = true + return opConfiguration } + val jwtClaimsSet: JWTClaimsSet = DPoPProofFactory.getClaimsFromSSA() + val issuer: String = jwtClaimsSet.getClaim("iss").toString() + opConfiguration = fetchOPConfiguration(issuer + AppConfig.OP_CONFIG_URL) return opConfiguration } diff --git a/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/PlayIntegrityRepository.kt b/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/PlayIntegrityRepository.kt index 5df44d66f8f..889fec69c7d 100644 --- a/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/PlayIntegrityRepository.kt +++ b/demos/jans-chip/android/app/src/main/java/io/jans/chip/repository/PlayIntegrityRepository.kt @@ -231,8 +231,8 @@ class PlayIntegrityRepository(context: Context) { suspend fun getAppIntegrityEntityInDatabase(): AppIntegrityEntity? { var appIntegrityEntities: List? = appDatabase.appIntegrityDao().getAll() var appIntegrityEntity: AppIntegrityEntity? = null - if(appIntegrityEntities != null && !appIntegrityEntities.isEmpty()) { - appIntegrityEntity = appIntegrityEntities?.let { it -> it.get(0) } + if(!appIntegrityEntities.isNullOrEmpty()) { + appIntegrityEntity = appIntegrityEntities[0] } return appIntegrityEntity } diff --git a/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/dashboard/DashboardScreen.kt b/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/dashboard/DashboardScreen.kt index bbe1f7b32c4..86e31428feb 100644 --- a/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/dashboard/DashboardScreen.kt +++ b/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/dashboard/DashboardScreen.kt @@ -58,8 +58,8 @@ fun DashboardScreen( verticalArrangement = Arrangement.Center, ) { - if (mainViewModel.clientRegistered && (mainViewModel.attestationOptionResponse || mainViewModel.assertionOptionResponse)) { - if (mainViewModel.userIsAuthenticated) { + if (mainViewModel.mainState.isClientRegistered && (mainViewModel.mainState.attestationResultSuccess || mainViewModel.mainState.assertionResultSuccess)) { + if (mainViewModel.mainState.isUserIsAuthenticated) { TitleText(text = stringResource(id = R.string.dashboard_title_welcome) + " " + mainViewModel.getUsername()) if (mainViewModel.getUserInfoResponse().response != null) { val userInfo = JSONObject(mainViewModel.getUserInfoResponse().response.toString()) diff --git a/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/unauthenticated/login/LoginScreen.kt b/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/unauthenticated/login/LoginScreen.kt index 572716bcd02..f44160a168a 100644 --- a/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/unauthenticated/login/LoginScreen.kt +++ b/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/unauthenticated/login/LoginScreen.kt @@ -213,7 +213,7 @@ fun LoginScreen( CoroutineScope(Dispatchers.Main).launch { loginState = loginState.copy(isLoading = true) val fidoConfiguration = - async { mainViewModel.fetchFidoConfiguration() }.await() + async { mainViewModel.getFIDOConfiguration() }.await() if (fidoConfiguration?.isSuccessful == false) { shouldShowDialog.value = true dialogContent.value = @@ -273,7 +273,7 @@ fun LoginScreen( val loginResponse: LoginResponse? = async { - mainViewModel.processlogin( + mainViewModel.processLogin( ele.userDisplayName, null, "authenticate", @@ -325,8 +325,8 @@ fun LoginScreen( return@launch } } - mainViewModel.assertionOptionResponse = - true + mainViewModel.mainState = mainViewModel.mainState.copy(assertionOptionSuccess = true) + mainViewModel.mainState = mainViewModel.mainState.copy(assertionResultSuccess = true) loginViewModel.onUiEvent( loginUiEvent = LoginUiEvent.Submit ) diff --git a/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/unauthenticated/registration/RegistrationScreen.kt b/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/unauthenticated/registration/RegistrationScreen.kt index 19cfcfe272f..5747ccf05cf 100644 --- a/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/unauthenticated/registration/RegistrationScreen.kt +++ b/demos/jans-chip/android/app/src/main/java/io/jans/chip/ui/screens/unauthenticated/registration/RegistrationScreen.kt @@ -47,6 +47,7 @@ import io.jans.chip.model.TokenResponse import io.jans.chip.model.UserInfoResponse import io.jans.chip.model.fido.attestation.option.AttestationOptionResponse import io.jans.chip.model.fido.attestation.result.AttestationResultRequest +import io.jans.chip.model.fido.config.FidoConfiguration import io.jans.chip.model.fido.config.FidoConfigurationResponse import io.jans.chip.ui.common.customComposableViews.MediumTitleText import io.jans.chip.ui.common.customComposableViews.SmallClickableWithIconAndText @@ -210,7 +211,7 @@ fun RegistrationScreen( CoroutineScope(Dispatchers.Main).launch { registrationState = registrationState.copy(isLoading = true) val loginResponse: LoginResponse? = async { - mainViewModel.processlogin( + mainViewModel.processLogin( mainViewModel.getUsername(), mainViewModel.getPassword(), "enroll", @@ -257,8 +258,8 @@ fun RegistrationScreen( return@launch } - val fidoConfiguration: FidoConfigurationResponse? = - async { mainViewModel.fetchFidoConfiguration() }.await() + val fidoConfiguration: FidoConfiguration? = + async { mainViewModel.getFIDOConfiguration() }.await() if (fidoConfiguration?.isSuccessful == false) { shouldShowDialog.value = true dialogContent.value = @@ -334,14 +335,12 @@ fun RegistrationScreen( registrationState.copy(isLoading = false) return@launch } - mainViewModel.attestationOptionResponse = true + mainViewModel.mainState = mainViewModel.mainState.copy(attestationOptionSuccess = true) + mainViewModel.mainState = mainViewModel.mainState.copy(attestationResultSuccess = true) - registrationViewModel.onUiEvent( - registrationUiEvent = RegistrationUiEvent.Submit - ) + registrationViewModel.onUiEvent(registrationUiEvent = RegistrationUiEvent.Submit) - registrationState = - registrationState.copy(isLoading = false) + registrationState = registrationState.copy(isLoading = false) } }) } @@ -351,8 +350,7 @@ fun RegistrationScreen( "Biometric authentication is not available!", Toast.LENGTH_SHORT ).show() - registrationState = - registrationState.copy(isLoading = false) + registrationState = registrationState.copy(isLoading = false) } } ) diff --git a/demos/jans-chip/android/app/src/main/java/io/jans/chip/viewmodel/MainViewModel.kt b/demos/jans-chip/android/app/src/main/java/io/jans/chip/viewmodel/MainViewModel.kt index 6cd0151b0c2..ad723bf402c 100644 --- a/demos/jans-chip/android/app/src/main/java/io/jans/chip/viewmodel/MainViewModel.kt +++ b/demos/jans-chip/android/app/src/main/java/io/jans/chip/viewmodel/MainViewModel.kt @@ -22,7 +22,6 @@ import io.jans.chip.model.fido.attestation.option.AttestationOptionResponse import io.jans.chip.model.fido.attestation.result.AttestationResultRequest import io.jans.chip.model.fido.attestation.result.AttestationResultResponse import io.jans.chip.model.fido.config.FidoConfiguration -import io.jans.chip.model.fido.config.FidoConfigurationResponse import io.jans.chip.repository.DCRRepository import io.jans.chip.repository.FidoAssertionRepository import io.jans.chip.repository.FidoAttestationRepository @@ -33,6 +32,7 @@ import io.jans.chip.repository.OPConfigurationRepository import io.jans.chip.repository.PlayIntegrityRepository import io.jans.chip.repository.TokenResponseRepository import io.jans.chip.repository.UserInfoResponseRepository +import io.jans.chip.viewmodel.state.MainState class MainViewModel : ViewModel() { @@ -44,27 +44,18 @@ class MainViewModel : ViewModel() { private lateinit var password: String private lateinit var userInfoResponse: UserInfoResponse - var opConfigurationPresent by mutableStateOf(false) - var fidoConfigurationPresent by mutableStateOf(false) - var attestationOptionSuccess by mutableStateOf(false) - var attestationOptionResponse by mutableStateOf(false) - var clientRegistered by mutableStateOf(false) - var userIsAuthenticated by mutableStateOf(false) - var assertionOptionResponse by mutableStateOf(false) - var errorInLoading by mutableStateOf(false) - var loadingErrorMessage by mutableStateOf("") - - - lateinit var opConfigurationRepository: OPConfigurationRepository - lateinit var dcrRepository: DCRRepository - lateinit var fidoConfigurationRepository: FidoConfigurationRepository - lateinit var loginResponseRepository: LoginResponseRepository - lateinit var tokenResponseRepository: TokenResponseRepository - lateinit var userInfoResponseRepository: UserInfoResponseRepository - lateinit var logoutRepository: LogoutRepository - lateinit var fidoAttestationRepository: FidoAttestationRepository - lateinit var fidoAssertionRepository: FidoAssertionRepository - lateinit var playIntegrityRepository: PlayIntegrityRepository + var mainState by mutableStateOf(MainState()) + + private lateinit var opConfigurationRepository: OPConfigurationRepository + private lateinit var dcrRepository: DCRRepository + private lateinit var fidoConfigurationRepository: FidoConfigurationRepository + private lateinit var loginResponseRepository: LoginResponseRepository + private lateinit var tokenResponseRepository: TokenResponseRepository + private lateinit var userInfoResponseRepository: UserInfoResponseRepository + private lateinit var logoutRepository: LogoutRepository + private lateinit var fidoAttestationRepository: FidoAttestationRepository + private lateinit var fidoAssertionRepository: FidoAssertionRepository + private lateinit var playIntegrityRepository: PlayIntegrityRepository companion object { @@ -146,70 +137,11 @@ class MainViewModel : ViewModel() { return userInfoResponse } - suspend fun fetchOPConfiguration(): OPConfiguration? { - - val opConfiguration: OPConfiguration? = - opConfigurationRepository.fetchOPConfiguration(opConfigUrl) - if (opConfiguration?.isSuccessful == true) { - opConfigurationPresent = true - } - return opConfiguration - } - - suspend fun doDCR(scopeText: String): OIDCClient? { - val oidcClient: OIDCClient? = dcrRepository.doDCR(scopeText) - clientRegistered = true - return oidcClient - } - - suspend fun doDCRUsingSSA(ssa: String, scopeText: String): OIDCClient? { - val oidcClient: OIDCClient? = dcrRepository.doDCRUsingSSA(ssa, scopeText) - clientRegistered = true - return oidcClient - } - - suspend fun fetchFidoConfiguration(): FidoConfigurationResponse? { - if (!(this::fidoConfigUrl.isInitialized)) { - val opConfiguration: OPConfiguration? = - opConfigurationRepository.getOPConfigurationInDatabase() - opConfiguration?.fidoUrl?.let { setFidoConfigUrl(it) } - } - - val fidoConfigurationResponse: FidoConfigurationResponse? = - fidoConfigurationRepository.fetchFidoConfiguration(fidoConfigUrl) - if (fidoConfigurationResponse?.isSuccessful == true) { - fidoConfigurationPresent = true - } - return fidoConfigurationResponse - } - - suspend fun getFidoConfigInDatabase(): FidoConfiguration? { - return fidoConfigurationRepository.getFidoConfigInDatabase() - } - - suspend fun deleteOPConfigurationInDatabase() { - opConfigurationRepository.deleteOPConfigurationInDatabase() - opConfigurationPresent = false - } - - suspend fun deleteClientInDatabase() { - dcrRepository.deleteClientInDatabase() - clientRegistered = false - userIsAuthenticated = false - } - - suspend fun deleteFidoConfigurationInDatabase() { - fidoConfigurationRepository.deleteFidoConfigurationInDatabase() - fidoConfigurationPresent = false - attestationOptionSuccess = false - attestationOptionResponse = false - } - suspend fun attestationOption(username: String): AttestationOptionResponse? { val attestationOptionResponse: AttestationOptionResponse? = fidoAttestationRepository.attestationOption(username) if (attestationOptionResponse?.isSuccessful == true) { - attestationOptionSuccess = true + mainState = mainState.copy(attestationOptionSuccess = true) } return attestationOptionResponse } @@ -218,7 +150,7 @@ class MainViewModel : ViewModel() { val attestationResultResponse: AttestationResultResponse? = fidoAttestationRepository.attestationResult(attestationResultRequest) if (attestationResultResponse?.isSuccessful == true) { - attestationOptionResponse = true + mainState = mainState.copy(attestationResultSuccess = true) } return attestationResultResponse } @@ -228,8 +160,9 @@ class MainViewModel : ViewModel() { } suspend fun checkAppIntegrityFromDatabase(): String? { - val appIntegrityEntity: AppIntegrityEntity = playIntegrityRepository.getAppIntegrityEntityInDatabase() - ?: return null + val appIntegrityEntity: AppIntegrityEntity = + playIntegrityRepository.getAppIntegrityEntityInDatabase() + ?: return null if (appIntegrityEntity.error != null) { return appIntegrityEntity.error @@ -252,19 +185,20 @@ class MainViewModel : ViewModel() { val assertionResultResponse: AssertionResultResponse = fidoAssertionRepository.assertionResult(assertionResultRequest) if (assertionResultResponse.isSuccessful == true) { - assertionOptionResponse = true + mainState = mainState.copy(attestationOptionSuccess = true) + mainState = mainState.copy(attestationResultSuccess = true) } return assertionResultResponse } - suspend fun processlogin( + suspend fun processLogin( usernameText: String, passwordText: String?, authMethod: String, assertionResultRequest: String? ): LoginResponse? { //userIsAuthenticated = true - return loginResponseRepository.processlogin( + return loginResponseRepository.processLogin( usernameText, passwordText, authMethod, @@ -278,44 +212,47 @@ class MainViewModel : ViewModel() { return tokenResponseRepository.getToken(authorizationCode) } - suspend fun getUserInfo(accessToken: String?): UserInfoResponse { - val userInfoResponse: UserInfoResponse = - userInfoResponseRepository.getUserInfo(accessToken) - if (userInfoResponse?.isSuccessful == true) { - userIsAuthenticated = true - } - return userInfoResponse - } - suspend fun logout(): LogoutResponse { val logoutResponse: LogoutResponse = logoutRepository.logout() if (logoutResponse.isSuccessful == true) { - userIsAuthenticated = false + mainState = mainState.copy(isUserIsAuthenticated = false) } return logoutResponse } - suspend fun isOPConfigurationInDatabase(): Boolean { - return opConfigurationRepository.isOPConfigurationInDatabase() - } - - suspend fun getOPConfigurationInDatabase(): OPConfiguration? { - return opConfigurationRepository.getOPConfigurationInDatabase() + suspend fun getUserInfoWithAccessToken(accessToken: String?): UserInfoResponse? { + return userInfoResponseRepository.getUserInfo(accessToken) } - suspend fun isClientInDatabase(): Boolean { - return dcrRepository.isClientInDatabase() + suspend fun getOIDCClient(): OIDCClient? { + val oidcClient: OIDCClient? = dcrRepository.getOIDCClient() + if (oidcClient?.isSuccessful == true) { + mainState = mainState.copy(isClientRegistered = true) + } + return oidcClient } - suspend fun getClientInDatabase(): OIDCClient? { - return dcrRepository.getClientInDatabase() + suspend fun getOPConfiguration(): OPConfiguration? { + val opConfiguration: OPConfiguration? = opConfigurationRepository.getOPConfiguration() + if (opConfiguration?.isSuccessful == true) { + mainState = mainState.copy(opConfigurationPresent = true) + } + return opConfiguration } - suspend fun isAuthenticated(accessToken: String?): Boolean { - return loginResponseRepository.isAuthenticated(accessToken) + suspend fun getFIDOConfiguration(): FidoConfiguration? { + val fidoConfiguration: FidoConfiguration? = fidoConfigurationRepository.getFidoConfig() + if (fidoConfiguration?.isSuccessful == true) { + mainState = mainState.copy(fidoConfigurationPresent = true) + } + return fidoConfiguration } - suspend fun getUserInfoWithAccessToken(accessToken: String?): UserInfoResponse? { - return userInfoResponseRepository.getUserInfo(accessToken) + suspend fun getUserInfo(accessToken: String?): UserInfoResponse? { + val userInfoResponse: UserInfoResponse? = userInfoResponseRepository.getUserInfo(accessToken) + if (userInfoResponse?.isSuccessful == true) { + mainState = mainState.copy(isUserIsAuthenticated = true) + } + return userInfoResponse } } \ No newline at end of file diff --git a/demos/jans-chip/android/app/src/main/java/io/jans/chip/viewmodel/state/MainState.kt b/demos/jans-chip/android/app/src/main/java/io/jans/chip/viewmodel/state/MainState.kt new file mode 100644 index 00000000000..29a5d8a6b3e --- /dev/null +++ b/demos/jans-chip/android/app/src/main/java/io/jans/chip/viewmodel/state/MainState.kt @@ -0,0 +1,4 @@ +package io.jans.chip.viewmodel.state + +class MainState { +} \ No newline at end of file