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

Commit 05f950bf authored by Nihar Thakkar's avatar Nihar Thakkar Committed by Sumit Pundir
Browse files

Use AuthState instead of accessToken and refreshToken.

parent 24c655ad
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import foundation.e.accountmanager.model.Collection
import foundation.e.accountmanager.settings.AccountSettings
import foundation.e.accountmanager.ui.DebugInfoActivity
import foundation.e.accountmanager.ui.NotificationUtils
import net.openid.appauth.AuthState
import okhttp3.HttpUrl
import okhttp3.OkHttpClient
import java.lang.ref.WeakReference
@@ -154,7 +155,7 @@ class DavService: android.app.Service() {
         * @throws HttpException
         * @throws foundation.e.dav4jvm.exception.DavException
         */
        fun queryHomeSets(client: OkHttpClient, url: HttpUrl, accessToken: String, recurse: Boolean = true) {
        fun queryHomeSets(client: OkHttpClient, url: HttpUrl, accessToken: String?, recurse: Boolean = true) {
            val related = mutableSetOf<HttpUrl>()

            fun findRelated(root: HttpUrl, dav: Response) {
@@ -272,12 +273,12 @@ class DavService: android.app.Service() {
                    .build().use { client ->
                val httpClient = client.okHttpClient

		val accessToken = service.accessToken
		val authState = service.authState

                // refresh home set list (from principal)
                service.principal?.let { principalUrl ->
                    Logger.log.fine("Querying principal $principalUrl for home sets")
                    queryHomeSets(httpClient, principalUrl, accessToken)
                    queryHomeSets(httpClient, principalUrl, AuthState.jsonDeserialize(authState).accessToken)
                }

                // now refresh homesets and their member collections
@@ -287,7 +288,7 @@ class DavService: android.app.Service() {
                    Logger.log.fine("Listing home set ${homeSet.key}")

                    try {
                        DavResource(httpClient, homeSet.key, accessToken).propfind(1, *DAV_COLLECTION_PROPERTIES) { response, relation ->
                        DavResource(httpClient, homeSet.key, AuthState.jsonDeserialize(authState).accessToken).propfind(1, *DAV_COLLECTION_PROPERTIES) { response, relation ->
                            if (!response.isSuccess())
                                return@propfind

@@ -321,7 +322,7 @@ class DavService: android.app.Service() {
                    val (url, info) = itCollections.next()
                    if (!info.confirmed)
                        try {
                            DavResource(httpClient, url, accessToken).propfind(0, *DAV_COLLECTION_PROPERTIES) { response, _ ->
                            DavResource(httpClient, url, AuthState.jsonDeserialize(authState).accessToken).propfind(0, *DAV_COLLECTION_PROPERTIES) { response, _ ->
                                if (!response.isSuccess())
                                    return@propfind

+2 −3
Original line number Diff line number Diff line
@@ -114,13 +114,12 @@ abstract class AppDatabase: RoomDatabase() {
                    "CREATE TABLE service(" +
                            "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," +
                            "accountName TEXT NOT NULL," +
			    "accessToken TEXT ," +
			    "refreshToken TEXT ," + 
			    "authState TEXT ," +
                            "type TEXT NOT NULL," +
                            "principal TEXT DEFAULT NULL" +
                            ")",
                    "CREATE UNIQUE INDEX index_service_accountName_type ON service(accountName, type)",
                    "INSERT INTO service(id, accountName, accessToken, refreshToken, type, principal) SELECT _id, accountName, accessToken, refreshToken, service, principal FROM services",
                    "INSERT INTO service(id, accountName, authState, type, principal) SELECT _id, accountName, authState, service, principal FROM services",
                    "DROP TABLE services",

                    // migrate "homesets" to "homeset": rename columns, make id NOT NULL
+4 −4
Original line number Diff line number Diff line
@@ -8,11 +8,12 @@

package foundation.e.accountmanager.model

import net.openid.appauth.AuthState

class Credentials(
        val userName: String? = null,
        val password: String? = null,
	val accessToken: String? = null,
        val refreshToken: String? = null,
	val authState: AuthState? = null,
        val certificateAlias: String? = null
) {

@@ -28,8 +29,7 @@ class Credentials(
        type = when {
            !certificateAlias.isNullOrEmpty() ->
                Type.ClientCertificate
	    !userName.isNullOrEmpty() && !accessToken.isNullOrEmpty()
                    && !refreshToken.isNullOrEmpty() ->
	    !userName.isNullOrEmpty() && (authState != null) -> 
                Type.OAuth
            !userName.isNullOrEmpty() && !password.isNullOrEmpty() ->
                Type.UsernamePassword
+1 −2
Original line number Diff line number Diff line
@@ -16,8 +16,7 @@ data class Service(

    var accountName: String,

    var accessToken: String,
    var refreshToken: String,
    var authState: String,
	
    var type: String,
    var principal: HttpUrl?
+19 −11
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import foundation.e.ical4android.TaskProvider
import foundation.e.ical4android.TaskProvider.ProviderName.OpenTasks
import foundation.e.vcard4android.ContactsStorageException
import foundation.e.vcard4android.GroupMethod
import net.openid.appauth.AuthState
import okhttp3.HttpUrl
import org.apache.commons.lang3.StringUtils
import org.dmfs.tasks.contract.TaskContract
@@ -55,8 +56,7 @@ class AccountSettings(
        const val KEY_SETTINGS_VERSION = "version"

        const val KEY_USERNAME = "user_name"
	const val KEY_ACCESS_TOKEN = "access_token"
        const val KEY_REFRESH_TOKEN = "refresh_token"
	const val KEY_AUTH_STATE = "auth_state"
        const val KEY_CERTIFICATE_ALIAS = "certificate_alias"

        const val KEY_WIFI_ONLY = "wifi_only"               // sync on WiFi only (default: false)
@@ -106,8 +106,7 @@ class AccountSettings(
                    bundle.putString(KEY_USERNAME, credentials.userName)
		Credentials.Type.OAuth -> {
                    bundle.putString(KEY_USERNAME, credentials.userName)
		    bundle.putString(KEY_ACCESS_TOKEN, credentials.accessToken)
                    bundle.putString(KEY_REFRESH_TOKEN, credentials.refreshToken)
		    bundle.putString(KEY_AUTH_STATE, credentials.authState!!.jsonSerializeString())
                }
                Credentials.Type.ClientCertificate ->
                    bundle.putString(KEY_CERTIFICATE_ALIAS, credentials.certificateAlias)
@@ -140,13 +139,22 @@ class AccountSettings(

    // authentication settings

    fun credentials() = Credentials(
    fun credentials(): Credentials {
        if (accountManager.getUserData(account, KEY_AUTH_STATE).isNullOrEmpty()) {
            return Credentials(
                    accountManager.getUserData(account, KEY_USERNAME),
                    accountManager.getPassword(account),
	    accountManager.getUserData(account, KEY_ACCESS_TOKEN),
            accountManager.getUserData(account, KEY_REFRESH_TOKEN),
            accountManager.getUserData(account, KEY_CERTIFICATE_ALIAS)
    )
                    null,
                    accountManager.getUserData(account, KEY_CERTIFICATE_ALIAS))
        }
        else {
            return Credentials(
                    accountManager.getUserData(account, KEY_USERNAME),
                    accountManager.getPassword(account),
                    AuthState.jsonDeserialize(accountManager.getUserData(account, KEY_AUTH_STATE)),
                    accountManager.getUserData(account, KEY_CERTIFICATE_ALIAS))
        }
    }

    fun credentials(credentials: Credentials) {
        accountManager.setUserData(account, KEY_USERNAME, credentials.userName)
Loading