@Override public CompletionStage<Boolean> authorize(ServiceRequestContext ctx, T data) { return AuthorizerUtil.authorize(self, ctx, data).thenComposeAsync(result -> { if (result == null) { throw AuthorizerUtil.newNullResultException(self); } else { return result ? CompletableFuture.completedFuture(true) : AuthorizerUtil.authorize(nextAuthorizer, ctx, data); } }, ctx.contextAwareEventLoop()); }
@Override public HttpResponse serve(ServiceRequestContext ctx, HttpRequest req) throws Exception { return HttpResponse.from(AuthorizerUtil.authorize(authorizer, ctx, req).handleAsync((result, cause) -> { try { if (cause == null) { if (result != null) { return result ? successHandler.authSucceeded(delegate(), ctx, req) : failureHandler.authFailed(delegate(), ctx, req, null); } cause = AuthorizerUtil.newNullResultException(authorizer); } return failureHandler.authFailed(delegate(), ctx, req, cause); } catch (Exception e) { return Exceptions.throwUnsafely(e); } }, ctx.contextAwareEventLoop())); } }