diff --git a/components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/api/GitpodServerLauncher.java b/components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/api/GitpodServerLauncher.java index f1ea3ddeda8f76..d94bce0c6dff43 100644 --- a/components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/api/GitpodServerLauncher.java +++ b/components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/api/GitpodServerLauncher.java @@ -22,7 +22,6 @@ import java.net.Proxy; import java.net.SocketAddress; import java.net.URI; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -50,16 +49,6 @@ private GitpodServerLauncher( this.client = client; } - public GitpodServerConnection listen( - String apiUrl, - String origin, - String userAgent, - String clientVersion, - String token - ) throws Exception { - return listen(apiUrl, origin, userAgent, clientVersion, token, Collections.emptyList(), null); - } - public GitpodServerConnection listen( String apiUrl, String origin, @@ -70,45 +59,11 @@ public GitpodServerConnection listen( SSLContext sslContext ) throws Exception { String gitpodHost = URI.create(apiUrl).getHost(); - HttpClient httpClient; - if (sslContext == null && proxies.size() == 0) { - GitpodServerConnectionImpl connection = new GitpodServerConnectionImpl(gitpodHost); - connection.setSession(ContainerProvider.getWebSocketContainer().connectToServer(new Endpoint() { - @Override - public void onOpen(Session session, EndpointConfig config) { - session.addMessageHandler(new WebSocketMessageHandler(messageReader, jsonHandler, remoteEndpoint)); - messageWriter.setSession(session); - client.notifyConnect(); - } - - @Override - public void onClose(Session session, CloseReason closeReason) { - connection.complete(closeReason); - } - - @Override - public void onError(Session session, Throwable thr) { - GitpodServerConnectionImpl.LOG.log(Level.WARNING, gitpodHost + ": connection error:", thr); - connection.completeExceptionally(thr); - } - }, ClientEndpointConfig.Builder.create().configurator(new ClientEndpointConfig.Configurator() { - @Override - public void beforeRequest(final Map> headers) { - headers.put("Origin", Arrays.asList(origin)); - headers.put("Authorization", Arrays.asList("Bearer " + token)); - headers.put("User-Agent", Arrays.asList(userAgent)); - headers.put("X-Client-Version", Arrays.asList(clientVersion)); - } - }).build(), URI.create(apiUrl))); - return connection; - } - if (sslContext == null) { - httpClient = new HttpClient(); - } else { - SslContextFactory ssl = new SslContextFactory.Client(); + SslContextFactory ssl = new SslContextFactory.Client(); + if (sslContext != null) { ssl.setSslContext(sslContext); - httpClient = new HttpClient(ssl); } + HttpClient httpClient = new HttpClient(ssl); for (Proxy proxy : proxies) { if (proxy.type().equals(Proxy.Type.DIRECT)) { continue; @@ -161,10 +116,10 @@ public void onError(Session session, Throwable thr) { }, ClientEndpointConfig.Builder.create().configurator(new ClientEndpointConfig.Configurator() { @Override public void beforeRequest(final Map> headers) { - headers.put("Origin", Arrays.asList(origin)); - headers.put("Authorization", Arrays.asList("Bearer " + token)); - headers.put("User-Agent", Arrays.asList(userAgent)); - headers.put("X-Client-Version", Arrays.asList(clientVersion)); + headers.put("Origin", Collections.singletonList(origin)); + headers.put("Authorization", Collections.singletonList("Bearer " + token)); + headers.put("User-Agent", Collections.singletonList(userAgent)); + headers.put("X-Client-Version", Collections.singletonList(clientVersion)); } }).build(), URI.create(apiUrl))); return connection; diff --git a/components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/testclient/TestClient.java b/components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/testclient/TestClient.java index ad3d98d94c2edf..beca0f50d3478d 100644 --- a/components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/testclient/TestClient.java +++ b/components/gitpod-protocol/java/src/main/java/io/gitpod/gitpodprotocol/testclient/TestClient.java @@ -10,6 +10,8 @@ import io.gitpod.gitpodprotocol.api.entities.SendHeartBeatOptions; import io.gitpod.gitpodprotocol.api.entities.User; +import java.util.Collections; + public class TestClient { public static void main(String[] args) throws Exception { String uri = "wss://gitpod.io/api/v1"; @@ -17,7 +19,7 @@ public static void main(String[] args) throws Exception { String origin = "https://CHANGE-ME.gitpod.io/"; GitpodClient client = new GitpodClient(); - GitpodServerLauncher.create(client).listen(uri, origin, token, "Test", "Test"); + GitpodServerLauncher.create(client).listen(uri, origin, token, "Test", "Test", Collections.emptyList(), null); GitpodServer gitpodServer = client.getServer(); User user = gitpodServer.getLoggedInUser().join(); System.out.println("logged in user:" + user); diff --git a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodManager.kt b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodManager.kt index ef6ffc013186b1..16033e6d9352cf 100644 --- a/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodManager.kt +++ b/components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/GitpodManager.kt @@ -16,6 +16,8 @@ import com.intellij.openapi.extensions.PluginId import com.intellij.openapi.util.LowMemoryWatcher import com.intellij.remoteDev.util.onTerminationOrNow import com.intellij.util.application +import com.intellij.util.net.ssl.CertificateManager +import com.intellij.util.proxy.CommonProxy import com.jetbrains.rd.util.lifetime.Lifetime import git4idea.config.GitVcsApplicationSettings import io.gitpod.gitpodprotocol.api.GitpodClient @@ -42,6 +44,7 @@ import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import org.jetbrains.ide.BuiltInServerManager import java.net.URI +import java.net.URL import java.net.http.HttpClient import java.net.http.HttpRequest import java.net.http.HttpResponse @@ -271,14 +274,20 @@ class GitpodManager : Disposable { val connect = { val originalClassLoader = Thread.currentThread().contextClassLoader try { + val proxies = CommonProxy.getInstance().select(URL(info.gitpodHost)) + val sslContext = CertificateManager.getInstance().sslContext + // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/360003146180/comments/360000376240 Thread.currentThread().contextClassLoader = HeartbeatService::class.java.classLoader + launcher.listen( info.gitpodApi.endpoint, info.gitpodHost, plugin.pluginId.idString, plugin.version, - tokenResponse.token + tokenResponse.token, + proxies, + sslContext ) } finally { Thread.currentThread().contextClassLoader = originalClassLoader