Skip to content

Commit af28585

Browse files
authored
feat: Support http proxy (#179)
allow users to configure and use HTTP proxies in the IntelliJ environment. Signed-off-by: Chao Wang <[email protected]>
1 parent 68722c5 commit af28585

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ according to your preferences.
137137
<br >You can set the vulnerability severity alert level to `Error` or `Warning` for inline notifications of detected
138138
vulnerabilities.
139139

140+
- **Proxy Configuration** :
141+
<br >From IntelliJ IDEA Appearance & Behavior > System Settings > HTTP Proxy, you can configure a proxy for all HTTP requests made by the plugin. This is useful when your environment requires going through a proxy to access external services. For example:`http://proxy.example.com:8080`
142+
140143
## Features
141144

142145
- **Component analysis**

src/main/java/org/jboss/tools/intellij/exhort/ApiService.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import com.intellij.openapi.diagnostic.Logger;
1818
import com.intellij.openapi.extensions.PluginDescriptor;
1919
import com.intellij.openapi.extensions.PluginId;
20+
import com.intellij.util.net.ProxyConfiguration;
21+
import com.intellij.util.net.ProxySettings;
2022
import com.redhat.exhort.Api;
2123
import com.redhat.exhort.api.v4.AnalysisReport;
2224
import com.redhat.exhort.impl.ExhortApi;
@@ -26,6 +28,7 @@
2628
import java.nio.file.Files;
2729
import java.nio.file.Path;
2830
import java.nio.file.Paths;
31+
import java.util.Optional;
2932
import java.util.concurrent.CompletableFuture;
3033
import java.util.concurrent.CompletionException;
3134
import java.util.concurrent.ExecutionException;
@@ -211,5 +214,32 @@ private void setRequestProperties(final String manifestName) {
211214
if (!"go.mod".equals(manifestName) && !"requirements.txt".equals(manifestName)) {
212215
System.clearProperty("MATCH_MANIFEST_VERSIONS");
213216
}
217+
Optional<String> proxyUrlOpt = getProxyUrl();
218+
if (proxyUrlOpt.isPresent()) {
219+
System.setProperty("EXHORT_PROXY_URL", proxyUrlOpt.get());
220+
} else {
221+
System.clearProperty("EXHORT_PROXY_URL");
222+
}
223+
}
224+
225+
public static Optional<String> getProxyUrl() {
226+
// This API only works in 2024.2+ versions.
227+
ProxyConfiguration proxyConfiguration = ProxySettings.getInstance().getProxyConfiguration();
228+
229+
if (proxyConfiguration instanceof ProxyConfiguration.StaticProxyConfiguration) {
230+
ProxyConfiguration.StaticProxyConfiguration staticProxyConfiguration =
231+
(ProxyConfiguration.StaticProxyConfiguration) proxyConfiguration;
232+
233+
String protocol = staticProxyConfiguration.getProtocol().toString().toLowerCase(); // e.g., "http" or "socks"
234+
String host = staticProxyConfiguration.getHost();
235+
int port = staticProxyConfiguration.getPort();
236+
237+
if (host != null && !host.isBlank() && port > 0 && protocol.equals("http")) {
238+
String proxyUrl = protocol + "://" + host.trim() + ":" + port;
239+
return Optional.of(proxyUrl);
240+
}
241+
}
242+
243+
return Optional.empty();
214244
}
215245
}

src/main/java/org/jboss/tools/intellij/image/ApiService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@
3030
import java.nio.file.Path;
3131
import java.util.Collection;
3232
import java.util.Map;
33+
import java.util.Optional;
3334
import java.util.Set;
3435
import java.util.concurrent.CompletionException;
3536
import java.util.concurrent.ExecutionException;
3637
import java.util.function.Function;
3738
import java.util.stream.Collectors;
3839

40+
import static org.jboss.tools.intellij.exhort.ApiService.getProxyUrl;
41+
3942
@Service(Service.Level.APP)
4043
public final class ApiService {
4144

@@ -163,5 +166,12 @@ private void setServiceEnvironment() {
163166
} else {
164167
System.clearProperty("EXHORT_IMAGE_PLATFORM");
165168
}
169+
170+
Optional<String> proxyUrlOpt = getProxyUrl();
171+
if (proxyUrlOpt.isPresent()) {
172+
System.setProperty("EXHORT_PROXY_URL", proxyUrlOpt.get());
173+
} else {
174+
System.clearProperty("EXHORT_PROXY_URL");
175+
}
166176
}
167177
}

0 commit comments

Comments
 (0)