mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 11:50:54 +07:00
[gitlab] populate User-Agent header for API requests
IDEA-320466 Fixed GitOrigin-RevId: 0ffa97efbdf05b55593268b922cdeaaefa175710
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1ca8b7cc81
commit
c92e8c72b7
@@ -6,8 +6,8 @@ import java.net.http.HttpRequest
|
||||
open class CommonHeadersConfigurer : HttpRequestConfigurer {
|
||||
|
||||
protected open val commonHeaders: Map<String, String> =
|
||||
mapOf("Accept-Encoding" to "gzip",
|
||||
"User-Agent" to "JetBrains IDE")
|
||||
mapOf(HttpClientUtil.ACCEPT_ENCODING_HEADER to HttpClientUtil.CONTENT_ENCODING_GZIP,
|
||||
HttpClientUtil.USER_AGENT_HEADER to "JetBrains IDE")
|
||||
|
||||
final override fun configure(builder: HttpRequest.Builder): HttpRequest.Builder = builder
|
||||
.apply { commonHeaders.forEach(::header) }
|
||||
|
||||
@@ -5,7 +5,10 @@ import com.intellij.collaboration.api.HttpStatusErrorException
|
||||
import com.intellij.collaboration.api.httpclient.HttpClientUtil.CONTENT_ENCODING_GZIP
|
||||
import com.intellij.collaboration.api.httpclient.HttpClientUtil.CONTENT_ENCODING_HEADER
|
||||
import com.intellij.collaboration.api.logName
|
||||
import com.intellij.openapi.application.ApplicationInfo
|
||||
import com.intellij.openapi.application.ApplicationNamesInfo
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.util.SystemInfo
|
||||
import java.io.InputStream
|
||||
import java.io.Reader
|
||||
import java.io.StringReader
|
||||
@@ -18,12 +21,15 @@ import java.util.zip.GZIPInputStream
|
||||
|
||||
object HttpClientUtil {
|
||||
|
||||
const val ACCEPT_ENCODING_HEADER = "Accept-Encoding"
|
||||
const val CONTENT_ENCODING_HEADER = "Content-Encoding"
|
||||
const val CONTENT_ENCODING_GZIP = "gzip"
|
||||
|
||||
const val CONTENT_TYPE_HEADER = "Content-Type"
|
||||
const val CONTENT_TYPE_JSON = "application/json"
|
||||
|
||||
const val USER_AGENT_HEADER = "User-Agent"
|
||||
|
||||
/**
|
||||
* Checks the status code of the response and throws [HttpStatusErrorException] if status code is not a successful one
|
||||
*
|
||||
@@ -67,6 +73,20 @@ object HttpClientUtil {
|
||||
checkStatusCodeWithLogging(logger, request.logName(), responseInfo.statusCode(), bodyStream)
|
||||
return responseReaderWithLogging(logger, request.logName(), bodyStream).use(reader)
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the User-Agent header value for the [agentName]
|
||||
* Append product, java and OS data
|
||||
*/
|
||||
fun getUserAgentValue(agentName: String): String {
|
||||
val ideName = ApplicationNamesInfo.getInstance().fullProductName.replace(' ', '-')
|
||||
val ideBuild = ApplicationInfo.getInstance().build.asString()
|
||||
val java = "JRE " + SystemInfo.JAVA_RUNTIME_VERSION
|
||||
val os = SystemInfo.OS_NAME + " " + SystemInfo.OS_VERSION
|
||||
val arch = SystemInfo.OS_ARCH
|
||||
|
||||
return "$agentName $ideName/$ideBuild ($java; $os; $arch)"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3,15 +3,13 @@ package org.jetbrains.plugins.gitlab.api
|
||||
|
||||
import com.intellij.collaboration.api.HttpApiHelper
|
||||
import com.intellij.collaboration.api.graphql.GraphQLApiHelper
|
||||
import com.intellij.collaboration.api.httpclient.AuthorizationConfigurer
|
||||
import com.intellij.collaboration.api.httpclient.CommonHeadersConfigurer
|
||||
import com.intellij.collaboration.api.httpclient.CompoundRequestConfigurer
|
||||
import com.intellij.collaboration.api.httpclient.RequestTimeoutConfigurer
|
||||
import com.intellij.collaboration.api.httpclient.*
|
||||
import com.intellij.collaboration.api.json.JsonHttpApiHelper
|
||||
import com.intellij.collaboration.api.json.loadJsonList
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.intellij.util.io.HttpSecurityUtil
|
||||
import org.jetbrains.plugins.gitlab.api.dto.GitLabGraphQLMutationResultDTO
|
||||
import java.net.http.HttpRequest
|
||||
import java.net.http.HttpResponse
|
||||
|
||||
interface GitLabApi : HttpApiHelper, JsonHttpApiHelper, GraphQLApiHelper
|
||||
@@ -39,19 +37,26 @@ class GitLabApiImpl private constructor(httpHelper: HttpApiHelper)
|
||||
override val authorizationHeaderValue: String
|
||||
get() = HttpSecurityUtil.createBearerAuthHeaderValue(tokenSupplier())
|
||||
}
|
||||
val requestConfigurer = CompoundRequestConfigurer(RequestTimeoutConfigurer(),
|
||||
CommonHeadersConfigurer(),
|
||||
authConfigurer)
|
||||
val requestConfigurer = CompoundRequestConfigurer(RequestTimeoutConfigurer(), GitLabHeadersConfigurer, authConfigurer)
|
||||
return HttpApiHelper(logger = logger<GitLabApi>(),
|
||||
requestConfigurer = requestConfigurer)
|
||||
}
|
||||
|
||||
private fun httpHelper(): HttpApiHelper {
|
||||
val requestConfigurer = CompoundRequestConfigurer(RequestTimeoutConfigurer(),
|
||||
CommonHeadersConfigurer())
|
||||
val requestConfigurer = CompoundRequestConfigurer(RequestTimeoutConfigurer(), GitLabHeadersConfigurer)
|
||||
return HttpApiHelper(logger = logger<GitLabApi>(),
|
||||
requestConfigurer = requestConfigurer)
|
||||
}
|
||||
|
||||
private const val PLUGIN_USER_AGENT_NAME = "IntelliJ-GitLab-Plugin"
|
||||
|
||||
private object GitLabHeadersConfigurer : HttpRequestConfigurer {
|
||||
override fun configure(builder: HttpRequest.Builder): HttpRequest.Builder =
|
||||
builder.apply {
|
||||
header(HttpClientUtil.ACCEPT_ENCODING_HEADER, HttpClientUtil.CONTENT_ENCODING_GZIP)
|
||||
header(HttpClientUtil.USER_AGENT_HEADER, HttpClientUtil.getUserAgentValue(PLUGIN_USER_AGENT_NAME))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user