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

Commit 79b55d3e authored by Hasib Prince's avatar Hasib Prince
Browse files

introduced auth validation before update process

parent 063224db
Loading
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
package foundation.e.apps.login

import com.aurora.gplayapi.data.models.AuthData
import foundation.e.apps.api.ResultSupreme

interface AuthDataValidator {
    suspend fun fetchValidatedAuthData(): ResultSupreme<AuthData?>
}
 No newline at end of file
+16 −1
Original line number Diff line number Diff line
@@ -19,9 +19,11 @@ package foundation.e.apps.login

import android.content.Context
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.helpers.AuthValidator
import com.google.gson.Gson
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.apps.api.ResultSupreme
import foundation.e.apps.api.gplay.utils.GPlayHttpClient
import foundation.e.apps.login.api.GPlayApiFactory
import foundation.e.apps.login.api.GPlayLoginInterface
import foundation.e.apps.login.api.GoogleLoginApi
@@ -44,11 +46,14 @@ class LoginSourceGPlay @Inject constructor(
    @ApplicationContext private val context: Context,
    private val gson: Gson,
    private val loginDataStore: LoginDataStore,
) : LoginSourceInterface {
) : LoginSourceInterface, AuthDataValidator {

    @Inject
    lateinit var gPlayApiFactory: GPlayApiFactory

    @Inject
    lateinit var gPlayHttpClient: GPlayHttpClient

    private val user: User
        get() = loginDataStore.getUserType()

@@ -251,4 +256,14 @@ class LoginSourceGPlay @Inject constructor(
            )
        }
    }

    override suspend fun fetchValidatedAuthData(): ResultSupreme<AuthData?> {
        val savedAuth = getSavedAuthData()
        val isValid = AuthValidator(savedAuth!!).using(gPlayHttpClient).isValid()
        if (!isValid) {
            return generateAuthData()
        }

        return ResultSupreme.create(ResultStatus.OK, savedAuth)
    }
}
+7 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@

package foundation.e.apps.login

import com.aurora.gplayapi.data.models.AuthData
import foundation.e.apps.api.ResultSupreme
import foundation.e.apps.utils.enums.User
import javax.inject.Inject
import javax.inject.Singleton
@@ -58,4 +60,9 @@ class LoginSourceRepository @Inject constructor(
    suspend fun logout() {
        loginCommon.logout()
    }

    suspend fun getValidatedAuthData(): ResultSupreme<AuthData?> {
        val authDataValidator = (sources.find { it is AuthDataValidator } as AuthDataValidator)
        return authDataValidator.fetchValidatedAuthData()
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import foundation.e.apps.api.ResultSupreme
import foundation.e.apps.api.cleanapk.CleanAPKInterface
import foundation.e.apps.api.fused.FusedAPIRepository
import foundation.e.apps.api.fused.data.FusedApp
import foundation.e.apps.login.LoginSourceRepository
import foundation.e.apps.manager.database.fusedDownload.FusedDownload
import foundation.e.apps.manager.fused.FusedManagerRepository
import foundation.e.apps.manager.workmanager.InstallWorkManager
@@ -49,6 +50,7 @@ class UpdatesWorker @AssistedInject constructor(
    private val fusedAPIRepository: FusedAPIRepository,
    private val fusedManagerRepository: FusedManagerRepository,
    private val dataStoreManager: DataStoreManager,
    private val loginSourceRepository: LoginSourceRepository,
    private val gson: Gson,
) : CoroutineWorker(context, params) {

@@ -110,7 +112,7 @@ class UpdatesWorker @AssistedInject constructor(
        val isConnectedToUnmeteredNetwork = isConnectedToUnmeteredNetwork(applicationContext)
        val appsNeededToUpdate = mutableListOf<FusedApp>()
        val user = getUser()
        val authData = getAuthData()
        val authData = loginSourceRepository.getValidatedAuthData().data
        val resultStatus: ResultStatus

        if (user in listOf(User.ANONYMOUS, User.GOOGLE) && authData != null) {
@@ -225,6 +227,7 @@ class UpdatesWorker @AssistedInject constructor(
            if (!fusedApp.isFree && authData.isAnonymous) {
                return@forEach
            }

            val iconBase64 = getIconImageToBase64(fusedApp)

            val fusedDownload = FusedDownload(