Skip to content

Commit 379617e

Browse files
committed
Fix docker arguments management
1 parent c04df2f commit 379617e

File tree

5 files changed

+35
-18
lines changed

5 files changed

+35
-18
lines changed

openapi-plugin/src/main/java/com/xliic/openapi/platform/scan/ScanUtils.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,6 @@ public class ScanUtils {
4848
private static final int PULL_SCAN_REPORT_DURATION = 10000;
4949
private static final int PULL_REPORT_DURATION = 60000;
5050

51-
@NotNull
52-
public static String getCmdLine(@NotNull Map<String, String> env) {
53-
return env.entrySet().stream().map(
54-
e -> "-e " + e.getKey() + "=\"" + e.getValue() + "\"").collect(Collectors.joining(" "));
55-
}
56-
5751
@NotNull
5852
public static String getTempAPI(@NotNull Project project, @NotNull String oas, @NotNull ProgressIndicator progressIndicator) throws Exception {
5953
progressIndicator.setText("Creating temporary platform API");

openapi-plugin/src/main/java/com/xliic/openapi/platform/scan/task/ScanDockerTask.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.xliic.openapi.platform.scan.task;
22

33
import java.util.HashMap;
4+
import java.util.LinkedList;
45
import java.util.List;
56
import java.util.Map;
67

8+
import org.apache.commons.lang.StringUtils;
79
import org.jetbrains.annotations.NotNull;
810

911
import com.xliic.core.ide.util.PropertiesComponent;
@@ -65,6 +67,13 @@ public void run(@NotNull ProgressIndicator progressIndicator) {
6567
callback.setRejected("Scan image is not available");
6668
return;
6769
}
70+
String dockerCmd = PropertiesComponent.getInstance().getValue(Settings.Platform.Scan.DOCKER_HOME);
71+
if (StringUtils.isEmpty(dockerCmd)) {
72+
dockerCmd = "docker";
73+
} else {
74+
boolean endsWithSeparator = dockerCmd.endsWith("/") || dockerCmd.endsWith("\\\\");
75+
dockerCmd = dockerCmd + (endsWithSeparator ? "" : "/") + "docker";
76+
}
6877
ScanService scanService = ScanService.getInstance(project);
6978
Environment myEnv = scanService.loadEnv();
7079
Map<String, String> dockerEnv = new HashMap<>();
@@ -74,9 +83,17 @@ public void run(@NotNull ProgressIndicator progressIndicator) {
7483
dockerEnv.put("SCAN_TOKEN", token);
7584
dockerEnv.put("PLATFORM_SERVICE", ScanUtils.getServices());
7685

77-
String dockerArgs = ScanUtils.getCmdLine(dockerEnv);
86+
List<String> cmdList = new LinkedList<>();
87+
cmdList.add(dockerCmd);
88+
cmdList.add("run");
89+
cmdList.add("--rm");
90+
for (Map.Entry<String, String> e : dockerEnv.entrySet()) {
91+
cmdList.add("-e");
92+
cmdList.add(e.getKey() + "=" + e.getValue());
93+
}
94+
cmdList.add(image);
7895
TerminalService terminalService = TerminalService.getInstance(project);
79-
terminalService.sendText(ScanService.TERMINAL_TAB, "docker run --rm " + dockerArgs + " " + image);
96+
terminalService.sendText(ScanService.TERMINAL_TAB, cmdList);
8097

8198
progressIndicator.setText("Waiting for scan report");
8299
String reportId = ScanUtils.waitForScanReport(apiId);

openapi-plugin/src/main/java/com/xliic/openapi/services/TerminalService.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.BufferedReader;
44
import java.io.InputStreamReader;
5+
import java.util.List;
56

67
import org.jetbrains.annotations.NotNull;
78

@@ -22,16 +23,9 @@ public static TerminalService getInstance(@NotNull Project project) {
2223
return project.getService(TerminalService.class);
2324
}
2425

25-
public void sendTextQuietly(@NotNull String tabName, @NotNull String command) {
26-
try {
27-
sendText(tabName, command);
28-
} catch (Exception e) {
29-
e.printStackTrace();
30-
}
31-
}
32-
33-
public void sendText(@NotNull String tabName, @NotNull String command) throws Exception {
34-
Process process = Runtime.getRuntime().exec(command);
26+
public void sendText(@NotNull String tabName, @NotNull List<String> cmdList) throws Exception {
27+
String cmdArray[] = new String[cmdList.size()];
28+
Process process = Runtime.getRuntime().exec(cmdList.toArray(cmdArray));
3529
int exitCode = process.waitFor();
3630
if (exitCode != 0) {
3731
String result = new BufferedReader(new InputStreamReader(process.getErrorStream())).readLine();

openapi-plugin/src/main/java/com/xliic/openapi/settings/Settings.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.xliic.core.credentialStore.CredentialAttributes;
2020
import com.xliic.core.credentialStore.CredentialAttributesKt;
2121
import com.xliic.core.ide.util.PropertiesComponent;
22+
import com.xliic.core.util.SystemInfoRt;
2223
import com.xliic.openapi.platform.PlatformConnection;
2324

2425
public class Settings {
@@ -59,6 +60,7 @@ public static class Scan {
5960

6061
public static final String IMAGE = "com.xliic.openapi.settings.platform.scan.image";
6162
public static final String SERVICES = "com.xliic.openapi.settings.platform.scan.services";
63+
public static final String DOCKER_HOME = "com.xliic.openapi.settings.platform.scan.docker.cmd";
6264
public static final String ENV_DEFAULT_KEY = "com.xliic.openapi.settings.platform.scan.default.env";
6365
public static final String ENV_SECRETS_KEY = "com.xliic.openapi.settings.platform.scan.secrets.env";
6466

@@ -71,6 +73,9 @@ public static void init() {
7173
if (!settings.isValueSet(SERVICES)) {
7274
settings.setValue(SERVICES, "");
7375
}
76+
if (!settings.isValueSet(DOCKER_HOME)) {
77+
settings.setValue(DOCKER_HOME, SystemInfoRt.isWindows ? "" : "/usr/local/bin");
78+
}
7479
}
7580
}
7681
}

openapi-plugin/src/main/java/com/xliic/openapi/settings/SettingsConfigurable.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.xliic.core.ui.components.JPanel;
3434
import com.xliic.core.ui.components.JTextArea;
3535
import com.xliic.core.ui.components.JTextField;
36+
import com.xliic.core.util.SystemInfoRt;
3637
import com.xliic.openapi.OpenApiBundle;
3738
import com.xliic.openapi.settings.Settings.Audit;
3839
import com.xliic.openapi.settings.Settings.ExtRef;
@@ -65,6 +66,7 @@ public class SettingsConfigurable extends SearchableConfigurable implements Conf
6566
private JPanel platformScanPanel;
6667
private JTextField platformScanImage;
6768
private JTextField platformScanServices;
69+
private JTextField platformDockerHome;
6870

6971
// Data dictionary
7072
private JPanel dictPanel;
@@ -128,6 +130,11 @@ protected Control createContents(Composite parent) {
128130
platformScanServices.setToolTipText("Format hostname:port");
129131
items.add(new ItemTextField(platformScanImage, Scan.IMAGE));
130132
items.add(new ItemTextField(platformScanServices, Scan.SERVICES));
133+
if (!SystemInfoRt.isWindows) {
134+
new Label(platformScanPanel.getComposite(), SWT.NULL).setText("Docker home");
135+
platformDockerHome = new JTextField(platformScanPanel);
136+
items.add(new ItemTextField(platformDockerHome, Scan.DOCKER_HOME));
137+
}
131138

132139
dictPanel = new JPanel("Data Dictionary", parent, SWT.NONE, 2);
133140
new Label(dictPanel.getComposite(), SWT.NULL).setText("Update document to match Data Dictionary definitions before runing Security Audit");

0 commit comments

Comments
 (0)