From cd315d271a03f86e8611ff5d4f53519a5980b5d0 Mon Sep 17 00:00:00 2001 From: nicolaosc Date: Fri, 23 Sep 2022 20:51:39 +0200 Subject: [PATCH] client builder with token producer; allow reload of new token after its expiration --- src/main/java/com/orbitz/consul/Consul.java | 23 +++++++++++++++++++ .../orbitz/consul/util/AuthTokenProducer.java | 7 ++++++ 2 files changed, 30 insertions(+) create mode 100644 src/main/java/com/orbitz/consul/util/AuthTokenProducer.java diff --git a/src/main/java/com/orbitz/consul/Consul.java b/src/main/java/com/orbitz/consul/Consul.java index ad07d900..1c42f33a 100644 --- a/src/main/java/com/orbitz/consul/Consul.java +++ b/src/main/java/com/orbitz/consul/Consul.java @@ -21,6 +21,7 @@ import com.orbitz.consul.cache.TimeoutInterceptor; import com.orbitz.consul.config.ClientConfig; import com.orbitz.consul.monitoring.ClientEventCallback; +import com.orbitz.consul.util.AuthTokenProducer; import com.orbitz.consul.util.Jackson; import com.orbitz.consul.util.TrustManagerUtils; import com.orbitz.consul.util.bookend.ConsulBookend; @@ -392,6 +393,28 @@ public Builder withTokenAuth(String token) { return this; } + + /** + * Sets the token used for authentication + * + * @param authTokenProducer the producer of the authentication token + * @return The builder. + */ + public Builder withTokenAuth(AuthTokenProducer authTokenProducer) { + authInterceptor = chain -> { + Request original = chain.request(); + + Request.Builder requestBuilder = original.newBuilder() + .header("X-Consul-Token", authTokenProducer.getToken()) + .method(original.method(), original.body()); + + Request request = requestBuilder.build(); + return chain.proceed(request); + }; + + return this; + } + /** * Sets the ACL token to be used with Consul * diff --git a/src/main/java/com/orbitz/consul/util/AuthTokenProducer.java b/src/main/java/com/orbitz/consul/util/AuthTokenProducer.java new file mode 100644 index 00000000..58abc6b2 --- /dev/null +++ b/src/main/java/com/orbitz/consul/util/AuthTokenProducer.java @@ -0,0 +1,7 @@ +package com.orbitz.consul.util; + +public interface AuthTokenProducer { + + String getToken(); + +}