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