From d5cec9f35c8fb8a7354ffaf6ed9a89a9c1fba8ed Mon Sep 17 00:00:00 2001 From: andacata <1506402+andacata@users.noreply.github.com> Date: Thu, 28 Dec 2023 20:58:42 +0100 Subject: [PATCH 1/2] fix(ocpi-2.2.1) versions endpoint should return http 401, not 400 --- .../izivia/ocpi/toolkit/common/HttpUtils.kt | 2 +- .../modules/versions/VersionsClient.kt | 22 +++++++++++++------ .../CredentialsIntegrationTests.kt | 18 ++++++++++----- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/HttpUtils.kt b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/HttpUtils.kt index a0fcf761..67e8601b 100644 --- a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/HttpUtils.kt +++ b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/HttpUtils.kt @@ -279,7 +279,7 @@ suspend fun PartnerRepository.checkToken( isCredentialsServerTokenValid(token) if (!validToken) { - throw OcpiClientInvalidParametersException("Invalid server token (token A allowed: $allowTokenA): $token") + throw HttpException(HttpStatus.UNAUTHORIZED, "Invalid server token (token A allowed: $allowTokenA)") } } diff --git a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt index edcef130..15d05c93 100644 --- a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt +++ b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt @@ -1,14 +1,10 @@ package com.izivia.ocpi.toolkit.modules.versions -import com.izivia.ocpi.toolkit.common.OcpiResponseBody -import com.izivia.ocpi.toolkit.common.authenticate -import com.izivia.ocpi.toolkit.common.parseBody -import com.izivia.ocpi.toolkit.common.withRequiredHeaders +import com.izivia.ocpi.toolkit.common.* import com.izivia.ocpi.toolkit.modules.credentials.repositories.PartnerRepository import com.izivia.ocpi.toolkit.modules.versions.domain.Version import com.izivia.ocpi.toolkit.transport.TransportClientBuilder -import com.izivia.ocpi.toolkit.transport.domain.HttpMethod -import com.izivia.ocpi.toolkit.transport.domain.HttpRequest +import com.izivia.ocpi.toolkit.transport.domain.* /** * Used to get the versions of a partner @@ -39,6 +35,18 @@ class VersionsClient( allowTokenA = true ) ) - .parseBody() + .also { + if (it.status != HttpStatus.OK) throw HttpException(it.status, parseHttpStatus(it.status.code).name) + } + .runCatching { + this.parseBody>>() + } + .onFailure { + throw OcpiServerUnusableApiException( + "Could not get versions from server, there was an error parsing the response: " + + "URL='$serverVersionsEndpointUrl', error='${it.message}'" + ) + } + .getOrThrow() } } diff --git a/ocpi-toolkit-2.2.1/src/test/kotlin/com/izivia/ocpi/toolkit/tests/integration/CredentialsIntegrationTests.kt b/ocpi-toolkit-2.2.1/src/test/kotlin/com/izivia/ocpi/toolkit/tests/integration/CredentialsIntegrationTests.kt index 91839cb9..d2afd8ac 100644 --- a/ocpi-toolkit-2.2.1/src/test/kotlin/com/izivia/ocpi/toolkit/tests/integration/CredentialsIntegrationTests.kt +++ b/ocpi-toolkit-2.2.1/src/test/kotlin/com/izivia/ocpi/toolkit/tests/integration/CredentialsIntegrationTests.kt @@ -21,6 +21,7 @@ import com.izivia.ocpi.toolkit.transport.domain.HttpStatus import com.mongodb.client.MongoCollection import com.mongodb.client.MongoDatabase import kotlinx.coroutines.runBlocking +import org.eclipse.jetty.client.HttpResponseException import org.junit.jupiter.api.Test import org.litote.kmongo.eq import org.litote.kmongo.getCollection @@ -29,6 +30,7 @@ import strikt.api.expectThat import strikt.api.expectThrows import strikt.assertions.* import java.util.* +import java.util.concurrent.ExecutionException class CredentialsIntegrationTests : BaseServerIntegrationTest() { @@ -179,9 +181,11 @@ class CredentialsIntegrationTests : BaseServerIntegrationTest() { credentialsClientService.register() } .isFailure() - .isA() - .get { statusCode } - .isEqualTo(OcpiStatus.CLIENT_INVALID_PARAMETERS.code) + .isA() + .get { this.cause } + .isA() + .get { this.response.status } + .isEqualTo(HttpStatus.UNAUTHORIZED.code) receiverServer.partnerCollection.deleteOne(Partner::url eq senderServer.versionsEndpoint) receiverServer.partnerCollection.insertOne( @@ -196,9 +200,11 @@ class CredentialsIntegrationTests : BaseServerIntegrationTest() { credentialsClientService.register() } .isFailure() - .isA() - .get { statusCode } - .isEqualTo(OcpiStatus.CLIENT_INVALID_PARAMETERS.code) + .isA() + .get { this.cause } + .isA() + .get { this.response.status } + .isEqualTo(HttpStatus.UNAUTHORIZED.code) } @Test From de30fb66df39cac488e83e1ae8fa617b9573a332 Mon Sep 17 00:00:00 2001 From: andacata <1506402+andacata@users.noreply.github.com> Date: Wed, 3 Jan 2024 07:06:51 +0100 Subject: [PATCH 2/2] fix(ocpi-2.2.1) versions endpoint should return http 401, not 400 --- .../izivia/ocpi/toolkit/common/OcpiToolkitExceptions.kt | 7 +++++++ .../izivia/ocpi/toolkit/modules/versions/VersionsClient.kt | 5 +---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/OcpiToolkitExceptions.kt b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/OcpiToolkitExceptions.kt index 9e3b10cb..2053304e 100644 --- a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/OcpiToolkitExceptions.kt +++ b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/common/OcpiToolkitExceptions.kt @@ -9,3 +9,10 @@ class OcpiToolkitUnknownEndpointException( already registered, make sure that the partnerRepository works properly. """.trimIndent() ) + +class OcpiToolkitResponseParsingException( + urlCalled: String, + cause: Throwable +) : Exception( + "Response cannot be parsed. URL='$urlCalled', error='${cause.message}'" +) diff --git a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt index 15d05c93..58b2d32c 100644 --- a/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt +++ b/ocpi-toolkit-2.2.1/src/main/kotlin/com/izivia/ocpi/toolkit/modules/versions/VersionsClient.kt @@ -42,10 +42,7 @@ class VersionsClient( this.parseBody>>() } .onFailure { - throw OcpiServerUnusableApiException( - "Could not get versions from server, there was an error parsing the response: " + - "URL='$serverVersionsEndpointUrl', error='${it.message}'" - ) + throw OcpiToolkitResponseParsingException(serverVersionsEndpointUrl, it) } .getOrThrow() }