Skip to content

Commit b429e93

Browse files
authored
Disable JetBrains local ports forwarding with FF (#20274)
* Disable gitpod port forwarding * Use FF and env to control port exposing * Rename to `forwarding` * disable local ports forwarding only
1 parent c1cbbc0 commit b429e93

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

components/ide/jetbrains/backend-plugin/src/main/kotlin/io/gitpod/jetbrains/remote/AbstractGitpodPortForwardingService.kt

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import com.intellij.util.application
1313
import com.jetbrains.rd.platform.codeWithMe.portForwarding.*
1414
import com.jetbrains.rd.util.URI
1515
import com.jetbrains.rd.util.lifetime.Lifetime
16-
import com.jetbrains.rd.util.threading.coroutines.launch
1716
import io.gitpod.supervisor.api.Status
1817
import io.gitpod.supervisor.api.Status.PortsStatus
1918
import io.gitpod.supervisor.api.StatusServiceGrpc
@@ -41,6 +40,10 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
4140
private fun start() {
4241
if (application.isHeadlessEnvironment) return
4342

43+
if (isLocalPortForwardingDisabled()) {
44+
thisLogger().warn("gitpod: Local port forwarding is disabled.")
45+
}
46+
4447
observePortsListWhileProjectIsOpen()
4548
}
4649

@@ -77,7 +80,7 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
7780
val portsStatusRequest = Status.PortsStatusRequest.newBuilder().setObserve(true).build()
7881

7982
val portsStatusResponseObserver = object :
80-
ClientResponseObserver<Status.PortsStatusRequest, Status.PortsStatusResponse> {
83+
ClientResponseObserver<Status.PortsStatusRequest, Status.PortsStatusResponse> {
8184
override fun beforeStart(request: ClientCallStreamObserver<Status.PortsStatusRequest>) {
8285
lifetime.onTerminationOrNow { request.cancel("gitpod: Service lifetime terminated.", null) }
8386
}
@@ -100,6 +103,10 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
100103
return completableFuture
101104
}
102105

106+
private fun isLocalPortForwardingDisabled(): Boolean {
107+
return System.getenv("GITPOD_DISABLE_JETBRAINS_LOCAL_PORT_FORWARDING")?.toBoolean() ?: false
108+
}
109+
103110
private fun syncPortsListWithClient(response: Status.PortsStatusResponse) {
104111
val ignoredPorts = ignoredPortsForNotificationService.getIgnoredPorts()
105112
val portsList = response.portsList.filter { !ignoredPorts.contains(it.localPort) }
@@ -114,11 +121,11 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
114121
perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(EXPOSED_PORT_LABEL) }
115122
}
116123
val forwardedPortsToStopForwarding = perClientPortForwardingManager.getPorts(FORWARDED_PORT_LABEL)
117-
.map { it.hostPortNumber }
118-
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
124+
.map { it.hostPortNumber }
125+
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
119126
val exposedPortsToStopExposingOnClient = perClientPortForwardingManager.getPorts(EXPOSED_PORT_LABEL)
120-
.map { it.hostPortNumber }
121-
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
127+
.map { it.hostPortNumber }
128+
.filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
122129

123130
servedPortsToStartForwarding.forEach { startForwarding(it) }
124131

@@ -132,11 +139,14 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
132139
}
133140

134141
private fun startForwarding(portStatus: PortsStatus) {
142+
if (isLocalPortForwardingDisabled()) {
143+
return
144+
}
135145
try {
136146
perClientPortForwardingManager.forwardPort(
137-
portStatus.localPort,
138-
PortType.TCP,
139-
setOf(FORWARDED_PORT_LABEL),
147+
portStatus.localPort,
148+
PortType.TCP,
149+
setOf(FORWARDED_PORT_LABEL),
140150
)
141151
} catch (throwable: Throwable) {
142152
if (throwable !is PortAlreadyForwardedException) {
@@ -147,22 +157,22 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
147157

148158
private fun stopForwarding(hostPort: Int) {
149159
perClientPortForwardingManager.getPorts(hostPort)
150-
.filter { it.labels.contains(FORWARDED_PORT_LABEL) }
151-
.forEach { perClientPortForwardingManager.removePort(it) }
160+
.filter { it.labels.contains(FORWARDED_PORT_LABEL) }
161+
.forEach { perClientPortForwardingManager.removePort(it) }
152162
}
153163

154164
private fun startExposingOnClient(portStatus: PortsStatus) {
155165
perClientPortForwardingManager.exposePort(
156-
portStatus.localPort,
157-
portStatus.exposed.url,
158-
setOf(EXPOSED_PORT_LABEL),
166+
portStatus.localPort,
167+
portStatus.exposed.url,
168+
setOf(EXPOSED_PORT_LABEL),
159169
)
160170
}
161171

162172
private fun stopExposingOnClient(hostPort: Int) {
163173
perClientPortForwardingManager.getPorts(hostPort)
164-
.filter { it.labels.contains(EXPOSED_PORT_LABEL) }
165-
.forEach { perClientPortForwardingManager.removePort(it) }
174+
.filter { it.labels.contains(EXPOSED_PORT_LABEL) }
175+
.forEach { perClientPortForwardingManager.removePort(it) }
166176
}
167177

168178
private fun updatePortsPresentation(portStatus: PortsStatus) {

components/server/src/workspace/workspace-starter.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1552,16 +1552,20 @@ export class WorkspaceStarter {
15521552
sysEnvvars.push(orgIdEnv);
15531553

15541554
const client = getExperimentsClientForBackend();
1555-
const [isSetJavaXmx, isSetJavaProcessorCount] = await Promise.all([
1555+
const [isSetJavaXmx, isSetJavaProcessorCount, disableJetBrainsLocalPortForwarding] = await Promise.all([
15561556
client
15571557
.getValueAsync("supervisor_set_java_xmx", false, { user })
15581558
.then((v) => newEnvVar("GITPOD_IS_SET_JAVA_XMX", String(v))),
15591559
client
15601560
.getValueAsync("supervisor_set_java_processor_count", false, { user })
15611561
.then((v) => newEnvVar("GITPOD_IS_SET_JAVA_PROCESSOR_COUNT", String(v))),
1562+
client
1563+
.getValueAsync("disable_jetbrains_local_port_forwarding", false, { user })
1564+
.then((v) => newEnvVar("GITPOD_DISABLE_JETBRAINS_LOCAL_PORT_FORWARDING", String(v))),
15621565
]);
15631566
sysEnvvars.push(isSetJavaXmx);
15641567
sysEnvvars.push(isSetJavaProcessorCount);
1568+
sysEnvvars.push(disableJetBrainsLocalPortForwarding);
15651569
const spec = new StartWorkspaceSpec();
15661570
await createGitpodTokenPromise;
15671571
spec.setEnvvarsList(envvars);

0 commit comments

Comments
 (0)