package org.openstack.atlas.api.mgmt.filters.helpers;
import org.openstack.atlas.api.mgmt.helpers.LDAPTools.Base64Coder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HttpHeadersTools {
private HttpServletRequest req;
private HttpServletResponse res;
private String authHeader;
private static final Pattern basicRe = Pattern.compile("BASIC\\s+(\\S+)", Pattern.CASE_INSENSITIVE);
private static final Pattern userRe = Pattern.compile("(\\S+):(\\S+)");
private static final String AUTHORIZATION = "Authorization";
public HttpHeadersTools() {
}
public HttpHeadersTools(HttpServletRequest req, HttpServletResponse res) {
this.req = req;
this.res = res;
this.authHeader = req.getHeader(AUTHORIZATION);
}
public boolean isValidAuth() {
if (getBasicString() == null || getBasicUser() == null || getBasicPassword() == null) {
return false;
}
return true;
}
public boolean isBasicAuth() {
Matcher m;
if (authHeader == null) {
return false;
}
m = basicRe.matcher(authHeader);
if (!m.find()) {
return false;
}
return true;
}
public HttpServletRequest getReq() {
return req;
}
public void setReq(HttpServletRequest req) {
this.req = req;
}
public HttpServletResponse getRes() {
return res;
}
public void setRes(HttpServletResponse res) {
this.res = res;
}
public String getBasicString() {
String out;
if (authHeader == null) {
return null;
}
Matcher m = basicRe.matcher(authHeader);
if (!m.find()) {
return null;
}
try {
out = Base64Coder.decodeString(m.group(1));
} catch (IllegalArgumentException e) {
return null;
}
return out;
}
public String getBasicUser() {
String basicString = getBasicString();
if (basicString == null) {
return null;
}
Matcher m = userRe.matcher(basicString);
if (!m.find()) {
return null;
}
return m.group(1);
}
public String getBasicPassword() {
String basicString = getBasicString();
if (basicString == null) {
return null;
}
Matcher m = userRe.matcher(basicString);
if (!m.find()) {
return null;
}
return m.group(2);
}
public boolean isHeaderTrue(String name) {
boolean out = false;
if (req.getHeader(name) == null) {
return out;
}
if (req.getHeader(name).equalsIgnoreCase("true")) {
out = true;
}
return out;
}
public static Set<String> commastr2set(String valueStr) {
Set<String> out = new HashSet<String>();
String[] vals = valueStr.split(",");
for (String val : vals) {
out.add(val);
}
return out;
}
public static String set2commastr(Set<String> values) {
int i;
List<String> valList = new ArrayList<String>(values);
Collections.sort(valList);
Object[] objAry = valList.toArray();
StringBuilder sb = new StringBuilder();
if (objAry.length == 0) {
return sb.toString();
}
i = 1;
for (i = 0; i < objAry.length - 1; i++) {
sb.append(String.format("%s,", (String) objAry[i]));
}
sb.append(objAry[i]);
return sb.toString();
}
}