From ff371f403df53a02aaf0b4b646d442956355f9fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9lio=20Rocha?= Date: Mon, 13 Jan 2025 14:00:47 +0000 Subject: [PATCH 1/2] Add Skip SSL Flag --- README.md | 1 + .../scala/com/codacy/api/client/CodacyClient.scala | 13 +++++++++---- .../configuration/parser/ConfigurationParser.scala | 7 ++++++- src/main/scala/com/codacy/di/Components.scala | 7 ++++++- .../codacy/model/configuration/Configuration.scala | 3 ++- .../scala/com/codacy/rules/ConfigurationRules.scala | 4 +++- .../scala/com/codacy/rules/ReportRulesSpec.scala | 3 ++- 7 files changed, 29 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 0031d2db..49c4932d 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ Usage: codacy-coverage-reporter report --coverage-reports | -r --partial --prefix + --skip-ssl-verification` [default: false] - Skip the SSL certificate verification when communicating with the Codacy API --force-coverage-parser Available parsers are: opencover,clover,lcov,phpunit,jacoco,dotcover,cobertura,go diff --git a/api-scala/src/main/scala/com/codacy/api/client/CodacyClient.scala b/api-scala/src/main/scala/com/codacy/api/client/CodacyClient.scala index f971657b..99f32d4a 100644 --- a/api-scala/src/main/scala/com/codacy/api/client/CodacyClient.scala +++ b/api-scala/src/main/scala/com/codacy/api/client/CodacyClient.scala @@ -2,7 +2,7 @@ package com.codacy.api.client import play.api.libs.json._ import com.codacy.api.util.JsonOps -import scalaj.http.Http +import scalaj.http.{Http, HttpOptions} import java.net.URL import scala.util.{Failure, Success, Try} @@ -11,7 +11,8 @@ import scala.util.control.NonFatal class CodacyClient( apiUrl: Option[String] = None, apiToken: Option[String] = None, - projectToken: Option[String] = None + projectToken: Option[String] = None, + allowUnsafeSSL: Boolean = false ) { private case class ErrorJson(error: String) @@ -28,6 +29,8 @@ class CodacyClient( private val remoteUrl = new URL(new URL(apiUrl.getOrElse("https://api.codacy.com")), "/2.0").toString() + private def httpOptions = if (allowUnsafeSSL) Seq(HttpOptions.allowUnsafeSSL) else Seq.empty + /* * Does an API post */ @@ -44,8 +47,10 @@ class CodacyClient( val httpRequest = timeoutOpt match { case Some(timeout) => - Http(url).timeout(connTimeoutMs = timeout.connTimeoutMs, readTimeoutMs = timeout.readTimeoutMs) - case None => Http(url) + Http(url) + .timeout(connTimeoutMs = timeout.connTimeoutMs, readTimeoutMs = timeout.readTimeoutMs) + .options(httpOptions) + case None => Http(url).options(httpOptions) } val body = httpRequest diff --git a/src/main/scala/com/codacy/configuration/parser/ConfigurationParser.scala b/src/main/scala/com/codacy/configuration/parser/ConfigurationParser.scala index 3b1a620c..f5e3d256 100644 --- a/src/main/scala/com/codacy/configuration/parser/ConfigurationParser.scala +++ b/src/main/scala/com/codacy/configuration/parser/ConfigurationParser.scala @@ -112,10 +112,15 @@ case class BaseCommandConfig( @Name("s") @ValueDescription("skip if token isn't defined") skip: Int @@ Counter = Tag.of(0), @Hidden - debug: Int @@ Counter = Tag.of(0) + debug: Int @@ Counter = Tag.of(0), + @ExtraName("i") @ValueDescription( + "[default: false] - Skip the SSL certificate verification when communicating with the Codacy API" + ) + skipSslVerification: Int @@ Counter = Tag.of(0) ) { val skipValue: Boolean = skip.## > 0 val debugValue: Boolean = debug.## > 0 + val skipSslVerificationValue: Boolean = skipSslVerification.## > 0 } object ConfigArgumentParsers { diff --git a/src/main/scala/com/codacy/di/Components.scala b/src/main/scala/com/codacy/di/Components.scala index 11cb5e61..24368422 100644 --- a/src/main/scala/com/codacy/di/Components.scala +++ b/src/main/scala/com/codacy/di/Components.scala @@ -16,7 +16,12 @@ class Components(private val validatedConfig: Configuration) { (None, Some(apiToken)) } - lazy val codacyClient = new CodacyClient(Some(validatedConfig.baseConfig.codacyApiBaseUrl), apiToken, projectToken) + lazy val codacyClient = new CodacyClient( + Some(validatedConfig.baseConfig.codacyApiBaseUrl), + apiToken, + projectToken, + validatedConfig.baseConfig.skipSslVerification + ) lazy val coverageServices = new CoverageServices(codacyClient) diff --git a/src/main/scala/com/codacy/model/configuration/Configuration.scala b/src/main/scala/com/codacy/model/configuration/Configuration.scala index 473ade6d..d297f832 100644 --- a/src/main/scala/com/codacy/model/configuration/Configuration.scala +++ b/src/main/scala/com/codacy/model/configuration/Configuration.scala @@ -44,7 +44,8 @@ case class BaseConfig( debug: Boolean, timeout: RequestTimeout, sleepTime: Int, - numRetries: Int + numRetries: Int, + skipSslVerification: Boolean ) sealed trait CommitUUID extends Any { diff --git a/src/main/scala/com/codacy/rules/ConfigurationRules.scala b/src/main/scala/com/codacy/rules/ConfigurationRules.scala index b5b398d2..09233336 100644 --- a/src/main/scala/com/codacy/rules/ConfigurationRules.scala +++ b/src/main/scala/com/codacy/rules/ConfigurationRules.scala @@ -74,7 +74,9 @@ class ConfigurationRules(cmdConfig: CommandConfiguration, envVars: Map[String, S baseConfig.debugValue, timeout = RequestTimeout(connTimeoutMs = 1000, readTimeoutMs = baseConfig.httpTimeout), baseConfig.sleepTime, - baseConfig.numRetries + baseConfig.numRetries, + baseConfig.skipSslVerificationValue + ) validatedConfig <- validateBaseConfigUrl(baseConf) } yield { diff --git a/src/test/scala/com/codacy/rules/ReportRulesSpec.scala b/src/test/scala/com/codacy/rules/ReportRulesSpec.scala index e4603ff9..eb1816b5 100644 --- a/src/test/scala/com/codacy/rules/ReportRulesSpec.scala +++ b/src/test/scala/com/codacy/rules/ReportRulesSpec.scala @@ -41,7 +41,8 @@ class ReportRulesSpec extends AnyWordSpec with Matchers with PrivateMethodTester debug = false, timeout = RequestTimeout(1000, 10000), sleepTime = 10000, - numRetries = 3 + numRetries = 3, + skipSslVerification = false ) def assertCodacyCoverage( From 051044fdc8734e218cafb0c6fc15cc55382ddd22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9lio=20Rocha?= Date: Mon, 13 Jan 2025 14:07:24 +0000 Subject: [PATCH 2/2] run scalafmt --- src/main/scala/com/codacy/rules/ConfigurationRules.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/scala/com/codacy/rules/ConfigurationRules.scala b/src/main/scala/com/codacy/rules/ConfigurationRules.scala index 09233336..6902ad35 100644 --- a/src/main/scala/com/codacy/rules/ConfigurationRules.scala +++ b/src/main/scala/com/codacy/rules/ConfigurationRules.scala @@ -76,7 +76,6 @@ class ConfigurationRules(cmdConfig: CommandConfiguration, envVars: Map[String, S baseConfig.sleepTime, baseConfig.numRetries, baseConfig.skipSslVerificationValue - ) validatedConfig <- validateBaseConfigUrl(baseConf) } yield {