Skip to content

Commit 993bc2e

Browse files
authored
Merge pull request #1095 from josehenriqueventura/fix#657_add_proxy_environment_variables_for_npm_postinstalls
Fix#657 add proxy environment variables for npm postinstalls
2 parents 26740c8 + 40b6c1e commit 993bc2e

2 files changed

Lines changed: 62 additions & 26 deletions

File tree

frontend-plugin-core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/NodeTaskExecutor.java

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
package com.github.eirslett.maven.plugins.frontend.lib;
22

3-
import org.slf4j.Logger;
4-
import org.slf4j.LoggerFactory;
3+
import static com.github.eirslett.maven.plugins.frontend.lib.Utils.implode;
4+
import static com.github.eirslett.maven.plugins.frontend.lib.Utils.normalize;
5+
import static com.github.eirslett.maven.plugins.frontend.lib.Utils.prepend;
56

67
import java.io.File;
78
import java.util.ArrayList;
8-
import java.util.Arrays;
99
import java.util.Collections;
10+
import java.util.HashMap;
1011
import java.util.List;
11-
12-
import static com.github.eirslett.maven.plugins.frontend.lib.Utils.implode;
13-
import static com.github.eirslett.maven.plugins.frontend.lib.Utils.normalize;
14-
import static com.github.eirslett.maven.plugins.frontend.lib.Utils.prepend;
1512
import java.util.Map;
1613

14+
import org.slf4j.Logger;
15+
import org.slf4j.LoggerFactory;
16+
1717
abstract class NodeTaskExecutor {
1818
private static final String DS = "//";
1919
private static final String AT = "@";
20-
20+
2121
private final Logger logger;
2222
private final String taskName;
2323
private String taskLocation;
2424
private final ArgumentsParser argumentsParser;
2525
private final NodeExecutorConfig config;
26+
private final Map<String, String> proxy;
2627

2728
public NodeTaskExecutor(NodeExecutorConfig config, String taskLocation) {
2829
this(config, taskLocation, Collections.<String>emptyList());
@@ -37,11 +38,16 @@ public NodeTaskExecutor(NodeExecutorConfig config, String taskLocation, List<Str
3738
}
3839

3940
public NodeTaskExecutor(NodeExecutorConfig config, String taskName, String taskLocation, List<String> additionalArguments) {
41+
this(config, taskName, taskLocation, additionalArguments, Collections.<String, String>emptyMap());
42+
}
43+
44+
public NodeTaskExecutor(NodeExecutorConfig config, String taskName, String taskLocation, List<String> additionalArguments, Map<String, String> proxy) {
4045
this.logger = LoggerFactory.getLogger(getClass());
4146
this.config = config;
4247
this.taskName = taskName;
4348
this.taskLocation = taskLocation;
4449
this.argumentsParser = new ArgumentsParser(additionalArguments);
50+
this.proxy = proxy;
4551
}
4652

4753
private static String getTaskNameFromLocation(String taskLocation) {
@@ -55,7 +61,14 @@ public final void execute(String args, Map<String, String> environment) throws T
5561
logger.info("Running " + taskToString(taskName, arguments) + " in " + config.getWorkingDirectory());
5662

5763
try {
58-
final int result = new NodeExecutor(config, prepend(absoluteTaskLocation, arguments), environment).executeAndRedirectOutput(logger);
64+
Map<String, String> internalEnvironment = new HashMap<>();
65+
if (environment != null && !environment.isEmpty()) {
66+
internalEnvironment.putAll(environment);
67+
}
68+
if (!proxy.isEmpty()) {
69+
internalEnvironment.putAll(proxy);
70+
}
71+
final int result = new NodeExecutor(config, prepend(absoluteTaskLocation, arguments), internalEnvironment ).executeAndRedirectOutput(logger);
5972
if (result != 0) {
6073
throw new TaskRunnerException(taskToString(taskName, arguments) + " failed. (error code " + result + ")");
6174
}
Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,33 @@
11
package com.github.eirslett.maven.plugins.frontend.lib;
22

3-
import com.github.eirslett.maven.plugins.frontend.lib.ProxyConfig.Proxy;
4-
53
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.HashMap;
66
import java.util.List;
7+
import java.util.Map;
8+
9+
import com.github.eirslett.maven.plugins.frontend.lib.ProxyConfig.Proxy;
710

811
public interface NpmRunner extends NodeTaskRunner {}
912

1013
final class DefaultNpmRunner extends NodeTaskExecutor implements NpmRunner {
1114
static final String TASK_NAME = "npm";
1215

1316
public DefaultNpmRunner(NodeExecutorConfig config, ProxyConfig proxyConfig, String npmRegistryURL) {
14-
super(config, TASK_NAME, config.getNpmPath().getAbsolutePath(), buildArguments(proxyConfig, npmRegistryURL));
17+
super(config, TASK_NAME, config.getNpmPath().getAbsolutePath(), buildArguments(proxyConfig, npmRegistryURL),
18+
buildProxy(proxyConfig, npmRegistryURL));
1519
}
1620

1721
// Visible for testing only.
1822
static List<String> buildArguments(ProxyConfig proxyConfig, String npmRegistryURL) {
1923
List<String> arguments = new ArrayList<String>();
20-
24+
2125
if(npmRegistryURL != null && !npmRegistryURL.isEmpty()){
2226
arguments.add ("--registry=" + npmRegistryURL);
2327
}
2428

2529
if(!proxyConfig.isEmpty()){
26-
Proxy proxy = null;
27-
if(npmRegistryURL != null && !npmRegistryURL.isEmpty()){
28-
proxy = proxyConfig.getProxyForUrl(npmRegistryURL);
29-
}
30-
31-
if(proxy == null){
32-
proxy = proxyConfig.getSecureProxy();
33-
}
34-
35-
if(proxy == null){
36-
proxy = proxyConfig.getInsecureProxy();
37-
}
30+
Proxy proxy = getProxyConfig(proxyConfig, npmRegistryURL);
3831

3932
arguments.add("--https-proxy=" + proxy.getUri().toString());
4033
arguments.add("--proxy=" + proxy.getUri().toString());
@@ -47,7 +40,37 @@ static List<String> buildArguments(ProxyConfig proxyConfig, String npmRegistryUR
4740
}
4841
}
4942
}
50-
43+
5144
return arguments;
5245
}
46+
47+
private static Map<String, String> buildProxy(ProxyConfig proxyConfig, String npmRegistryURL) {
48+
Map<String, String> proxyEnvironmentVariables = Collections.emptyMap();
49+
50+
if(!proxyConfig.isEmpty()){
51+
Proxy proxy = getProxyConfig(proxyConfig, npmRegistryURL);
52+
proxyEnvironmentVariables = new HashMap<>();
53+
54+
proxyEnvironmentVariables.put("https_proxy", proxy.getUri().toString());
55+
proxyEnvironmentVariables.put("http_proxy", proxy.getUri().toString());
56+
}
57+
58+
return proxyEnvironmentVariables;
59+
}
60+
61+
private static Proxy getProxyConfig(ProxyConfig proxyConfig, String npmRegistryURL) {
62+
Proxy proxy = null;
63+
if(npmRegistryURL != null && !npmRegistryURL.isEmpty()){
64+
proxy = proxyConfig.getProxyForUrl(npmRegistryURL);
65+
}
66+
67+
if(proxy == null){
68+
proxy = proxyConfig.getSecureProxy();
69+
}
70+
71+
if(proxy == null){
72+
proxy = proxyConfig.getInsecureProxy();
73+
}
74+
return proxy;
75+
}
5376
}

0 commit comments

Comments
 (0)