From 1ac8fb2700b12e2a160fe3707b2230bffdc85762 Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Thu, 2 Sep 2021 15:17:30 +0300 Subject: [PATCH] Create HttpSession.kt --- .../cloudstream3/utils/HttpSession.kt | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 app/src/main/java/com/lagradost/cloudstream3/utils/HttpSession.kt diff --git a/app/src/main/java/com/lagradost/cloudstream3/utils/HttpSession.kt b/app/src/main/java/com/lagradost/cloudstream3/utils/HttpSession.kt new file mode 100644 index 00000000..07653d0c --- /dev/null +++ b/app/src/main/java/com/lagradost/cloudstream3/utils/HttpSession.kt @@ -0,0 +1,87 @@ +package com.lagradost.cloudstream3.utils + + +import khttp.structures.authorization.Authorization +import khttp.structures.cookie.CookieJar +import khttp.structures.files.FileLike +import khttp.responses.Response + + +/** + * An HTTP session manager. + * + * This class simply keeps cookies across requests. + * + * @property sessionCookies A cookie jar. + */ +class Session { + companion object { + const val DEFAULT_TIMEOUT = 30.0 + + fun cookieStrToMap(cookie: String): Map { + val cookies = mutableMapOf() + for (string in cookie.split("; ")) { + val split = string.split("=").toMutableList() + val name = split.removeFirst().trim() + val value = if (split.size == 0) { + "true" + } else { + split.joinToString("=") + } + cookies[name] = value + } + return cookies.toMap() + } + } + + public val sessionCookies = CookieJar() + + public fun get( + url: String, headers: Map = mapOf(), + params: Map = mapOf(), + data: Any? = null, json: Any? = null, + auth: Authorization? = null, + cookies: Map? = null, + timeout: Double = DEFAULT_TIMEOUT, + allowRedirects: Boolean? = null, + stream: Boolean = false, files: List = listOf(), + ): Response { + val res = khttp.get( + url, headers, params, + data, json, auth, + cookies, timeout, + allowRedirects, + stream, files + ) + sessionCookies.putAll(res.cookies.toMap()) + if (res.headers.containsKey("set-content")) { + sessionCookies.putAll(cookieStrToMap(res.headers["set-content"].toString().replace("path=/,", ""))) + } + return res + } + + public fun post( + url: String, headers: Map = mapOf(), + params: Map = mapOf(), + data: Any? = null, json: Any? = null, + auth: Authorization? = null, + cookies: Map? = null, + timeout: Double = DEFAULT_TIMEOUT, + allowRedirects: Boolean? = null, + stream: Boolean = false, files: List = listOf() + ): Response { + val res = khttp.post( + url, headers, params, + data, json, auth, + cookies, timeout, + allowRedirects, + stream, files + ) + sessionCookies.putAll(res.cookies.toMap()) + if (res.headers.containsKey("set-content")) { + sessionCookies.putAll(cookieStrToMap(res.headers["set-content"].toString().replace("path=/,", ""))) + } + return res + } + +}