Skip to content

Commit eb41f1e

Browse files
authored
BI-509 - npm extractor ignores http proxy (#282)
1 parent 2cd3c26 commit eb41f1e

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

build-info-client/src/main/java/org/jfrog/build/client/ArtifactoryHttpClient.java

+4
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ public int getConnectionRetries() {
126126
return connectionRetries;
127127
}
128128

129+
public ProxyConfiguration getProxyConfiguration() {
130+
return this.proxyConfiguration;
131+
}
132+
129133
/**
130134
* Release all connection and cleanup resources.
131135
*/

build-info-extractor-npm/src/main/java/org/jfrog/build/extractor/npm/extractor/NpmBuildInfoExtractor.java

+22
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.jfrog.build.api.Module;
99
import org.jfrog.build.api.builder.ModuleBuilder;
1010
import org.jfrog.build.api.util.Log;
11+
import org.jfrog.build.client.ProxyConfiguration;
1112
import org.jfrog.build.extractor.BuildInfoExtractor;
1213
import org.jfrog.build.extractor.clientConfiguration.ArtifactoryDependenciesClientBuilder;
1314
import org.jfrog.build.extractor.clientConfiguration.client.ArtifactoryDependenciesClient;
@@ -44,6 +45,7 @@ public class NpmBuildInfoExtractor implements BuildInfoExtractor<NpmProject> {
4445
private NpmDriver npmDriver;
4546
private String npmRegistry;
4647
private Properties npmAuth;
48+
private String npmProxy;
4749
private Log logger;
4850

4951
NpmBuildInfoExtractor(ArtifactoryDependenciesClientBuilder dependenciesClientBuilder, NpmDriver npmDriver, Log logger) {
@@ -71,6 +73,7 @@ private void preparePrerequisites(String resolutionRepository, Path workingDir)
7173
try (ArtifactoryDependenciesClient dependenciesClient = dependenciesClientBuilder.build()) {
7274
setNpmAuth(dependenciesClient);
7375
setRegistryUrl(dependenciesClient, resolutionRepository);
76+
setNpmProxy(dependenciesClient);
7477
}
7578
readPackageInfoFromPackageJson(workingDir);
7679
backupProjectNpmrc(workingDir);
@@ -88,6 +91,20 @@ private void setRegistryUrl(ArtifactoryDependenciesClient dependenciesClient, St
8891
npmRegistry += "api/npm/" + resolutionRepository;
8992
}
9093

94+
private void setNpmProxy(ArtifactoryDependenciesClient dependenciesClient) {
95+
ProxyConfiguration proxyConfiguration = dependenciesClient.getProxyConfiguration();
96+
if (proxyConfiguration == null || StringUtils.isBlank(proxyConfiguration.host)) {
97+
return;
98+
}
99+
npmProxy = "http://";
100+
String username = proxyConfiguration.username;
101+
String password = proxyConfiguration.password;
102+
if (StringUtils.isNoneBlank(username) && StringUtils.isNotBlank(password)) {
103+
npmProxy += username + ":" + password + "@";
104+
}
105+
npmProxy += proxyConfiguration.host + ":" + proxyConfiguration.port;
106+
}
107+
91108
private void readPackageInfoFromPackageJson(Path workingDir) throws IOException {
92109
try (FileInputStream fis = new FileInputStream(workingDir.resolve("package.json").toFile())) {
93110
npmPackageInfo.readPackageInfo(fis);
@@ -126,6 +143,11 @@ private void createTempNpmrc(Path workingDir, List<String> installationArgs) thr
126143
npmrcProperties.setProperty("registry", npmRegistry);
127144
npmrcProperties.remove("metrics-registry");
128145

146+
// Save npm proxy
147+
if (StringUtils.isNotBlank(npmProxy)) {
148+
npmrcProperties.setProperty("proxy", npmProxy);
149+
}
150+
129151
// Write npmrc file
130152
StringBuilder stringBuffer = new StringBuilder();
131153
npmrcProperties.forEach((key, value) -> stringBuffer.append(key).append("=").append(value).append("\n"));

build-info-extractor/src/main/java/org/jfrog/build/extractor/clientConfiguration/client/ArtifactoryBaseClient.java

+4
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ public void setProxyConfiguration(ProxyConfiguration proxy) {
9696
httpClient.setProxyConfiguration(proxy.host, proxy.port, proxy.username, proxy.password);
9797
}
9898

99+
public ProxyConfiguration getProxyConfiguration() {
100+
return httpClient.getProxyConfiguration();
101+
}
102+
99103
/**
100104
* Log setter for the PreemptiveHttpClient for jobs like the Jenkins Generic job that uses NullLog by default.
101105
*

0 commit comments

Comments
 (0)