Skip to content

Commit 3d6fb24

Browse files
committed
Add action and background task for running SecuCheck
1 parent 8614e60 commit 3d6fb24

File tree

3 files changed

+67
-14
lines changed

3 files changed

+67
-14
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package de.fraunhofer.iem.devassist.actions;
2+
3+
import com.intellij.ide.util.PropertiesComponent;
4+
import com.intellij.openapi.actionSystem.AnAction;
5+
import com.intellij.openapi.actionSystem.AnActionEvent;
6+
import com.intellij.openapi.actionSystem.CommonDataKeys;
7+
import com.intellij.openapi.progress.PerformInBackgroundOption;
8+
import com.intellij.openapi.progress.ProgressManager;
9+
import com.intellij.openapi.project.Project;
10+
import de.fraunhofer.iem.devassist.analysis.SecucheckBackgroundTask;
11+
import de.fraunhofer.iem.devassist.comm.SecucheckNotifier;
12+
import de.fraunhofer.iem.devassist.util.Constants;
13+
import org.jetbrains.annotations.NotNull;
14+
15+
import java.io.File;
16+
import java.util.Objects;
17+
18+
public class RunSecucheckAction extends AnAction {
19+
20+
@Override
21+
public void actionPerformed(@NotNull AnActionEvent e) {
22+
final Project project = e.getRequiredData(CommonDataKeys.PROJECT);
23+
24+
if (!PropertiesComponent.getInstance(project).isTrueValue(Constants.SWAN_SETTINGS)) {
25+
e.getActionManager().getAction("Dev_Assist.SettingsAction").actionPerformed(e);
26+
//TODO Run SWAN if the tool has been configured
27+
} else {
28+
runSecucheck(project);
29+
}
30+
}
31+
32+
public void runSecucheck(Project project) {
33+
34+
File outputFolder = new File(Objects.requireNonNull(PropertiesComponent.getInstance(project).getValue(Constants.OUTPUT_DIRECTORY)));
35+
36+
if (!outputFolder.exists())
37+
outputFolder.mkdir();
38+
39+
ProgressManager.getInstance().run(new SecucheckBackgroundTask(project, "Running Taint Analysis", true,
40+
PerformInBackgroundOption.ALWAYS_BACKGROUND));
41+
42+
SecucheckNotifier publisher = project.getMessageBus().syncPublisher(SecucheckNotifier.START_SECUCHECK_PROCESS_TOPIC);
43+
publisher.launchSecuCheck();
44+
}
45+
}

dev-assist/src/main/java/de/fraunhofer/iem/devassist/analysis/SecucheckBackgroundTask.java

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
package de.fraunhofer.iem.devassist.analysis;
22

3+
import com.intellij.ide.util.PropertiesComponent;
34
import com.intellij.openapi.progress.PerformInBackgroundOption;
45
import com.intellij.openapi.progress.ProgressIndicator;
56
import com.intellij.openapi.progress.Task;
67
import com.intellij.openapi.project.Project;
78
import com.intellij.openapi.util.NlsContexts;
89
import com.intellij.util.messages.MessageBus;
10+
import de.fraunhofer.iem.aidevassist.sa.cli.AIDevAssistCli;
11+
import de.fraunhofer.iem.aidevassist.sa.cli.CliRunner;
912
import de.fraunhofer.iem.devassist.comm.SecucheckNotifier;
13+
import de.fraunhofer.iem.devassist.util.Constants;
1014
import org.jetbrains.annotations.NotNull;
1115
import org.jetbrains.annotations.Nullable;
16+
import picocli.CommandLine;
1217

1318
import java.time.LocalDateTime;
1419
import java.time.format.DateTimeFormatter;
1520
import java.util.HashMap;
21+
import java.util.Objects;
1622
import java.util.concurrent.TimeUnit;
1723

1824
public class SecucheckBackgroundTask extends Task.Backgroundable {
@@ -31,24 +37,25 @@ public void run(@NotNull ProgressIndicator indicator) {
3137

3238
long start = System.currentTimeMillis();
3339

34-
//TODO add implementation to run SecuCheck
35-
indicator.setText("Generating fluentTQL Specifications");
36-
3740
indicator.setText("Configuring SecuCheck");
3841

39-
try {
40-
TimeUnit.SECONDS.sleep(2);
41-
} catch (InterruptedException e) {
42-
throw new RuntimeException(e);
43-
}
44-
indicator.setText("Configuring analysis");
42+
String[] args = new String[]{
43+
"--analysis", "0",
44+
Objects.requireNonNull(PropertiesComponent.getInstance(project).getValue(Constants.SOURCE_DIRECTORY)),
45+
"--output", Objects.requireNonNull(PropertiesComponent.getInstance(project).getValue(Constants.OUTPUT_DIRECTORY)),
46+
"--inclusion", "*",
47+
"--entry", "*"};
48+
49+
CliRunner cliRunner = new CliRunner(args);
50+
CommandLine.ParseResult cmd = new CommandLine(cliRunner).parseArgs(args);
51+
52+
indicator.setText("Running analysis");
4553

46-
try {
47-
TimeUnit.SECONDS.sleep(2);
48-
} catch (InterruptedException e) {
49-
throw new RuntimeException(e);
54+
if (cmd.errors().isEmpty()) {
55+
AIDevAssistCli cli = new AIDevAssistCli();
56+
cli.run(cliRunner.createOptions());
57+
PropertiesComponent.getInstance(project).setValue(Constants.LAST_SARIF_FILE, cli.getResults().getResultFile());
5058
}
51-
indicator.setText("Exporting analysis results");
5259

5360
MessageBus messageBus = project.getMessageBus();
5461
SecucheckNotifier publisher = messageBus.syncPublisher(SecucheckNotifier.END_SECUCHECK_PROCESS_TOPIC);

dev-assist/src/main/java/de/fraunhofer/iem/devassist/util/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class Constants {
2525
public final static String SOURCE_DIRECTORY = PLUGIN_ID + "projectJarFiles"; //Test Library (or the project)
2626
public final static String CONFIGURATION_FILE = PLUGIN_ID + "configurationFile";
2727
public final static String LAST_SRM_LIST = PLUGIN_ID + "lastSrmList";
28+
public final static String LAST_SARIF_FILE = PLUGIN_ID + "lastSarifFile";
2829
public final static String SWAN_SETTINGS = PLUGIN_ID + "projectConfigured";
2930
public final static String OUTPUT_DIRECTORY = PLUGIN_ID + "outputPath";
3031
public final static String OUTPUT_FILE = PLUGIN_ID + "outputFile";

0 commit comments

Comments
 (0)