summaryrefslogtreecommitdiffstats
path: root/hosted-api
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-05-06 14:17:12 +0200
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-05-06 16:37:07 +0200
commitd8b4c679ba3de823038d539a6c7226cb192bc92e (patch)
tree7f2e27918ea2da39743a2a9b77cb5e64a3b92f70 /hosted-api
parent1b7c363a7eb452214ec76bbdac1f9f25889f14e3 (diff)
Move overloading of request data variants to client
Diffstat (limited to 'hosted-api')
-rw-r--r--hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java88
-rw-r--r--hosted-api/src/main/java/ai/vespa/hosted/api/RequestSigner.java31
-rw-r--r--hosted-api/src/test/java/ai/vespa/hosted/api/SignaturesTest.java5
3 files changed, 35 insertions, 89 deletions
diff --git a/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java b/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java
index c7ca19612d9..7710f3c6129 100644
--- a/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java
+++ b/hosted-api/src/main/java/ai/vespa/hosted/api/ControllerHttpClient.java
@@ -66,14 +66,25 @@ public abstract class ControllerHttpClient {
.timeout(Duration.ofMinutes(30)),
POST,
new MultiPartStreamer().addJson("submitOptions", metaToJson(submission))
- .addFile("applicationZip", submission.applicationZip())
- .addFile("applicationTestZip", submission.applicationTestZip()))));
+ .addFile("applicationZip", submission.applicationZip())
+ .addFile("applicationTestZip", submission.applicationTestZip()))));
}
- protected abstract HttpRequest request(HttpRequest.Builder request, Method method);
- protected abstract HttpRequest request(HttpRequest.Builder request, Method method, byte[] data);
- protected abstract HttpRequest request(HttpRequest.Builder request, Method method, Supplier<InputStream> data);
- protected abstract HttpRequest request(HttpRequest.Builder request, Method method, MultiPartStreamer data);
+ protected HttpRequest request(HttpRequest.Builder request, Method method, Supplier<InputStream> data) {
+ return request.method(method.name(), ofInputStream(data)).build();
+ }
+
+ private HttpRequest request(HttpRequest.Builder request, Method method) {
+ return request(request, method, InputStream::nullInputStream);
+ }
+
+ private HttpRequest request(HttpRequest.Builder request, Method method, byte[] data) {
+ return request(request, method, () -> new ByteArrayInputStream(data));
+ }
+
+ private HttpRequest request(HttpRequest.Builder request, Method method, MultiPartStreamer data) {
+ return request(request.setHeader("Content-Type", data.contentType()), method, data::data);
+ }
private URI apiPath() {
return concatenated(endpoint, "application", "v4");
@@ -95,6 +106,19 @@ public abstract class ControllerHttpClient {
return base.resolve(String.join("/", parts) + "/");
}
+ private HttpResponse<byte[]> send(HttpRequest request) {
+ return unchecked(() -> client.send(request, ofByteArray()));
+ }
+
+ private static <T> T unchecked(Callable<T> callable) {
+ try {
+ return callable.call();
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
/** Returns a JSON representation of the submission meta data. */
private static String metaToJson(Submission submission) {
try {
@@ -130,19 +154,6 @@ public abstract class ControllerHttpClient {
return new JsonDecoder().decode(new Slime(), data);
}
- private HttpResponse<byte[]> send(HttpRequest request) {
- return unchecked(() -> client.send(request, ofByteArray()));
- }
-
- private static <T> T unchecked(Callable<T> callable) {
- try {
- return callable.call();
- }
- catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
/** Client that signs requests with a private key whose public part is assigned to an application in the remote controller. */
private static class SigningControllerHttpClient extends ControllerHttpClient {
@@ -155,25 +166,10 @@ public abstract class ControllerHttpClient {
}
@Override
- protected HttpRequest request(HttpRequest.Builder request, Method method) {
- return signer.signed(request, method);
- }
-
- @Override
- protected HttpRequest request(HttpRequest.Builder request, Method method, byte[] data) {
- return signer.signed(request, method, data);
- }
-
- @Override
protected HttpRequest request(HttpRequest.Builder request, Method method, Supplier<InputStream> data) {
return signer.signed(request, method, data);
}
- @Override
- protected HttpRequest request(HttpRequest.Builder request, Method method, MultiPartStreamer data) {
- return signer.signed(request, method, data);
- }
-
}
@@ -181,28 +177,8 @@ public abstract class ControllerHttpClient {
private static class AthenzControllerHttpClient extends ControllerHttpClient {
private AthenzControllerHttpClient(URI endpoint, Path privateKeyFile, Path certificateFile) {
- super(endpoint, HttpClient.newBuilder()
- .sslContext(new SslContextBuilder().withKeyStore(privateKeyFile, certificateFile).build()));
- }
-
- @Override
- protected HttpRequest request(HttpRequest.Builder request, Method method) {
- return request(request, method, InputStream::nullInputStream);
- }
-
- @Override
- protected HttpRequest request(HttpRequest.Builder request, Method method, byte[] data) {
- return request(request, method, () -> new ByteArrayInputStream(data));
- }
-
- @Override
- protected HttpRequest request(HttpRequest.Builder request, Method method, Supplier<InputStream> data) {
- return request.method(method.name(), ofInputStream(data)).build();
- }
-
- @Override
- protected HttpRequest request(HttpRequest.Builder request, Method method, MultiPartStreamer data) {
- return request(request.header("Content-Type", data.contentType()), method, data::data);
+ super(endpoint,
+ HttpClient.newBuilder().sslContext(new SslContextBuilder().withKeyStore(privateKeyFile, certificateFile).build()));
}
}
diff --git a/hosted-api/src/main/java/ai/vespa/hosted/api/RequestSigner.java b/hosted-api/src/main/java/ai/vespa/hosted/api/RequestSigner.java
index 5bbb0bb76cc..b2fd16b7975 100644
--- a/hosted-api/src/main/java/ai/vespa/hosted/api/RequestSigner.java
+++ b/hosted-api/src/main/java/ai/vespa/hosted/api/RequestSigner.java
@@ -70,35 +70,4 @@ public class RequestSigner {
}
}
- /**
- * Completes, signs and returns the given request builder and data.
- *
- * This sets the Content-Type header from the given streamer, and returns
- * {@code signed(request, method, streamer::data)}.
- */
- public HttpRequest signed(HttpRequest.Builder request, Method method, MultiPartStreamer streamer) {
- request.setHeader("Content-Type", streamer.contentType());
- return signed(request, method, streamer::data);
- }
-
- /**
- * Completes, signs and returns the given request builder.<br>
- * <br>
- * This is simply a convenience for<br>
- * {@code signed(request, method, () -> new ByteArrayInputStream(data))}.
- */
- public HttpRequest signed(HttpRequest.Builder request, Method method, byte[] data) {
- return signed(request, method, () -> new ByteArrayInputStream(data));
- }
-
- /**
- * Completes, signs and returns the given request builder.<br>
- * <br>
- * This sets the data of the request to be empty, and returns <br>
- * {@code signed(request, method, InputStream::nullInputStream)}.
- */
- public HttpRequest signed(HttpRequest.Builder request, Method method) {
- return signed(request, method, InputStream::nullInputStream);
- }
-
}
diff --git a/hosted-api/src/test/java/ai/vespa/hosted/api/SignaturesTest.java b/hosted-api/src/test/java/ai/vespa/hosted/api/SignaturesTest.java
index 9be32812514..0a0d4a48edf 100644
--- a/hosted-api/src/test/java/ai/vespa/hosted/api/SignaturesTest.java
+++ b/hosted-api/src/test/java/ai/vespa/hosted/api/SignaturesTest.java
@@ -4,6 +4,7 @@ package ai.vespa.hosted.api;
import org.junit.Test;
import java.io.ByteArrayInputStream;
+import java.io.InputStream;
import java.net.URI;
import java.net.http.HttpRequest;
import java.security.DigestInputStream;
@@ -75,7 +76,7 @@ public class SignaturesTest {
URI requestUri = URI.create("https://host:123/path//./../more%2fpath/?yes=no");
HttpRequest.Builder builder = HttpRequest.newBuilder(requestUri);
- HttpRequest request = signer.signed(builder, Method.GET);
+ HttpRequest request = signer.signed(builder, Method.GET, InputStream::nullInputStream);
// GET request with correct signature and URI as-is.
RequestVerifier verifier = new RequestVerifier(ecPemPublicKey, clock);
@@ -88,7 +89,7 @@ public class SignaturesTest {
// POST request with correct signature and URI normalized.
MultiPartStreamer streamer = new MultiPartStreamer().addText("message", new String(message, UTF_8))
.addBytes("copy", message);
- request = signer.signed(builder, Method.POST, streamer);
+ request = signer.signed(builder.setHeader("Content-Type", streamer.contentType()), Method.POST, streamer::data);
assertTrue(verifier.verify(Method.valueOf(request.method()),
request.uri().normalize(),
request.headers().firstValue("X-Timestamp").get(),