@@ -13,7 +13,6 @@ import com.intellij.util.application
13
13
import com.jetbrains.rd.platform.codeWithMe.portForwarding.*
14
14
import com.jetbrains.rd.util.URI
15
15
import com.jetbrains.rd.util.lifetime.Lifetime
16
- import com.jetbrains.rd.util.threading.coroutines.launch
17
16
import io.gitpod.supervisor.api.Status
18
17
import io.gitpod.supervisor.api.Status.PortsStatus
19
18
import io.gitpod.supervisor.api.StatusServiceGrpc
@@ -41,6 +40,10 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
41
40
private fun start () {
42
41
if (application.isHeadlessEnvironment) return
43
42
43
+ if (isLocalPortForwardingDisabled()) {
44
+ thisLogger().warn(" gitpod: Local port forwarding is disabled." )
45
+ }
46
+
44
47
observePortsListWhileProjectIsOpen()
45
48
}
46
49
@@ -77,7 +80,7 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
77
80
val portsStatusRequest = Status .PortsStatusRequest .newBuilder().setObserve(true ).build()
78
81
79
82
val portsStatusResponseObserver = object :
80
- ClientResponseObserver <Status .PortsStatusRequest , Status .PortsStatusResponse > {
83
+ ClientResponseObserver <Status .PortsStatusRequest , Status .PortsStatusResponse > {
81
84
override fun beforeStart (request : ClientCallStreamObserver <Status .PortsStatusRequest >) {
82
85
lifetime.onTerminationOrNow { request.cancel(" gitpod: Service lifetime terminated." , null ) }
83
86
}
@@ -100,6 +103,10 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
100
103
return completableFuture
101
104
}
102
105
106
+ private fun isLocalPortForwardingDisabled (): Boolean {
107
+ return System .getenv(" GITPOD_DISABLE_JETBRAINS_LOCAL_PORT_FORWARDING" )?.toBoolean() ? : false
108
+ }
109
+
103
110
private fun syncPortsListWithClient (response : Status .PortsStatusResponse ) {
104
111
val ignoredPorts = ignoredPortsForNotificationService.getIgnoredPorts()
105
112
val portsList = response.portsList.filter { ! ignoredPorts.contains(it.localPort) }
@@ -114,11 +121,11 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
114
121
perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(EXPOSED_PORT_LABEL ) }
115
122
}
116
123
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) }
119
126
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) }
122
129
123
130
servedPortsToStartForwarding.forEach { startForwarding(it) }
124
131
@@ -132,11 +139,14 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
132
139
}
133
140
134
141
private fun startForwarding (portStatus : PortsStatus ) {
142
+ if (isLocalPortForwardingDisabled()) {
143
+ return
144
+ }
135
145
try {
136
146
perClientPortForwardingManager.forwardPort(
137
- portStatus.localPort,
138
- PortType .TCP ,
139
- setOf (FORWARDED_PORT_LABEL ),
147
+ portStatus.localPort,
148
+ PortType .TCP ,
149
+ setOf (FORWARDED_PORT_LABEL ),
140
150
)
141
151
} catch (throwable: Throwable ) {
142
152
if (throwable !is PortAlreadyForwardedException ) {
@@ -147,22 +157,22 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
147
157
148
158
private fun stopForwarding (hostPort : Int ) {
149
159
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) }
152
162
}
153
163
154
164
private fun startExposingOnClient (portStatus : PortsStatus ) {
155
165
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 ),
159
169
)
160
170
}
161
171
162
172
private fun stopExposingOnClient (hostPort : Int ) {
163
173
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) }
166
176
}
167
177
168
178
private fun updatePortsPresentation (portStatus : PortsStatus ) {
0 commit comments