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

Commit c7b51b5f authored by Jonathan Klee's avatar Jonathan Klee
Browse files

Sanitize GooglePlayLogger interface

Now login() method does not have arguments anymore.

User and password are taken from the data store.
parent a4894a39
Loading
Loading
Loading
Loading
+10 −23
Original line number Diff line number Diff line
@@ -130,14 +130,8 @@ class GooglePlayAuthenticator @Inject constructor(
     */
    private suspend fun generateAuthData(): ResultSupreme<AuthData?> {
        return when (loginData.getUserType()) {
            User.ANONYMOUS -> getAuthData()
            User.GOOGLE -> {
                getAuthData(
                    loginData.getEmail(),
                    loginData.getOAuthToken(),
                    loginData.getAASToken()
                )
            }
            User.ANONYMOUS -> getAuthDataAnonymously()
            User.GOOGLE -> getAuthDataWithGoogleAccount()
            else -> ResultSupreme.Error("User type not ANONYMOUS or GOOGLE")
        }
    }
@@ -151,31 +145,24 @@ class GooglePlayAuthenticator @Inject constructor(
        return gson.fromJson(localAuthDataJson, AuthData::class.java)
    }

    /**
     * Get AuthData for ANONYMOUS mode.
     */
    private suspend fun getAuthData(): ResultSupreme<AuthData?> {
        return loggerWrapper.login("", "", locale).run {
    private suspend fun getAuthDataAnonymously(): ResultSupreme<AuthData?> {
        return loggerWrapper.login(locale).run {
            if (isSuccess()) ResultSupreme.Success(formatAuthData(this.data!!))
            else this
        }
    }

    /**
     * Get AuthData for GOOGLE login mode.
     */
    private suspend fun getAuthData(
        email: String,
        oauthToken: String,
        aasToken: String,
    ): ResultSupreme<AuthData?> {
    private suspend fun getAuthDataWithGoogleAccount(): ResultSupreme<AuthData?> {

        val email = loginData.getEmail()
        val oauthToken = loginData.getOAuthToken()
        val aasToken = loginData.getAASToken()
        /*
         * If aasToken is not blank, means it was stored successfully from a previous Google login.
         * Use it to fetch auth data.
         */
        if (aasToken.isNotBlank()) {
            return loggerWrapper.login(email, aasToken, locale)
            return loggerWrapper.login(locale)
        }

        /*
@@ -206,7 +193,7 @@ class GooglePlayAuthenticator @Inject constructor(
         * Finally save the aasToken and create auth data.
         */
        loginData.saveAasToken(aasTokenFetched)
        return loggerWrapper.login(email, aasTokenFetched, locale).run {
        return loggerWrapper.login(locale).run {
            if (isSuccess()) ResultSupreme.Success(formatAuthData(this.data!!))
            else this
        }
+5 −5
Original line number Diff line number Diff line
@@ -67,11 +67,11 @@ class LoginData @Inject constructor(
     * If AasToken is not stored, user has to logout and login again.
     */

    val authData = context.dataStore.data.map { it[AUTHDATA] ?: "" }
    val emailData = context.dataStore.data.map { it[EMAIL] ?: "" }
    val aasToken = context.dataStore.data.map { it[AASTOKEN] ?: "" }
    val oauthToken = context.dataStore.data.map { it[OAUTHTOKEN] ?: "" }
    val userType = context.dataStore.data.map { it[USERTYPE] ?: "" }
    private val authData = context.dataStore.data.map { it[AUTHDATA] ?: "" }
    private val emailData = context.dataStore.data.map { it[EMAIL] ?: "" }
    private val aasToken = context.dataStore.data.map { it[AASTOKEN] ?: "" }
    private val oauthToken = context.dataStore.data.map { it[OAUTHTOKEN] ?: "" }
    private val userType = context.dataStore.data.map { it[USERTYPE] ?: "" }

    // Setters

+3 −3
Original line number Diff line number Diff line
@@ -36,10 +36,10 @@ class AnonymousLogger(

    /**
     * Log anonymously a user
     * @param email email of the user
     * @param aasToken aasToken corresponding to the user
     *
     * @return authData: authentication data
     */
    override suspend fun login(email: String, aasToken: String): AuthData? {
    override suspend fun login(): AuthData? {
        var authData: AuthData? = null
        withContext(Dispatchers.IO) {
            val response =
+3 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.google.gson.Gson
import foundation.e.apps.data.enums.User
import foundation.e.apps.data.gplay.utils.AC2DMTask
import foundation.e.apps.data.gplay.utils.GPlayHttpClient
import foundation.e.apps.data.login.LoginData
import java.util.Properties
import javax.inject.Inject
import javax.inject.Singleton
@@ -31,11 +32,12 @@ class GPlayApiFactory @Inject constructor(
    private val nativeDeviceProperty: Properties,
    private val aC2DMTask: AC2DMTask,
    private val gson: Gson,
    private val loginData: LoginData
) {

    fun getGPlayApi(user: User): GooglePlayLogger {
        return when (user) {
            User.GOOGLE -> GoogleAccountLogger(gPlayHttpClient, nativeDeviceProperty, aC2DMTask)
            User.GOOGLE -> GoogleAccountLogger(gPlayHttpClient, nativeDeviceProperty, aC2DMTask, loginData)
            else -> AnonymousLogger(gPlayHttpClient, nativeDeviceProperty, gson)
        }
    }
+9 −3
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import com.aurora.gplayapi.helpers.AuthHelper
import foundation.e.apps.data.gplay.utils.AC2DMTask
import foundation.e.apps.data.gplay.utils.CustomAuthValidator
import foundation.e.apps.data.gplay.utils.GPlayHttpClient
import foundation.e.apps.data.login.LoginData
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import java.util.Properties
@@ -31,6 +32,7 @@ class GoogleAccountLogger(
    private val gPlayHttpClient: GPlayHttpClient,
    private val nativeDeviceProperty: Properties,
    private val aC2DMTask: AC2DMTask,
    private val loginData: LoginData
) : GooglePlayLogger {

    /**
@@ -51,10 +53,14 @@ class GoogleAccountLogger(
    }

    /**
     * Convert email and AASToken to AuthData class.
     * Issue: https://gitlab.e.foundation/e/backlog/-/issues/5680
     * Login
     *
     * @return authData: authentication data
     */
    override suspend fun login(email: String, aasToken: String): AuthData? {
    override suspend fun login(): AuthData? {
        val email = loginData.getEmail()
        val aasToken = loginData.getAASToken()

        var authData: AuthData?
        withContext(Dispatchers.IO) {
            authData = AuthHelper.build(email, aasToken, nativeDeviceProperty)
Loading