Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 75740f22 authored by Jonathan Klee's avatar Jonathan Klee
Browse files

Merge branch '0000-a15-jklee-dev' into 'main'

Refresh tokens dynamically

See merge request !681
parents de0eaa0f 3edcb7c7
Loading
Loading
Loading
Loading
Loading
+0 −25
Original line number Diff line number Diff line
package foundation.e.apps.data.login.playstore

import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.PlayResponse
import foundation.e.apps.data.playstore.utils.CustomAuthValidator
import foundation.e.apps.data.playstore.utils.GPlayHttpClient
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import javax.inject.Inject

class PlayStoreAuthDataVerifier @Inject constructor(
    private val gPlayHttpClient: GPlayHttpClient,
) {
    suspend fun validate(authData: AuthData?): PlayResponse {
        if (authData == null) {
            return PlayResponse()
        }
        var result = PlayResponse()
        withContext(Dispatchers.IO) {
            val authValidator = CustomAuthValidator(authData).using(gPlayHttpClient)
            result = authValidator.getValidityResponse()
        }
        return result
    }
}
+2 −12
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ import javax.inject.Singleton

/**
 * Class to get GPlay auth data. Call [login] to get an already saved auth data
 * or to fetch a new one for first use. Handles auth validation internally.
 * or to fetch a new one for first use.
 *
 * https://gitlab.e.foundation/e/backlog/-/issues/5680
 */
@@ -51,7 +51,6 @@ class PlayStoreAuthenticator @Inject constructor(
    private val appLoungeDataStore: AppLoungeDataStore,
    private val appLoungePreference: AppLoungePreference,
    private val authDataCache: AuthDataCache,
    private val authDataVerifier: PlayStoreAuthDataVerifier,
    private val googleLoginManager: GoogleLoginManager,
    private val microgLoginManager: MicrogLoginManager,
    private val anonymousLoginManager: AnonymousLoginManager,
@@ -89,7 +88,7 @@ class PlayStoreAuthenticator @Inject constructor(
     */
    override suspend fun login(): StoreAuthResult {
        val user = appLoungeDataStore.getUser()
        val validSavedAuth = getValidSavedAuthData()
        val validSavedAuth = authDataCache.getSavedAuthData()
        val authDataResult = if (validSavedAuth == null) {
            retryWithBackoff { loginForUserType(user) }
        } else {
@@ -204,15 +203,6 @@ class PlayStoreAuthenticator @Inject constructor(
        }
    }

    private suspend fun isAuthDataValid(savedAuth: AuthData?): Boolean {
        return savedAuth != null && authDataVerifier.validate(savedAuth).isSuccessful
    }

    private suspend fun getValidSavedAuthData(): AuthData? {
        val savedAuth = authDataCache.getSavedAuthData()
        return if (isAuthDataValid(savedAuth)) savedAuth else null
    }

    private fun buildErrorAuthResult(
        user: User,
        authDataResult: ResultSupreme<AuthData?>
+1 −0
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ class AuthenticatorRepository @Inject constructor(
    suspend fun getValidatedAuthData(): ResultSupreme<AuthData?> {
        val authenticator = authenticators.firstOrNull { it.storeType == StoreType.PLAY_STORE }
            ?: return ResultSupreme.Error("Play Store authenticator not available")
        authenticator.logout()
        val authResult = authenticator.login()
        authResult.authDataToPersist?.let { appLoungeDataStore.saveAuthData(it) }
        val authObject = authResult.authObject as? AuthObject.GPlayAuth
+1 −1
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ import foundation.e.apps.data.login.repository.AuthenticatorRepository
import foundation.e.apps.data.login.state.LoginCoordinator
import javax.inject.Inject

class CompleteMicrogLoginUseCase @Inject constructor(
class InitialMicrogLoginUseCase @Inject constructor(
    private val stores: Stores,
    private val loginCoordinator: LoginCoordinator,
    private val authenticatorRepository: AuthenticatorRepository
+0 −14
Original line number Diff line number Diff line
package foundation.e.apps.domain.login

import foundation.e.apps.data.login.core.AuthObject
import foundation.e.apps.data.login.core.StoreType
import foundation.e.apps.data.login.repository.AuthenticatorRepository
import javax.inject.Inject

class StartLoginFlowUseCase @Inject constructor(
    private val authenticatorRepository: AuthenticatorRepository
) {
    suspend operator fun invoke(clearList: List<StoreType>): List<AuthObject> {
        return authenticatorRepository.fetchAuthObjects(clearList)
    }
}
Loading