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}