Skip to content

Commit 4f007b9

Browse files
committed
Merge branch 'resubscribe-on-token-expiration' into 3.x
Signed-off-by: Ben Hale <[email protected]>
2 parents ee77cf5 + 759b976 commit 4f007b9

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

.idea/compiler.xml

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/util/Operator.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ public <T> Mono<T> parseBodyToMono(Function<HttpClientResponseWithBody, Publishe
172172
return parseBodyToFlux(responseTransformer).singleOrEmpty();
173173
}
174174

175-
private static boolean isUnauthorized(HttpClientResponse response) {
176-
return response.status() == HttpResponseStatus.UNAUTHORIZED;
175+
private static boolean isUnauthorized(HttpClientResponseWithBody response) {
176+
return response.getResponse().status() == HttpResponseStatus.UNAUTHORIZED;
177177
}
178178

179179
private void attachChannelHandlers(HttpClientResponse response, Connection connection) {
@@ -186,18 +186,24 @@ private <T> Mono<T> deserialized(ByteBufFlux body, Class<T> bodyType) {
186186
return JsonCodec.decode(this.context.getConnectionContext().getObjectMapper(), body, bodyType);
187187
}
188188

189-
private HttpClientResponseWithBody invalidateToken(HttpClientResponseWithBody response) {
190-
if (isUnauthorized(response.getResponse())) {
191-
this.context.getTokenProvider().ifPresent(tokenProvider -> tokenProvider.invalidate(this.context.getConnectionContext()));
192-
}
193-
return response;
189+
private Mono<HttpClientResponseWithBody> invalidateToken(Mono<HttpClientResponseWithBody> inbound) {
190+
return inbound
191+
.flatMap(response -> {
192+
if (isUnauthorized(response)) {
193+
this.context.getTokenProvider().ifPresent(tokenProvider -> tokenProvider.invalidate(this.context.getConnectionContext()));
194+
return inbound
195+
.transform(this::invalidateToken);
196+
} else {
197+
return Mono.just(response);
198+
}
199+
});
194200
}
195201

196202
private Mono<HttpClientResponseWithBody> processResponse(HttpClientResponse response, ByteBufFlux body) {
197203
HttpClientResponseWithBody responseWithBody = HttpClientResponseWithBody.of(body, response);
198204

199205
return Mono.just(responseWithBody)
200-
.map(this::invalidateToken)
206+
.transform(this::invalidateToken)
201207
.transform(this.context.getErrorPayloadMapper()
202208
.orElse(ErrorPayloadMappers.fallback()));
203209
}

0 commit comments

Comments
 (0)