Skip to content

Commit

Permalink
Clean code from GitpodServerLauncher and update JetBrains backend-plu…
Browse files Browse the repository at this point in the history
…gin to work when user has proxies
  • Loading branch information
felladrin authored and roboquat committed Jul 13, 2022
1 parent d1c412e commit de67bd4
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand All @@ -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<String, List<String>> 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;
Expand Down Expand Up @@ -161,10 +116,10 @@ public void onError(Session session, Throwable thr) {
}, ClientEndpointConfig.Builder.create().configurator(new ClientEndpointConfig.Configurator() {
@Override
public void beforeRequest(final Map<String, List<String>> 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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@
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";
String token = "CHANGE-ME";
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit de67bd4

Please sign in to comment.