-
-
Notifications
You must be signed in to change notification settings - Fork 468
Expand file tree
/
Copy pathLoggingInsecureRestClient.kt
More file actions
69 lines (59 loc) · 2.39 KB
/
LoggingInsecureRestClient.kt
File metadata and controls
69 lines (59 loc) · 2.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package io.sentry.systemtest.util
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import okhttp3.Credentials
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response
import org.slf4j.LoggerFactory
open class LoggingInsecureRestClient {
val logger = LoggerFactory.getLogger(LoggingInsecureRestClient::class.java)
var lastKnownStatusCode: Int? = null
protected inline fun <reified T> callTyped(requestBuilder: Request.Builder, useAuth: Boolean, extraHeaders: Map<String, String>? = null): T? {
val response = call(requestBuilder, useAuth, extraHeaders)
val responseBody = response?.body?.string()
if (response?.isSuccessful != true) {
return null
}
return responseBody?.let { objectMapper().readValue(it, T::class.java) }
}
protected fun call(requestBuilder: Request.Builder, useAuth: Boolean, extraHeaders: Map<String, String>? = null): Response? {
try {
val request = requestBuilder.also { originalRequest ->
var modifiedRequest = originalRequest
if (useAuth) {
modifiedRequest = modifiedRequest.header(
"Authorization",
Credentials.basic("user", "password")
)
}
extraHeaders?.forEach { key, value ->
modifiedRequest = modifiedRequest.header(key, value)
}
modifiedRequest
}.build()
val call = client().newCall(request)
val response = call.execute()
lastKnownStatusCode = response.code
return response
} catch (e: Exception) {
lastKnownStatusCode = null
logger.error("Request failed", e)
return null
}
}
protected fun client(): OkHttpClient {
return OkHttpClient.Builder()
.build()
}
protected fun objectMapper(): ObjectMapper {
return jacksonObjectMapper()
}
protected fun toRequestBody(o: Any?): RequestBody {
val stringValue = objectMapper().writeValueAsString(o)
return stringValue.toRequestBody("application/json; charset=utf-8".toMediaType())
}
}