001package io.prometheus.client.exporter;
002
003import java.io.IOException;
004import java.io.UnsupportedEncodingException;
005import java.net.HttpURLConnection;
006
007public class BasicAuthHttpConnectionFactory implements HttpConnectionFactory {
008    private final HttpConnectionFactory originConnectionFactory;
009    private final String basicAuthHeader;
010
011    public BasicAuthHttpConnectionFactory(HttpConnectionFactory connectionFactory, String user, String password) {
012        this.originConnectionFactory = connectionFactory;
013        this.basicAuthHeader = encode(user, password);
014    }
015
016    public BasicAuthHttpConnectionFactory(String user, String password) {
017        this(new DefaultHttpConnectionFactory(), user, password);
018    }
019
020    @Override
021    public HttpURLConnection create(String url) throws IOException {
022        HttpURLConnection connection = originConnectionFactory.create(url);
023        connection.setRequestProperty("Authorization", basicAuthHeader);
024        return connection;
025    }
026
027    private String encode(String user, String password) {
028        try {
029            byte[] credentialsBytes = (user + ":" + password).getBytes("UTF-8");
030            String encoded = Base64.encodeToString(credentialsBytes);
031            return String.format("Basic %s", encoded);
032        } catch (UnsupportedEncodingException e) {
033            throw new IllegalArgumentException(e);
034        }
035    }
036}