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

Commit 12b5fd51 authored by Mohammed Althaf T's avatar Mohammed Althaf T 😊
Browse files

AM: Cache cookies to reduce sessions

parent 41cdf7af
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -306,6 +306,7 @@ dependencies {
    implementation(libs.commons.httpclient) {
        exclude(group = "commons-logging", module = "commons-logging")
    }
    implementation(libs.okhttp.urlconnection)

    // for tests
    androidTestImplementation(libs.androidx.arch.core.testing)
+14 −1
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ import at.bitfire.davdroid.settings.SettingsManager
import at.bitfire.davdroid.ui.ForegroundTracker
import com.google.common.net.HttpHeaders
import dagger.hilt.android.qualifiers.ApplicationContext
import foundation.e.accountmanager.network.CookieParser
import foundation.e.accountmanager.network.PersistentCookieStore
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
import net.openid.appauth.AuthState
@@ -173,9 +175,12 @@ class HttpClient(
                    accountSettings.credentials()
                },
                updateAuthState = { authState ->
                    accountSettings.updateAuthState(authState)
                    accountSettings.updateAuthState(authState, cookieStore)
                }
            )

            cookieStore = PersistentCookieStore.create(context, account, cookieStore)

            return this
        }

@@ -312,4 +317,12 @@ class HttpClient(

    }

    fun getCookieAsString(): String {
        val cookieJar = okHttpClient.cookieJar
        if (cookieJar is CookieParser) {
            return cookieJar.cookiesAsString()
        }

        return ""
    }
}
 No newline at end of file
+11 −2
Original line number Diff line number Diff line
@@ -4,7 +4,8 @@

package at.bitfire.davdroid.network

import androidx.annotation.VisibleForTesting
import com.owncloud.android.lib.common.accounts.AccountUtils
import foundation.e.accountmanager.network.CookieParser
import okhttp3.Cookie
import okhttp3.CookieJar
import okhttp3.HttpUrl
@@ -14,7 +15,7 @@ import java.util.LinkedList
 * Primitive cookie store that stores cookies in a (volatile) hash map.
 * Will be sufficient for session cookies.
 */
class MemoryCookieStore : CookieJar {
class MemoryCookieStore : CookieJar, CookieParser {

    data class StorageKey(
        val domain: String,
@@ -78,4 +79,12 @@ class MemoryCookieStore : CookieJar {
        return cookies
    }

    override fun cookiesAsString(): String {
        if (storage.isEmpty()) {
            return ""
        }

        return storage.values.joinToString(separator = AccountUtils.Constants.OKHTTP_COOKIE_SEPARATOR)
    }

}
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -76,7 +76,7 @@ class AccountRepository @Inject constructor(

        // create Android account
        val initialUserData = AccountSettings.initialUserData(credentials)
        val userData = OAuthMurena.onCreateAccount(context, initialUserData, account, credentials)
        val userData = OAuthMurena.onCreateAccount(context, initialUserData, account, credentials, config)
        logger.log(Level.INFO, "Creating Android account with initial config", arrayOf(account, userData))

        if (!SystemAccountUtils.createAccount(context, account, userData, credentials?.password))
+4 −2
Original line number Diff line number Diff line
@@ -148,7 +148,8 @@ class DavResourceFinder @AssistedInject constructor(
            cardDAV = cardDavConfig,
            calDAV = calDavConfig,
            encountered401 = encountered401,
            logs = logBuffer.toString()
            logs = logBuffer.toString(),
            cookies = httpClient.getCookieAsString()
        )
    }

@@ -487,7 +488,8 @@ class DavResourceFinder @AssistedInject constructor(
        val calDAV: ServiceInfo?,

        val encountered401: Boolean,
        val logs: String
        val logs: String,
        val cookies: String? = null
    ) {

        data class ServiceInfo(
Loading