AuthenticationInterceptor.java

package io.github.evisentin.wordpress.rest.client.adapter.apache.interceptors;

import io.github.evisentin.wordpress.rest.client.adapter.apache.auth.ApacheAuthenticationStrategyHandlerRegistry;
import io.github.evisentin.wordpress.rest.client.domain.auth.WpAuthenticationStrategy;
import lombok.NonNull;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.core5.http.EntityDetails;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.HttpRequestInterceptor;
import org.apache.hc.core5.http.protocol.HttpContext;

import static org.apache.hc.core5.http.HttpHeaders.AUTHORIZATION;

public class AuthenticationInterceptor implements HttpRequestInterceptor {

    private final WpAuthenticationStrategy strategy;
    private final ApacheAuthenticationStrategyHandlerRegistry registry;

    public AuthenticationInterceptor(final @NonNull WpAuthenticationStrategy strategy,
                                     final @NonNull CloseableHttpClient authHttpClient,
                                     final @NonNull String apiUrl) {
        this.strategy = strategy;
        registry = new ApacheAuthenticationStrategyHandlerRegistry(authHttpClient, apiUrl);
    }

    @Override
    public void process(final HttpRequest request,
                        final EntityDetails entity,
                        final HttpContext context) {

        final String value = registry.getHandler(strategy).authenticate(strategy);

        request.addHeader(AUTHORIZATION, value);
    }
}