Skip to content

Commit

Permalink
feat: enables SCLE by using LS to fetch SAST settings [nebula-1427] (#…
Browse files Browse the repository at this point in the history
…149)

feat: enables SCLE by using LS to fetch SAST settings
  • Loading branch information
metju90 authored Sep 18, 2023
1 parent 52de1f7 commit d6ff4e9
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
import org.eclipse.ui.IWorkbenchPreferencePage;

import io.snyk.eclipse.plugin.SnykStartup;
import io.snyk.eclipse.plugin.properties.preferences.ApiClient;
import io.snyk.eclipse.plugin.properties.preferences.Preferences;
import io.snyk.eclipse.plugin.utils.SnykLogger;
import io.snyk.languageserver.LsConfigurationUpdater;
import io.snyk.languageserver.protocolextension.SnykExtendedLanguageClient;

public class PreferencesPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
private BooleanFieldEditor snykCodeCheckbox;
Expand Down Expand Up @@ -120,8 +120,8 @@ public boolean performOk() {
}

private void disableSnykCodeIfOrgDisabled() {
var apiClient = new ApiClient();
if (snykCodeCheckbox.getBooleanValue() && !apiClient.checkSnykCodeEnablement()) {
boolean isSastEnabled = SnykExtendedLanguageClient.getInstance().getSastEnabled();
if (snykCodeCheckbox.getBooleanValue() && !isSastEnabled) {
String message = "Snyk Code disabled, because it is not enabled for your organization. After you close this preference page, it will stay disabled.";
snykCodeCheckbox.setLabelText(snykCodeCheckbox.getLabelText() + " (" + message + ")");
SnykLogger.logInfo(message);
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import org.eclipse.ui.PlatformUI;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

import io.snyk.eclipse.plugin.SnykStartup;
Expand All @@ -39,6 +40,7 @@
import io.snyk.languageserver.protocolextension.messageObjects.SnykIsAvailableCliParams;
import io.snyk.languageserver.protocolextension.messageObjects.SnykTrustedFoldersParams;


@SuppressWarnings("restriction")
public class SnykExtendedLanguageClient extends LanguageClientImpl {
private final ProgressManager progressMgr = new ProgressManager();
Expand Down Expand Up @@ -102,6 +104,22 @@ public void triggerAuthentication() {
public void trustWorkspaceFolders() {
executeCommand("snyk.trustWorkspaceFolders", new ArrayList<>());
}

public boolean getSastEnabled() {
ExecuteCommandParams params = new ExecuteCommandParams("snyk.getSettingsSastEnabled", new ArrayList<>());
try {
CompletableFuture<Object> lsSastSettings = getConnectedLanguageServer().getWorkspaceService().executeCommand(params);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
SastSettings sastSettings = mapper.convertValue(lsSastSettings.get(), SastSettings.class);

return sastSettings.sastEnabled;
} catch (Exception e) {
SnykLogger.logError(e);
}

return false;
}

@JsonNotification(value = "$/snyk.hasAuthenticated")
public void hasAuthenticated(HasAuthenticatedParam param) {
Expand Down Expand Up @@ -216,5 +234,33 @@ public boolean refreshOAuthToken() {
var newToken = future.completeOnTimeout(token, 2, TimeUnit.SECONDS).join();
return !token.equals(newToken);
}


static class SastSettings {
public boolean sastEnabled;

public LocalCodeEngine localCodeEngine;

public boolean reportFalsePositivesEnabled;

public String org;

public boolean autofixEnabled;
}

/**
* SAST local code engine configuration.
*/
static class LocalCodeEngine {
public boolean enabled;

public String url;
}

public static <T> T convertInstanceOfObject(Object o, Class<T> clazz) {
try {
return clazz.cast(o);
} catch(ClassCastException e) {
return null;
}
}
}

0 comments on commit d6ff4e9

Please sign in to comment.