From 0cf6610cb61c4df0394b9d12349ae1f72a33f7e7 Mon Sep 17 00:00:00 2001 From: Brian Phillips Date: Thu, 19 Dec 2024 11:48:35 -0500 Subject: [PATCH] JAVA-8886 refactor ContrastSDK initiliazation --- .../gradle/plugin/ContrastGradlePlugin.java | 14 ++++++++-- .../gradle/plugin/ContrastSDKService.java | 26 +++++++++++++++++++ .../gradle/plugin/InstallAgentTask.java | 16 ++---------- .../gradle/plugin/ResolveAgentTask.java | 12 +++++++++ .../ContrastConfigurationExtension.java | 2 +- .../gradle/plugin/RegistrationTests.java | 1 + .../gradle/plugin/e2e/EndToEndTests.java | 2 +- 7 files changed, 55 insertions(+), 18 deletions(-) create mode 100644 gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastSDKService.java create mode 100644 gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ResolveAgentTask.java rename gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/{ => extensions}/ContrastConfigurationExtension.java (97%) diff --git a/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastGradlePlugin.java b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastGradlePlugin.java index 79e02c2..6970b8f 100644 --- a/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastGradlePlugin.java +++ b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastGradlePlugin.java @@ -1,7 +1,11 @@ package com.contrastsecurity.gradle.plugin; +import com.contrastsecurity.gradle.plugin.extensions.ContrastConfigurationExtension; +import com.contrastsecurity.sdk.ContrastSDK; +import com.contrastsecurity.sdk.UserAgentProduct; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.provider.Provider; /** * Gradle plugin for contrast utilities. The goals for this plugin are defined here { + ContrastConfigurationExtension extension; + public void apply(final Project target) { - ContrastConfigurationExtension extension = - target.getExtensions().create(EXTENSION_NAME, ContrastConfigurationExtension.class); + extension = target.getExtensions().create(EXTENSION_NAME, ContrastConfigurationExtension.class); + + //initialize instance of the ContrastSDK + ContrastSDKService.initializeSdk(extension.getUsername(), extension.getServiceKey(), extension.getApiKey(), extension.getApiUrl()); target.getTasks().register("installAgent", InstallAgentTask.class); + target.getTasks().register("resolveAgent", ResolveAgentTask.class); + } public static final String EXTENSION_NAME = "contrastConfiguration"; diff --git a/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastSDKService.java b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastSDKService.java new file mode 100644 index 0000000..3fac5d1 --- /dev/null +++ b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastSDKService.java @@ -0,0 +1,26 @@ +package com.contrastsecurity.gradle.plugin; + +import com.contrastsecurity.sdk.ContrastSDK; +import com.contrastsecurity.sdk.UserAgentProduct; + +public class ContrastSDKService { + + private static ContrastSDK INSTANCE = null; + + public static void initializeSdk( + final String username, final String serviceKey, final String apiKey, final String apiUrl) { + final UserAgentProduct gradle = UserAgentProduct.of("contrast-gradle-plugin"); + INSTANCE = + new ContrastSDK.Builder(username, serviceKey, apiKey) + .withApiUrl(apiUrl + "/api") + // TODO JAVA-8883 figure out how to define this proxy + // .withProxy(proxy) //with proxy? + .withUserAgentProduct(gradle) + .build(); + } + + public static ContrastSDK getSdk() { + return INSTANCE; + } + +} diff --git a/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/InstallAgentTask.java b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/InstallAgentTask.java index a6974e5..632bbd3 100644 --- a/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/InstallAgentTask.java +++ b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/InstallAgentTask.java @@ -2,9 +2,9 @@ import static com.contrastsecurity.gradle.plugin.ContrastGradlePlugin.EXTENSION_NAME; +import com.contrastsecurity.gradle.plugin.extensions.ContrastConfigurationExtension; import com.contrastsecurity.models.AgentType; import com.contrastsecurity.sdk.ContrastSDK; -import com.contrastsecurity.sdk.UserAgentProduct; import java.io.IOException; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; @@ -37,7 +37,7 @@ void installAgent() { logger.debug("Running installAgentTask"); // create sdk object for connecting to Contrast - final ContrastSDK sdk = connectToContrast(); + final ContrastSDK sdk = ContrastSDKService.getSdk(); logger.debug("Connected to Contrast at: " + sdk.getRestApiURL()); @@ -197,18 +197,6 @@ public static Path retrieveAgent( return downloadedAgent; } - /** Create ContrastSDK for connecting to TeamServer */ - private ContrastSDK connectToContrast() { - // TODO get plugin version for this as well - final UserAgentProduct gradle = UserAgentProduct.of("contrast-gradle-plugin"); - return new ContrastSDK.Builder(config.getUsername(), config.getServiceKey(), config.getApiKey()) - .withApiUrl(config.getApiUrl() + "/api") - // TODO JAVA-8883 figure out how to define this proxy - // .withProxy(proxy) //with proxy? - .withUserAgentProduct(gradle) - .build(); - } - private static final String AGENT_NAME = "contrast.jar"; final Logger logger = getProject().getLogger(); } diff --git a/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ResolveAgentTask.java b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ResolveAgentTask.java new file mode 100644 index 0000000..6f1589c --- /dev/null +++ b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ResolveAgentTask.java @@ -0,0 +1,12 @@ +package com.contrastsecurity.gradle.plugin; + +import org.gradle.api.DefaultTask; +import org.gradle.api.tasks.TaskAction; + +public class ResolveAgentTask extends DefaultTask { + + @TaskAction + void resolveAgent() { + System.out.println("Resolved Agent"); + } +} diff --git a/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastConfigurationExtension.java b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/extensions/ContrastConfigurationExtension.java similarity index 97% rename from gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastConfigurationExtension.java rename to gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/extensions/ContrastConfigurationExtension.java index c56cce1..a3ce5b9 100644 --- a/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/ContrastConfigurationExtension.java +++ b/gradle-plugin/src/main/java/com/contrastsecurity/gradle/plugin/extensions/ContrastConfigurationExtension.java @@ -1,4 +1,4 @@ -package com.contrastsecurity.gradle.plugin; +package com.contrastsecurity.gradle.plugin.extensions; /** Extension for configuring TeamServer API Credentials for downloading agent */ public class ContrastConfigurationExtension { diff --git a/gradle-plugin/src/test/java/com/contrastsecurity/gradle/plugin/RegistrationTests.java b/gradle-plugin/src/test/java/com/contrastsecurity/gradle/plugin/RegistrationTests.java index 64e2d25..a7c9253 100644 --- a/gradle-plugin/src/test/java/com/contrastsecurity/gradle/plugin/RegistrationTests.java +++ b/gradle-plugin/src/test/java/com/contrastsecurity/gradle/plugin/RegistrationTests.java @@ -16,5 +16,6 @@ void pluginRegistersATask() { // Verify the result assertNotNull(project.getTasks().findByName("installAgent")); + assertNotNull(project.getTasks().findByName("resolveAgent")); } } diff --git a/gradle-plugin/src/test/java/com/contrastsecurity/gradle/plugin/e2e/EndToEndTests.java b/gradle-plugin/src/test/java/com/contrastsecurity/gradle/plugin/e2e/EndToEndTests.java index 2b64dae..45a8816 100644 --- a/gradle-plugin/src/test/java/com/contrastsecurity/gradle/plugin/e2e/EndToEndTests.java +++ b/gradle-plugin/src/test/java/com/contrastsecurity/gradle/plugin/e2e/EndToEndTests.java @@ -50,7 +50,7 @@ void verify_attaches_agent_to_tests() throws IOException { testRunner.forwardOutput(); testRunner.withPluginClasspath(); // outputs debug logs to stdout for testing - testRunner.withArguments("installAgent", "--debug"); + testRunner.withArguments("installAgent"); testRunner.withDebug(true); testRunner.withProjectDir(projectDir); final BuildResult result = testRunner.build();