diff --git a/android/build.gradle b/android/build.gradle index 6eec8cd8..759e1c51 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 @@ -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" 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