From 2dda634adf5b36e6942d096c444097c22d0fbc94 Mon Sep 17 00:00:00 2001 From: Mehedi Hassan Piash Date: Fri, 25 Aug 2023 14:23:13 +0600 Subject: [PATCH 1/2] MOBY-836: Implemented cust WebkitCookieManager in CookieJar --- android/build.gradle | 2 +- .../com/vydia/RNUploader/UploaderModule.kt | 37 ++++++++++++++----- .../vydia/RNUploader/WebkitCookieManager.kt | 21 +++++++++++ 3 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 android/src/main/java/com/vydia/RNUploader/WebkitCookieManager.kt diff --git a/android/build.gradle b/android/build.gradle index 6eec8cd8..96f3d327 100755 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,6 +1,6 @@ buildscript { ext { - kotlinVersion = '1.6.20' + kotlinVersion = '1.8.10' buildToolsVersion = '33.0.0' compileSdkVersion = 33 targetSdkVersion = 33 diff --git a/android/src/main/java/com/vydia/RNUploader/UploaderModule.kt b/android/src/main/java/com/vydia/RNUploader/UploaderModule.kt index fcb0dec3..52562698 100644 --- a/android/src/main/java/com/vydia/RNUploader/UploaderModule.kt +++ b/android/src/main/java/com/vydia/RNUploader/UploaderModule.kt @@ -6,6 +6,7 @@ import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.os.Build +import android.webkit.CookieManager; import android.util.Log import android.webkit.MimeTypeMap import com.facebook.react.BuildConfig @@ -30,6 +31,7 @@ class UploaderModule(val reactContext: ReactApplicationContext) : ReactContextBa private val TAG = "UploaderBridge" private var notificationChannelID = "fn_channel_file_upload" private var isGlobalRequestObserver = false + private val cookieManager = CookieManager.getInstance() override fun getName(): String { return "RNFileUploader" @@ -113,15 +115,32 @@ class UploaderModule(val reactContext: ReactApplicationContext) : ReactContextBa } readTimeout = options.getInt("readTimeout") } - httpStack = OkHttpStack(OkHttpClient().newBuilder() - .followRedirects(followRedirects) - .followSslRedirects(followSslRedirects) - .retryOnConnectionFailure(retryOnConnectionFailure) - .connectTimeout(connectTimeout.toLong(), TimeUnit.SECONDS) - .writeTimeout(writeTimeout.toLong(), TimeUnit.SECONDS) - .readTimeout(readTimeout.toLong(), TimeUnit.SECONDS) - .cache(null) - .build()) + if (options.hasKey("isNativeCookie")){ + if (options.getType("isNativeCookie") != ReadableType.Boolean) { + promise.reject(IllegalArgumentException("isNativeCookie must be a boolean.")) + return + } + httpStack = OkHttpStack(OkHttpClient().newBuilder() + .followRedirects(followRedirects) + .followSslRedirects(followSslRedirects) + .retryOnConnectionFailure(retryOnConnectionFailure) + .connectTimeout(connectTimeout.toLong(), TimeUnit.SECONDS) + .writeTimeout(writeTimeout.toLong(), TimeUnit.SECONDS) + .readTimeout(readTimeout.toLong(), TimeUnit.SECONDS) + .cookieJar(WebkitCookieManager(cookieManager)) + .cache(null) + .build()) + }else{ + httpStack = OkHttpStack(OkHttpClient().newBuilder() + .followRedirects(followRedirects) + .followSslRedirects(followSslRedirects) + .retryOnConnectionFailure(retryOnConnectionFailure) + .connectTimeout(connectTimeout.toLong(), TimeUnit.SECONDS) + .writeTimeout(writeTimeout.toLong(), TimeUnit.SECONDS) + .readTimeout(readTimeout.toLong(), TimeUnit.SECONDS) + .cache(null) + .build()) + } } /* diff --git a/android/src/main/java/com/vydia/RNUploader/WebkitCookieManager.kt b/android/src/main/java/com/vydia/RNUploader/WebkitCookieManager.kt new file mode 100644 index 00000000..9ceedc99 --- /dev/null +++ b/android/src/main/java/com/vydia/RNUploader/WebkitCookieManager.kt @@ -0,0 +1,21 @@ +package com.vydia.RNUploader + +import android.webkit.CookieManager +import okhttp3.Cookie +import okhttp3.CookieJar +import okhttp3.HttpUrl + +class WebkitCookieManager (private val cookieManager: CookieManager) : CookieJar { + + override fun saveFromResponse(url: HttpUrl, cookies: List) { + cookies.forEach { cookie -> + cookieManager.setCookie(url.toString(), cookie.toString()) + } + } + + override fun loadForRequest(url: HttpUrl): List = + when (val cookies = cookieManager.getCookie(url.toString())) { + null -> emptyList() + else -> cookies.split("; ").mapNotNull { Cookie.parse(url, it) } + } +} \ No newline at end of file From 5c1ae571e225438688b09c1178fc7fe6a838b9c2 Mon Sep 17 00:00:00 2001 From: Mehedi Hassan Piash Date: Fri, 25 Aug 2023 14:57:06 +0600 Subject: [PATCH 2/2] MOBY-836: Replace android-extension with kotlin-parcelize --- android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/build.gradle b/android/build.gradle index 96f3d327..759e1c51 100755 --- a/android/build.gradle +++ b/android/build.gradle @@ -20,7 +20,7 @@ buildscript { apply plugin: 'com.android.library' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' +apply plugin: 'kotlin-parcelize' def DEFAULT_COMPILE_SDK_VERSION = 28 def DEFAULT_BUILD_TOOLS_VERSION = "28.0.3"