diff --git a/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/KeyLoadAndSignAcceptanceTest.java b/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/KeyLoadAndSignAcceptanceTest.java index 6879f3eef..e5b3be9ce 100644 --- a/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/KeyLoadAndSignAcceptanceTest.java +++ b/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/KeyLoadAndSignAcceptanceTest.java @@ -71,11 +71,10 @@ public void signDataWithKeyLoadedFromUnencryptedFile() { .contentType(ContentType.JSON) .pathParam("publicKey", keyPair.getPublicKey().toString()) .body(new JsonObject().put("signingRoot", SIGNING_ROOT.toHexString()).toString()) - .when() .post(SIGN_ENDPOINT) .then() - .assertThat() .statusCode(200) + .contentType(ContentType.TEXT) .body(equalToIgnoringCase(expectedSignature.toString())); } @@ -97,11 +96,10 @@ public void signDataWithKeyLoadedFromKeyStoreFile(KdfFunction kdfFunction) { .contentType(ContentType.JSON) .pathParam("publicKey", keyPair.getPublicKey().toString()) .body(new JsonObject().put("signingRoot", SIGNING_ROOT.toHexString()).toString()) - .when() .post(SIGN_ENDPOINT) .then() - .assertThat() .statusCode(200) + .contentType(ContentType.TEXT) .body(equalToIgnoringCase(expectedSignature.toString())); } diff --git a/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/PublicKeysAcceptanceTest.java b/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/PublicKeysAcceptanceTest.java index 7550a5f86..fda518d2e 100644 --- a/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/PublicKeysAcceptanceTest.java +++ b/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/PublicKeysAcceptanceTest.java @@ -26,6 +26,7 @@ import java.io.IOException; import java.nio.file.Path; +import io.restassured.http.ContentType; import io.restassured.response.ValidatableResponse; import org.apache.tuweni.bytes.Bytes; import org.junit.jupiter.api.Test; @@ -88,15 +89,35 @@ public void allLoadedKeysAreReturnedPublicKeyResponse() { "", containsInAnyOrder(key1.getPublicKey().toString(), key2.getPublicKey().toString())); } + @Test + public void allLoadedKeysAreReturnedPublicKeyResponseWithEmptyAccept() { + final BLSKeyPair key1 = createKey(PRIVATE_KEY_1); + final BLSKeyPair key2 = createKey(PRIVATE_KEY_2); + + final SignerConfigurationBuilder builder = new SignerConfigurationBuilder(); + builder.withKeyStoreDirectory(testDirectory); + startSigner(builder.build()); + + // without openapi filter + given() + .baseUri(signer.getUrl()) + .accept("") + .get(SIGNER_PUBLIC_KEYS_PATH) + .then() + .statusCode(200) + .contentType(ContentType.JSON) + .body( + "", containsInAnyOrder(key1.getPublicKey().toString(), key2.getPublicKey().toString())); + } + private ValidatableResponse whenGetSignerPublicKeysPathThenAssertThat() { return given() .baseUri(signer.getUrl()) .filter(getOpenApiValidationFilter()) - .when() .get(SIGNER_PUBLIC_KEYS_PATH) .then() - .assertThat() - .statusCode(200); + .statusCode(200) + .contentType(ContentType.JSON); } private BLSKeyPair createKey(final String privateKey) { diff --git a/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/UpcheckAcceptanceTest.java b/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/UpcheckAcceptanceTest.java index 0ff50f23d..f7d535472 100644 --- a/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/UpcheckAcceptanceTest.java +++ b/acceptance-tests/src/test/java/tech/pegasys/eth2signer/tests/UpcheckAcceptanceTest.java @@ -17,6 +17,7 @@ import tech.pegasys.eth2signer.dsl.signer.SignerConfigurationBuilder; +import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; public class UpcheckAcceptanceTest extends AcceptanceTestBase { @@ -28,11 +29,10 @@ void upcheckOnCorrectPortRespondsWithOK() { given() .baseUri(signer.getUrl()) .filter(getOpenApiValidationFilter()) - .when() .get("/upcheck") .then() - .assertThat() .statusCode(200) + .contentType(ContentType.TEXT) .body(equalToIgnoringCase("OK")); } } diff --git a/core/src/main/java/tech/pegasys/eth2signer/core/Runner.java b/core/src/main/java/tech/pegasys/eth2signer/core/Runner.java index 1cbe25312..e5407406c 100644 --- a/core/src/main/java/tech/pegasys/eth2signer/core/Runner.java +++ b/core/src/main/java/tech/pegasys/eth2signer/core/Runner.java @@ -137,6 +137,9 @@ private OpenAPI3RouterFactory createOpenApiRouterFactory( throws InterruptedException, ExecutionException { final LogErrorHandler errorHandler = new LogErrorHandler(); final OpenAPI3RouterFactory openAPI3RouterFactory = getOpenAPI3RouterFactory(vertx); + openAPI3RouterFactory + .getOptions() + .setMountResponseContentTypeHandler(false); // manually set content-type openAPI3RouterFactory.addHandlerByOperationId(UPCHECK_OPERATION_ID, new UpcheckHandler()); openAPI3RouterFactory.addFailureHandlerByOperationId(UPCHECK_OPERATION_ID, errorHandler); diff --git a/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/GetPublicKeysHandler.java b/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/GetPublicKeysHandler.java index 328eeb1de..06f9537de 100644 --- a/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/GetPublicKeysHandler.java +++ b/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/GetPublicKeysHandler.java @@ -12,6 +12,9 @@ */ package tech.pegasys.eth2signer.core.http.handlers; +import static com.google.common.net.MediaType.JSON_UTF_8; +import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE; + import tech.pegasys.eth2signer.core.signing.ArtifactSignerProvider; import io.vertx.core.Handler; @@ -29,6 +32,6 @@ public GetPublicKeysHandler(final ArtifactSignerProvider signerProvider) { public void handle(final RoutingContext context) { final JsonArray jsonArray = new JsonArray(); signerProvider.availableIdentifiers().forEach(jsonArray::add); - context.response().end(jsonArray.encode()); + context.response().putHeader(CONTENT_TYPE, JSON_UTF_8.toString()).end(jsonArray.encode()); } } diff --git a/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/SignForPublicKeyHandler.java b/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/SignForPublicKeyHandler.java index 96bfdfa48..b9faa2a04 100644 --- a/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/SignForPublicKeyHandler.java +++ b/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/SignForPublicKeyHandler.java @@ -12,6 +12,9 @@ */ package tech.pegasys.eth2signer.core.http.handlers; +import static com.google.common.net.MediaType.PLAIN_TEXT_UTF_8; +import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE; + import tech.pegasys.artemis.bls.BLSSignature; import tech.pegasys.eth2signer.core.http.models.SigningRequestBody; import tech.pegasys.eth2signer.core.signing.ArtifactSigner; @@ -49,7 +52,10 @@ public void handle(RoutingContext routingContext) { final Bytes dataToSign = getDataToSign(params); final BLSSignature signature = signer.get().sign(dataToSign); - routingContext.response().end(signature.toString()); + routingContext + .response() + .putHeader(CONTENT_TYPE, PLAIN_TEXT_UTF_8.toString()) + .end(signature.toString()); } private Bytes getDataToSign(final RequestParameters params) { diff --git a/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/UpcheckHandler.java b/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/UpcheckHandler.java index 233da7a43..1552811a8 100644 --- a/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/UpcheckHandler.java +++ b/core/src/main/java/tech/pegasys/eth2signer/core/http/handlers/UpcheckHandler.java @@ -12,6 +12,9 @@ */ package tech.pegasys.eth2signer.core.http.handlers; +import static com.google.common.net.MediaType.PLAIN_TEXT_UTF_8; +import static io.vertx.core.http.HttpHeaders.CONTENT_TYPE; + import io.vertx.core.Handler; import io.vertx.ext.web.RoutingContext; @@ -19,6 +22,6 @@ public class UpcheckHandler implements Handler { @Override public void handle(RoutingContext routingContext) { - routingContext.response().end("OK"); + routingContext.response().putHeader(CONTENT_TYPE, PLAIN_TEXT_UTF_8.toString()).end("OK"); } }