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

Commit db970a78 authored by Hasib Prince's avatar Hasib Prince
Browse files

Google login repository is introduced

parent b7d344f4
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ allOpen {
}

dependencies {

    implementation project(":modules")
    // TODO: Add splitinstall-lib to a repo https://gitlab.e.foundation/e/os/backlog/-/issues/628
    api files('libs/splitinstall-lib.jar')

+17 −0
Original line number Diff line number Diff line
package foundation.e.apps.domain.login

import java.util.StringTokenizer

object AuthTokenPlayResponseParser {
    fun parseResponse(response: String?): Map<String, String> {
        val keyValueMap: MutableMap<String, String> = HashMap()
        val st = StringTokenizer(response, "\n\r")
        while (st.hasMoreTokens()) {
            val keyValue = st.nextToken().split("=")
            if (keyValue.size >= 2) {
                keyValueMap[keyValue[0]] = keyValue[1]
            }
        }
        return keyValueMap
    }
}
 No newline at end of file
+8 −0
Original line number Diff line number Diff line
package foundation.e.apps.domain.login

import com.aurora.gplayapi.data.models.AuthData

interface GoogleLoginRepository {
    suspend fun getGoogleLoginAuthData(email: String, oauthToken: String): AuthData?
    suspend fun validate(): Boolean
}
 No newline at end of file
+46 −0
Original line number Diff line number Diff line
package foundation.e.apps.domain.login

import app.lounge.login.google.GoogleLoginApi
import app.lounge.networking.NetworkResult
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.data.models.PlayResponse
import com.aurora.gplayapi.helpers.AuthHelper
import timber.log.Timber
import java.lang.Exception
import java.util.Properties
import javax.inject.Inject

class GoogleLoginRepositoryImpl @Inject constructor(
    private val googleLoginApi: GoogleLoginApi,
    private val properties: Properties
) : GoogleLoginRepository {

    override suspend fun getGoogleLoginAuthData(email: String, oauthToken: String): AuthData? {
        val result = googleLoginApi.getAuthTokenPlayResponse(email, oauthToken)
        return when (result) {
            is NetworkResult.Success -> handleAuthTokenPlayResponseSuccess(result, email)
            is NetworkResult.Error -> throw Exception(result.errorMessage, result.exception)
        }
    }

    private fun handleAuthTokenPlayResponseSuccess(
        result: NetworkResult.Success<PlayResponse>,
        email: String
    ): AuthData? {
        if (result.data.isSuccessful) {
            val parsedResult =
                AuthTokenPlayResponseParser.parseResponse(String(result.data.responseBytes))
            val token = parsedResult["Token"] ?: ""
            Timber.d("Parsed token: $token")
            //TODO save token in the preferences
            return AuthHelper.build(email, token, properties)
        }
        return null
    }

    override suspend fun validate(): Boolean {
        val authData = AuthHelper.build("", "") // TODO authdata will be fetched from preferences
        val result = googleLoginApi.validate(authData)
        return result is NetworkResult.Success && result.data
    }
}
 No newline at end of file