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

Commit 1a9cbfdf authored by Jonathan Klee's avatar Jonathan Klee
Browse files

fix: fix false positive dialog in app details

Remove InvalidAuthEvent. Re-auth should be rather lower level
and for Play Store it is now done per-request
in PlayStoreRepository with refreshPlayStoreAuthentication()
parent 10937de0
Loading
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -29,8 +29,6 @@ import kotlinx.coroutines.CompletableDeferred
sealed class AppEvent(val data: Any) {
    class SignatureMissMatchError(packageName: String) : AppEvent(packageName)
    class UpdateEvent(result: ResultSupreme.WorkError<ResultStatus>) : AppEvent(result)

    class InvalidAuthEvent(authName: String) : AppEvent(authName)
    class ErrorMessageEvent(stringResourceId: Int) : AppEvent(stringResourceId)
    class ErrorMessageDialogEvent(stringResourceId: Int) : AppEvent(stringResourceId)
    class AppPurchaseEvent(appInstall: AppInstall) : AppEvent(appInstall)
+0 −41
Original line number Diff line number Diff line
package foundation.e.apps.data.login.core

import com.aurora.gplayapi.data.models.AuthData
import foundation.e.apps.data.ResultSupreme
import foundation.e.apps.data.login.exceptions.CleanApkException
import foundation.e.apps.data.login.exceptions.GPlayValidationException
import foundation.e.apps.domain.model.User
import java.net.HttpURLConnection

object AuthFailureFactory {
    fun createGplayValidationFailure(user: User, otherPayload: Any?): AuthObject {
        val message =
            "Validating AuthData failed.\nNetwork code: ${HttpURLConnection.HTTP_UNAUTHORIZED}"
        return AuthObject.GPlayAuth(
            ResultSupreme.Error<AuthData?>(
                message = message,
                exception = GPlayValidationException(
                    message,
                    user,
                    HttpURLConnection.HTTP_UNAUTHORIZED,
                )
            ).apply {
                this.otherPayload = otherPayload
            },
            user,
        )
    }

    fun createCleanApkUnauthorizedFailure(user: User): AuthObject {
        return AuthObject.CleanApk(
            ResultSupreme.Error(
                message = "Unauthorized",
                exception = CleanApkException(
                    isTimeout = false,
                    message = "Unauthorized",
                )
            ),
            user,
        )
    }
}
+2 −15
Original line number Diff line number Diff line
@@ -36,21 +36,8 @@ sealed class AuthObject {
    abstract val result: ResultSupreme<*>
    abstract val user: User

    abstract fun createInvalidAuthObject(): AuthObject
    class GPlayAuth(override val result: ResultSupreme<AuthData?>, override val user: User) : AuthObject()

    class GPlayAuth(override val result: ResultSupreme<AuthData?>, override val user: User) : AuthObject() {
        override fun createInvalidAuthObject(): AuthObject {
            return AuthFailureFactory.createGplayValidationFailure(
                user = user,
                otherPayload = result.otherPayload
            )
        }
    }

    class CleanApk(override val result: ResultSupreme<Unit>, override val user: User) : AuthObject() {
        override fun createInvalidAuthObject(): AuthObject {
            return AuthFailureFactory.createCleanApkUnauthorizedFailure(user)
        }
    }
    class CleanApk(override val result: ResultSupreme<Unit>, override val user: User) : AuthObject()
    // Add more auth types here
}
+2 −2
Original line number Diff line number Diff line
@@ -172,7 +172,7 @@ class PlayStoreRepository @Inject constructor(
                getAppDetailsHelper().getAppByPackageName(packageNames)
            }

            if (!isEmulator() && appDetails.all { it.versionCode == 0L } && isAnonymousUser()) {
            if (!isEmulator() && appDetails.all { it.versionCode == 0L }) {
                // Google Play returns limited result ( i.e. version code being 0) with a stale token,
                // so we need to refresh authentication to get a new token.
                Timber.i("Version code is 0.")
@@ -205,7 +205,7 @@ class PlayStoreRepository @Inject constructor(
                throw exception
            }

            if (!isEmulator() && appDetails.versionCode == 0L && isAnonymousUser()) {
            if (!isEmulator() && appDetails.versionCode == 0L) {
                // Google Play returns limited result ( i.e. version code being 0) with a stale token,
                // so we need to refresh authentication to get a new token.
                Timber.i("Version code is 0 for ${appDetails.packageName}.")
+0 −7
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import com.aurora.gplayapi.data.models.PlayResponse
import com.aurora.gplayapi.network.IHttpClient
import foundation.e.apps.data.event.AppEvent
import foundation.e.apps.data.event.EventBus
import foundation.e.apps.data.login.core.AuthObject
import foundation.e.apps.data.system.SystemInfoProvider
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.MutableStateFlow
@@ -202,12 +201,6 @@ class GPlayHttpClient @Inject constructor(
        val responseBytes = response.body?.bytes() ?: byteArrayOf()

        when (code) {
            STATUS_CODE_UNAUTHORIZED -> MainScope().launch {
                EventBus.invokeEvent(
                    AppEvent.InvalidAuthEvent(AuthObject.GPlayAuth::class.java.simpleName)
                )
            }

            STATUS_CODE_TOO_MANY_REQUESTS -> MainScope().launch {
                if (url.toString().contains(SEARCH_SUGGEST)) {
                    return@launch
Loading