From da4b782d344691d91f4ab2f3456389557cb00970 Mon Sep 17 00:00:00 2001 From: Chris Narkiewicz Date: Sat, 11 Jan 2020 20:16:03 +0000 Subject: [PATCH] Make response member in OkHttpMethodBase nullable The class uses non-null lateinit variable that is not initialized. The member should be of nullable type. Fixes nextcloud/android#5073 Fixes nextcloud/android#5102 Fixes nextcloud/android#5100 Fixes nextcloud/android#5142 Fixes nextcloud/android#5156 Signed-off-by: Chris Narkiewicz --- .../com/nextcloud/common/NextcloudClient.kt | 4 +- .../com/nextcloud/common/OkHttpMethodBase.kt | 47 ++++++++++++++----- .../GetActivitiesRemoteOperation.java | 3 +- 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/nextcloud/common/NextcloudClient.kt b/src/main/java/com/nextcloud/common/NextcloudClient.kt index 48694e00a7..36a034d77a 100644 --- a/src/main/java/com/nextcloud/common/NextcloudClient.kt +++ b/src/main/java/com/nextcloud/common/NextcloudClient.kt @@ -107,9 +107,9 @@ class NextcloudClient(var baseUri: Uri, val context: Context) : OkHttpClient() { destination = redirectedDestination if (getRequestHeader("Destination").isNullOrEmpty()) { - method.requestHeaders.put("destination", destination) + method.addRequestHeader("destination", destination) } else { - method.requestHeaders.put("Destination", destination) + method.addRequestHeader("Destination", destination) } } status = method.execute(this) diff --git a/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt b/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt index 2b761270c0..4e7ba3b34a 100644 --- a/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt +++ b/src/main/java/com/nextcloud/common/OkHttpMethodBase.kt @@ -39,10 +39,14 @@ import okhttp3.Response */ abstract class OkHttpMethodBase(var uri: String, val useOcsApiRequestHeader: Boolean) { - lateinit var response: Response - var queryMap: Map = HashMap() - var requestHeaders: MutableMap = HashMap() - var requestBuilder: Request.Builder = Request.Builder() + companion object { + const val UNKOWN_STATUS_CODE: Int = -1; + } + + private var response: Response? = null + private var queryMap: Map = HashMap() + private val requestHeaders: MutableMap = HashMap() + private val requestBuilder: Request.Builder = Request.Builder() fun OkHttpMethodBase() { requestHeaders.put("http.protocol.single-cookie-header", "true") @@ -56,32 +60,53 @@ abstract class OkHttpMethodBase(var uri: String, return httpBuilder.build() } + /** + * Set request headers completely replacing existing headers. + * To clear request headers, call this method with empty list. + * + * @param headers List of header-value pairs + */ + fun setRequestHeaders(vararg headers: Pair) { + requestHeaders.clear() + requestHeaders.putAll(headers) + } + + /** + * Adds request header, overwriting any existing value. + * + * @param header HTTP request header name + * @param value HTTP request header value + */ + fun addRequestHeader(header: String, value: String) { + requestHeaders.put(header, value) + } + fun setQueryString(params: Map) { queryMap = params } fun getResponseBodyAsString(): String { - return response.body()?.string() ?: "" + return response?.body()?.string() ?: "" } fun releaseConnection() { - response.body()?.close() + response?.body()?.close() } fun getStatusCode(): Int { - return response.code() + return response?.code() ?: UNKOWN_STATUS_CODE } fun getStatusText(): String { - return response.message() + return response?.message() ?: "" } fun getResponseHeaders(): Headers { - return response.headers() + return response?.headers() ?: Headers.Builder().build() } fun getResponseHeader(name: String): String? { - return response.header(name) + return response?.header(name) } fun execute(nextcloudClient: NextcloudClient): Int { @@ -103,7 +128,7 @@ abstract class OkHttpMethodBase(var uri: String, if (nextcloudClient.followRedirects) { return nextcloudClient.followRedirection(this).getLastStatus() } else { - return response.code() + return response?.code() ?: UNKOWN_STATUS_CODE } } } diff --git a/src/main/java/com/owncloud/android/lib/resources/activities/GetActivitiesRemoteOperation.java b/src/main/java/com/owncloud/android/lib/resources/activities/GetActivitiesRemoteOperation.java index 5133a36fa4..ad80d1ce4b 100644 --- a/src/main/java/com/owncloud/android/lib/resources/activities/GetActivitiesRemoteOperation.java +++ b/src/main/java/com/owncloud/android/lib/resources/activities/GetActivitiesRemoteOperation.java @@ -130,8 +130,7 @@ public RemoteOperationResult run(NextcloudClient client) { status = client.execute(get); String response = get.getResponseBodyAsString(); - - String nextPageHeader = get.response.header("X-Activity-Last-Given"); + String nextPageHeader = get.getResponseHeader("X-Activity-Last-Given"); if (nextPageHeader != null) { lastGiven = Integer.parseInt(nextPageHeader); } else {