From 2eb8c47e67a677388e60dc84496303e88f3f83fb Mon Sep 17 00:00:00 2001 From: Teodora Sandu <81559517+teodora-sandu@users.noreply.github.com> Date: Thu, 23 May 2024 15:28:49 +0100 Subject: [PATCH] fix: append v1 suffix conditionally (#531) * fix: sast settings call by appending /v1 * fix: do not add /v1 to deeproxy APIs * chore: CHANGELOG * fix: don't retrieve feature flag status or scan via LS if token is not present Co-authored-by: bastian.doetsch@snyk.io * test: add unit test for custom endpoint with /v1 --- CHANGELOG.md | 5 +++++ src/main/kotlin/io/snyk/plugin/SnykPostStartupActivity.kt | 2 +- src/main/kotlin/snyk/common/CustomEndpoints.kt | 5 ++++- src/main/kotlin/snyk/common/lsp/LanguageServerWrapper.kt | 2 +- src/test/kotlin/snyk/common/CustomEndpointsTest.kt | 2 ++ 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9791da9f..db5102d33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Snyk Security Changelog +## [2.7.21] + +### Fixed +- Append /v1 to the endpoint when necessary + ## [2.7.20] ### Added - (LS OSS) Starts rendering the Tree Nodes for OSS via the LS diff --git a/src/main/kotlin/io/snyk/plugin/SnykPostStartupActivity.kt b/src/main/kotlin/io/snyk/plugin/SnykPostStartupActivity.kt index 8b3845666..51e14bf67 100644 --- a/src/main/kotlin/io/snyk/plugin/SnykPostStartupActivity.kt +++ b/src/main/kotlin/io/snyk/plugin/SnykPostStartupActivity.kt @@ -115,7 +115,7 @@ class SnykPostStartupActivity : ProjectActivity { getKubernetesImageCache(project)?.cacheKubernetesFileFromProject() } - if (settings.scanOnSave && (isSnykCodeLSEnabled() || isSnykOSSLSEnabled() || isSnykIaCLSEnabled())) { + if (!settings.token.isNullOrBlank() && settings.scanOnSave && (isSnykCodeLSEnabled() || isSnykOSSLSEnabled() || isSnykIaCLSEnabled())) { getSnykTaskQueueService(project)?.scan(true) } diff --git a/src/main/kotlin/snyk/common/CustomEndpoints.kt b/src/main/kotlin/snyk/common/CustomEndpoints.kt index eaec4f6db..44009361c 100644 --- a/src/main/kotlin/snyk/common/CustomEndpoints.kt +++ b/src/main/kotlin/snyk/common/CustomEndpoints.kt @@ -21,12 +21,14 @@ fun toSnykCodeApiUrl(endpointUrl: String?): String { uri.isDev() -> endpoint .replace("api.", "") + .replace("/v1", "") .replace("https://dev.", "https://$codeSubdomain.dev.") .suffixIfNot("/") uri.isSnykTenant() -> endpoint .replace("https://api.", "https://") + .replace("/v1", "") .replace("https://", "https://$codeSubdomain.") .suffixIfNot("/") @@ -73,7 +75,8 @@ fun getEndpointUrl(): String { "" } val customEndpointUrl = resolveCustomEndpoint(endpointUrl) - return customEndpointUrl.removeTrailingSlashesIfPresent() + // we need to set v1 here, to make the sast-enabled calls work in LS + return customEndpointUrl.removeTrailingSlashesIfPresent().suffixIfNot("/v1") } fun isSnykCodeAvailable(endpointUrl: String?): Boolean { diff --git a/src/main/kotlin/snyk/common/lsp/LanguageServerWrapper.kt b/src/main/kotlin/snyk/common/lsp/LanguageServerWrapper.kt index e69cdeef8..99b69412d 100644 --- a/src/main/kotlin/snyk/common/lsp/LanguageServerWrapper.kt +++ b/src/main/kotlin/snyk/common/lsp/LanguageServerWrapper.kt @@ -271,7 +271,7 @@ class LanguageServerWrapper( } private fun getFeatureFlagStatusInternal(featureFlag: String): Boolean { - if (!isSnykCodeLSEnabled()) { + if (!(isSnykCodeLSEnabled() || isSnykOSSLSEnabled() || isSnykIaCLSEnabled()) || pluginSettings().token.isNullOrBlank()) { return false } diff --git a/src/test/kotlin/snyk/common/CustomEndpointsTest.kt b/src/test/kotlin/snyk/common/CustomEndpointsTest.kt index f63b9b0a3..7d36f81a8 100644 --- a/src/test/kotlin/snyk/common/CustomEndpointsTest.kt +++ b/src/test/kotlin/snyk/common/CustomEndpointsTest.kt @@ -107,9 +107,11 @@ class CustomEndpointsTest { fun `toSnykCodeApiUrl returns correct deeproxy url for SaaS deployments using api url`() { val apiUrlForProduction = toSnykCodeApiUrl("https://api.eu.snyk.io") val apiUrlForDevelopment = toSnykCodeApiUrl("https://dev.api.eu.snyk.io") + val apiUrlForWithV1 = toSnykCodeApiUrl("https://api.eu.snyk.io/v1") assertEquals("https://deeproxy.eu.snyk.io/", apiUrlForProduction) assertEquals("https://deeproxy.dev.eu.snyk.io/", apiUrlForDevelopment) + assertEquals("https://deeproxy.eu.snyk.io/", apiUrlForWithV1) } @Test