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

Commit 8dc09d67 authored by Jonathan Klee's avatar Jonathan Klee
Browse files

Use session cookie per app

parent 093b06df
Loading
Loading
Loading
Loading
+33 −2
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package at.bitfire.davdroid.network
import android.accounts.Account
import android.accounts.AccountManager
import android.content.Context
import android.util.Log
import at.bitfire.davdroid.settings.AccountSettings
import okhttp3.Cookie
import okhttp3.CookieJar
@@ -51,12 +52,33 @@ class PersistentCookieStore(context: Context, private val account: Account): Coo
        }

        val cookieString = cookieMap.values.joinToString(separator = AccountSettings.COOKIE_SEPARATOR)
        accountManager.setUserData(account, AccountSettings.COOKIE_KEY, cookieString)
        setUserData(url, cookieString)
    }

    private fun setUserData(url: HttpUrl, cookieString: String) {
        if (url.toString().contains(DAV_PATTERN)) {
            accountManager.setUserData(account, DAV_COOKIE_KEY, cookieString)
        } else if (url.toString().contains(NOTES_PATTERN)) {
            accountManager.setUserData(account, NOTES_COOKIE_KEY, cookieString)
        } else {
            accountManager.setUserData(account, EDRIVE_COOKIE_KEY, cookieString)
        }
    }

    private fun getUserData(url: HttpUrl): String? {
        if (url.toString().contains(DAV_PATTERN)) {
            accountManager.getUserData(account, DAV_COOKIE_KEY)
        } else if (url.toString().contains(NOTES_PATTERN)) {
            accountManager.getUserData(account, NOTES_COOKIE_KEY)
        } else {
            accountManager.getUserData(account, EDRIVE_COOKIE_KEY)
        }
        return null
    }

    private fun getCookieMap(url: HttpUrl): HashMap<String, Cookie> {
        val result = HashMap<String, Cookie>()
        val cookiesString = accountManager.getUserData(account, AccountSettings.COOKIE_KEY)?: return HashMap()
        val cookiesString = getUserData(url) ?: return HashMap()

        val cookies = cookiesString.split(AccountSettings.COOKIE_SEPARATOR.toRegex()).dropLastWhile { it.isEmpty() }
            .toTypedArray()
@@ -71,4 +93,13 @@ class PersistentCookieStore(context: Context, private val account: Account): Coo

        return result
    }

    companion object {
        private const val DAV_PATTERN = "/dav/"
        private const val NOTES_PATTERN = "/notes/"
        private const val NOTES_COOKIE_KEY = "notes_cookie_key"
        private const val DAV_COOKIE_KEY = "dav_cookie_key"
        private const val EDRIVE_COOKIE_KEY = "edrive_cookie_key"

    }
}