@@ -7,7 +7,6 @@ import com.coder.toolbox.sdk.convertors.LoggingConverterFactory
77import com.coder.toolbox.sdk.convertors.OSConverter
88import com.coder.toolbox.sdk.convertors.UUIDConverter
99import com.coder.toolbox.sdk.ex.APIResponseException
10- import com.coder.toolbox.sdk.interceptors.LoggingInterceptor
1110import com.coder.toolbox.sdk.v2.CoderV2RestFacade
1211import com.coder.toolbox.sdk.v2.models.ApiErrorResponse
1312import com.coder.toolbox.sdk.v2.models.BuildInfo
@@ -21,23 +20,14 @@ import com.coder.toolbox.sdk.v2.models.WorkspaceBuildReason
2120import com.coder.toolbox.sdk.v2.models.WorkspaceResource
2221import com.coder.toolbox.sdk.v2.models.WorkspaceStatus
2322import com.coder.toolbox.sdk.v2.models.WorkspaceTransition
24- import com.coder.toolbox.util.CoderHostnameVerifier
25- import com.coder.toolbox.util.coderSocketFactory
26- import com.coder.toolbox.util.coderTrustManagers
27- import com.coder.toolbox.util.getArch
28- import com.coder.toolbox.util.getHeaders
29- import com.coder.toolbox.util.getOS
30- import com.jetbrains.toolbox.api.remoteDev.connection.ProxyAuth
3123import com.squareup.moshi.Moshi
32- import okhttp3.Credentials
3324import okhttp3.OkHttpClient
3425import retrofit2.Response
3526import retrofit2.Retrofit
3627import retrofit2.converter.moshi.MoshiConverterFactory
3728import java.net.HttpURLConnection
3829import java.net.URL
3930import java.util.UUID
40- import javax.net.ssl.X509TrustManager
4131
4232/* *
4333 * An HTTP client that can make requests to the Coder API.
@@ -50,7 +40,6 @@ open class CoderRestClient(
5040 val token : String? ,
5141 private val pluginVersion : String = " development" ,
5242) {
53- private val settings = context.settingsStore.readOnly()
5443 private lateinit var moshi: Moshi
5544 private lateinit var httpClient: OkHttpClient
5645 private lateinit var retroRestClient: CoderV2RestFacade
@@ -71,68 +60,12 @@ open class CoderRestClient(
7160 .add(UUIDConverter ())
7261 .build()
7362
74- val socketFactory = coderSocketFactory(settings.tls)
75- val trustManagers = coderTrustManagers(settings.tls.caPath)
76- var builder = OkHttpClient .Builder ()
77-
78- if (context.proxySettings.getProxy() != null ) {
79- context.logger.info(" proxy: ${context.proxySettings.getProxy()} " )
80- builder.proxy(context.proxySettings.getProxy())
81- } else if (context.proxySettings.getProxySelector() != null ) {
82- context.logger.info(" proxy selector: ${context.proxySettings.getProxySelector()} " )
83- builder.proxySelector(context.proxySettings.getProxySelector()!! )
84- }
85-
86- // Note: This handles only HTTP/HTTPS proxy authentication.
87- // SOCKS5 proxy authentication is currently not supported due to limitations described in:
88- // https://youtrack.jetbrains.com/issue/TBX-14532/Missing-proxy-authentication-settings#focus=Comments-27-12265861.0-0
89- builder.proxyAuthenticator { _, response ->
90- val proxyAuth = context.proxySettings.getProxyAuth()
91- if (proxyAuth == null || proxyAuth !is ProxyAuth .Basic ) {
92- return @proxyAuthenticator null
93- }
94- val credentials = Credentials .basic(proxyAuth.username, proxyAuth.password)
95- response.request.newBuilder()
96- .header(" Proxy-Authorization" , credentials)
97- .build()
98- }
99-
100- if (context.settingsStore.requireTokenAuth) {
101- if (token.isNullOrBlank()) {
102- throw IllegalStateException (" Token is required for $url deployment" )
103- }
104- builder = builder.addInterceptor {
105- it.proceed(
106- it.request().newBuilder().addHeader(" Coder-Session-Token" , token).build()
107- )
108- }
109- }
110-
111- httpClient =
112- builder
113- .sslSocketFactory(socketFactory, trustManagers[0 ] as X509TrustManager )
114- .hostnameVerifier(CoderHostnameVerifier (settings.tls.altHostname))
115- .retryOnConnectionFailure(true )
116- .addInterceptor {
117- it.proceed(
118- it.request().newBuilder().addHeader(
119- " User-Agent" ,
120- " Coder Toolbox/$pluginVersion (${getOS()} ; ${getArch()} )" ,
121- ).build(),
122- )
123- }
124- .addInterceptor {
125- var request = it.request()
126- val headers = getHeaders(url, settings.headerCommand)
127- if (headers.isNotEmpty()) {
128- val reqBuilder = request.newBuilder()
129- headers.forEach { h -> reqBuilder.addHeader(h.key, h.value) }
130- request = reqBuilder.build()
131- }
132- it.proceed(request)
133- }
134- .addInterceptor(LoggingInterceptor (context))
135- .build()
63+ httpClient = CoderHttpClientBuilder .build(
64+ context,
65+ pluginVersion,
66+ url,
67+ token
68+ )
13669
13770 retroRestClient =
13871 Retrofit .Builder ().baseUrl(url.toString()).client(httpClient)
0 commit comments