@@ -76,7 +76,7 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
7676        val  portsStatusRequest =  Status .PortsStatusRequest .newBuilder().setObserve(true ).build()
7777
7878        val  portsStatusResponseObserver =  object  : 
79-                  ClientResponseObserver <Status .PortsStatusRequest , Status .PortsStatusResponse > {
79+             ClientResponseObserver <Status .PortsStatusRequest , Status .PortsStatusResponse > {
8080            override  fun  beforeStart (request :  ClientCallStreamObserver <Status .PortsStatusRequest >) {
8181                lifetime.onTerminationOrNow { request.cancel(" gitpod: Service lifetime terminated."  , null ) }
8282            }
@@ -99,43 +99,51 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
9999        return  completableFuture
100100    }
101101
102+     private  fun  isPortExposingDisabled (): Boolean  {
103+         return  System .getenv(" GITPOD_DISABLE_JETBRAINS_LOCAL_PORT_EXPOSE"  )?.toBoolean() ? :  false 
104+     }
105+ 
102106    private  fun  syncPortsListWithClient (response :  Status .PortsStatusResponse ) {
103- //         val ignoredPorts = ignoredPortsForNotificationService.getIgnoredPorts()
104- //         val portsList = response.portsList.filter { !ignoredPorts.contains(it.localPort) }
105- //         val portsNumbersFromPortsList = portsList.map { it.localPort }
106- //         val servedPorts = portsList.filter { it.served }
107- //         val exposedPorts = servedPorts.filter { it.exposed?.url?.isNotBlank() ?: false }
108- //         val portsNumbersFromNonServedPorts = portsList.filter { !it.served }.map { it.localPort }
109- //         val servedPortsToStartForwarding = servedPorts.filter {
110- //             perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(FORWARDED_PORT_LABEL) }
111- //         }
112- //         val exposedPortsToStartExposingOnClient = exposedPorts.filter {
113- //             perClientPortForwardingManager.getPorts(it.localPort).none { p -> p.labels.contains(EXPOSED_PORT_LABEL) }
114- //         }
115- //         val forwardedPortsToStopForwarding = perClientPortForwardingManager.getPorts(FORWARDED_PORT_LABEL)
116- //                 .map { it.hostPortNumber }
117- //                 .filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
118- //         val exposedPortsToStopExposingOnClient = perClientPortForwardingManager.getPorts(EXPOSED_PORT_LABEL)
119- //                 .map { it.hostPortNumber }
120- //                 .filter { portsNumbersFromNonServedPorts.contains(it) || !portsNumbersFromPortsList.contains(it) }
121- // 
122- //         servedPortsToStartForwarding.forEach { startForwarding(it) }
123- // 
124- //         exposedPortsToStartExposingOnClient.forEach { startExposingOnClient(it) }
125- // 
126- //         forwardedPortsToStopForwarding.forEach { stopForwarding(it) }
127- // 
128- //         exposedPortsToStopExposingOnClient.forEach { stopExposingOnClient(it) }
129- // 
130- //         portsList.forEach { updatePortsPresentation(it) }
107+         if  (isPortExposingDisabled()) {
108+             thisLogger().warn(" gitpod: Port exposing is disabled."  )
109+             return 
110+         }
111+         val  ignoredPorts =  ignoredPortsForNotificationService.getIgnoredPorts()
112+         val  portsList =  response.portsList.filter { ! ignoredPorts.contains(it.localPort) }
113+         val  portsNumbersFromPortsList =  portsList.map { it.localPort }
114+         val  servedPorts =  portsList.filter { it.served }
115+         val  exposedPorts =  servedPorts.filter { it.exposed?.url?.isNotBlank() ? :  false  }
116+         val  portsNumbersFromNonServedPorts =  portsList.filter { ! it.served }.map { it.localPort }
117+         val  servedPortsToStartForwarding =  servedPorts.filter {
118+             perClientPortForwardingManager.getPorts(it.localPort).none { p ->  p.labels.contains(FORWARDED_PORT_LABEL ) }
119+         }
120+         val  exposedPortsToStartExposingOnClient =  exposedPorts.filter {
121+             perClientPortForwardingManager.getPorts(it.localPort).none { p ->  p.labels.contains(EXPOSED_PORT_LABEL ) }
122+         }
123+         val  forwardedPortsToStopForwarding =  perClientPortForwardingManager.getPorts(FORWARDED_PORT_LABEL )
124+             .map { it.hostPortNumber }
125+             .filter { portsNumbersFromNonServedPorts.contains(it) ||  ! portsNumbersFromPortsList.contains(it) }
126+         val  exposedPortsToStopExposingOnClient =  perClientPortForwardingManager.getPorts(EXPOSED_PORT_LABEL )
127+             .map { it.hostPortNumber }
128+             .filter { portsNumbersFromNonServedPorts.contains(it) ||  ! portsNumbersFromPortsList.contains(it) }
129+ 
130+         servedPortsToStartForwarding.forEach { startForwarding(it) }
131+ 
132+         exposedPortsToStartExposingOnClient.forEach { startExposingOnClient(it) }
133+ 
134+         forwardedPortsToStopForwarding.forEach { stopForwarding(it) }
135+ 
136+         exposedPortsToStopExposingOnClient.forEach { stopExposingOnClient(it) }
137+ 
138+         portsList.forEach { updatePortsPresentation(it) }
131139    }
132140
133141    private  fun  startForwarding (portStatus :  PortsStatus ) {
134142        try  {
135143            perClientPortForwardingManager.forwardPort(
136-                      portStatus.localPort,
137-                      PortType .TCP ,
138-                      setOf (FORWARDED_PORT_LABEL ),
144+                 portStatus.localPort,
145+                 PortType .TCP ,
146+                 setOf (FORWARDED_PORT_LABEL ),
139147            )
140148        } catch  (throwable:  Throwable ) {
141149            if  (throwable !is  PortAlreadyForwardedException ) {
@@ -146,22 +154,22 @@ abstract class AbstractGitpodPortForwardingService : GitpodPortForwardingService
146154
147155    private  fun  stopForwarding (hostPort :  Int ) {
148156        perClientPortForwardingManager.getPorts(hostPort)
149-                  .filter { it.labels.contains(FORWARDED_PORT_LABEL ) }
150-                  .forEach { perClientPortForwardingManager.removePort(it) }
157+             .filter { it.labels.contains(FORWARDED_PORT_LABEL ) }
158+             .forEach { perClientPortForwardingManager.removePort(it) }
151159    }
152160
153161    private  fun  startExposingOnClient (portStatus :  PortsStatus ) {
154162        perClientPortForwardingManager.exposePort(
155-                  portStatus.localPort,
156-                  portStatus.exposed.url,
157-                  setOf (EXPOSED_PORT_LABEL ),
163+             portStatus.localPort,
164+             portStatus.exposed.url,
165+             setOf (EXPOSED_PORT_LABEL ),
158166        )
159167    }
160168
161169    private  fun  stopExposingOnClient (hostPort :  Int ) {
162170        perClientPortForwardingManager.getPorts(hostPort)
163-                  .filter { it.labels.contains(EXPOSED_PORT_LABEL ) }
164-                  .forEach { perClientPortForwardingManager.removePort(it) }
171+             .filter { it.labels.contains(EXPOSED_PORT_LABEL ) }
172+             .forEach { perClientPortForwardingManager.removePort(it) }
165173    }
166174
167175    private  fun  updatePortsPresentation (portStatus :  PortsStatus ) {
0 commit comments