package org.aksw.jena_sparql_api.web.utils;
import java.util.Arrays;
import javax.servlet.http.HttpServletRequest;
import javax.xml.bind.DatatypeConverter;
import org.aksw.commons.util.strings.StringUtils;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClientBuilder;
public class AuthenticatorUtils {
/**
* Create a http client with username / password authentication.
* If the argument is null, an http client without authentication is returned.
*
* @param credentials
* @return
*/
public static HttpClientBuilder prepareHttpClientBuilder(UsernamePasswordCredentials credentials) {
HttpClientBuilder result = HttpClientBuilder.create();
if(credentials != null) {
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(AuthScope.ANY, credentials);
result.setDefaultCredentialsProvider(provider);
}
return result;
}
public static UsernamePasswordCredentials parseCredentials(HttpServletRequest req) {
UsernamePasswordCredentials result = null;
/*
Enumeration<String> e = req.getHeaderNames();
while(e.hasMoreElements()) {
String name = e.nextElement();
System.out.println(name + ": " + req.getHeader(name));
}*/
String authStr = StringUtils.coalesce(
req.getHeader("Authorization"),
req.getHeader("WWW-Authenticate"));
if(authStr != null && authStr.startsWith("Basic")) {
// authStr: Basic base64credentials
String base64Credentials = authStr.substring("Basic".length()).trim();
// credentials = username:password
String credentials = new String(DatatypeConverter.parseBase64Binary(base64Credentials));
final String[] values = credentials.split(":", 2);
if(values.length == 2) {
String username = values[0];
String password = values[1];
//char[] password = values[1].toCharArray();
result = new UsernamePasswordCredentials(username, password);
} else {
throw new RuntimeException("Invalid header - got: " + Arrays.asList(values));
}
}
return result;
}
}