From bc92b25d6e189af5ef04dbee2b0ab91db74231b6 Mon Sep 17 00:00:00 2001 From: Johannes Renner Date: Thu, 18 Oct 2018 16:33:25 +0200 Subject: [PATCH] Enable working with API served on a sub-path This should fix https://github.com/SUSE/salt-netapi-client/issues/237 --- .../suse/salt/netapi/client/SaltClient.java | 21 +++++++------------ .../netapi/event/WebSocketEventStream.java | 4 ++-- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/suse/salt/netapi/client/SaltClient.java b/src/main/java/com/suse/salt/netapi/client/SaltClient.java index d1fbcef11..939780b01 100644 --- a/src/main/java/com/suse/salt/netapi/client/SaltClient.java +++ b/src/main/java/com/suse/salt/netapi/client/SaltClient.java @@ -46,7 +46,7 @@ public class SaltClient { * @param url the Salt API URL */ public SaltClient(URI url, AsyncHttpClient asyncHttpClient) { - this.uri = url; + this.uri = url.resolve("/"); this.asyncHttpClient = asyncHttpClient; } @@ -70,7 +70,7 @@ public CompletionStage login(final String username, String payload = gson.toJson(props); CompletionStage result = asyncHttpClient - .post(uri.resolve("/login"), payload, JsonParser.TOKEN) + .post(uri.resolve("login"), payload, JsonParser.TOKEN) .thenApply(r -> { // They return a list of tokens here, take the first one Token token = r.getResult().get(0); @@ -89,7 +89,7 @@ public CompletionStage login(final String username, */ public CompletionStage logout() { return asyncHttpClient - .post(uri.resolve("/logout"), "", JsonParser.STRING) + .post(uri.resolve("logout"), "", JsonParser.STRING) .thenApply(s -> "Your token has been cleared".contentEquals(s.getResult())); } @@ -127,7 +127,7 @@ public CompletionStage> run(final String username, final String payload = gson.toJson(list); CompletionStage> result = asyncHttpClient - .post(uri.resolve("/run"), payload, JsonParser.RUN_RESULTS) + .post(uri.resolve("run"), payload, JsonParser.RUN_RESULTS) .thenApply(s -> s.getResult().get(0)); return result; } @@ -158,7 +158,7 @@ public CompletionStage>> runRawSSHCommand(f String payload = gson.toJson(list); CompletionStage>> result = asyncHttpClient - .post(uri.resolve("/run"), payload, JsonParser.RUNSSHRAW_RESULTS) + .post(uri.resolve("run"), payload, JsonParser.RUNSSHRAW_RESULTS) .thenApply(r -> r.getResult().get(0)); return result; @@ -172,7 +172,7 @@ public CompletionStage>> runRawSSHCommand(f * @return the stats */ public CompletionStage stats() { - return asyncHttpClient.get(uri.resolve("/stats"), JsonParser.STATS); + return asyncHttpClient.get(uri.resolve("stats"), JsonParser.STATS); } /** @@ -217,16 +217,11 @@ public CompletionStage call(Call call, Client client, Optional> list = Collections.singletonList(props); String payload = gson.toJson(list); - CompletionStage result = asyncHttpClient - .post(uri.resolve(endpoint), headers, payload, new JsonParser<>(type)); - return result; + URI endpoint = auth.getInternal().isRight() ? uri.resolve("run") : uri; + return asyncHttpClient.post(endpoint, headers, payload, new JsonParser<>(type)); } } diff --git a/src/main/java/com/suse/salt/netapi/event/WebSocketEventStream.java b/src/main/java/com/suse/salt/netapi/event/WebSocketEventStream.java index 3902fce04..c08d28470 100644 --- a/src/main/java/com/suse/salt/netapi/event/WebSocketEventStream.java +++ b/src/main/java/com/suse/salt/netapi/event/WebSocketEventStream.java @@ -77,7 +77,7 @@ public WebSocketEventStream(URI uri, Token token, long sessionIdleTimeout, long maxMessageLength = maxMsgSize > 0 ? maxMsgSize : Integer.MAX_VALUE; Arrays.asList(listeners).forEach(this::addEventListener); - initializeStream(uri, token, sessionIdleTimeout, idleTimeout); + initializeStream(uri.resolve("/"), token, sessionIdleTimeout, idleTimeout); } /** @@ -90,7 +90,7 @@ private void initializeStream(URI uri, Token token, long sessionIdleTimeout, lon try { URI adjustedURI = new URI(uri.getScheme() == "https" ? "wss" : "ws", uri.getSchemeSpecificPart(), uri.getFragment()) - .resolve("/ws/" + token.getToken()); + .resolve("ws/" + token.getToken()); websocketContainer.setDefaultMaxSessionIdleTimeout(sessionIdleTimeout); // Initiate the websocket handshake