package com.rackspace.cloud.servers.api.client.http;
import java.io.IOException;
import org.apache.http.Header;
import org.apache.http.HeaderIterator;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.util.EntityUtils;
/*
* HttpBundle stores a request and response for
* a call it allows you to be able to display the
* curl request and the http response to the user
* if the call fails
*/
public class HttpBundle {
private String curlRequest;
private HttpResponse response;
public void setCurlRequest(HttpEntityEnclosingRequestBase request){
curlRequest = getCurl(request);
}
public void setCurlRequest(HttpRequestBase request){
curlRequest = getCurl(request);
}
public String getCurlRequest(){
return curlRequest;
}
public HttpResponse getResponse(){
return response;
}
public void setHttpResponse(HttpResponse response){
this.response = response;
}
public String getResponseText(){
HttpEntity responseEntity = response.getEntity();
StringBuilder result = new StringBuilder();
HeaderIterator itr = response.headerIterator();
while(itr.hasNext()){
result.append(itr.nextHeader() + "\n");
}
String xml = "\n\n";
try {
xml = EntityUtils.toString(responseEntity);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
result.append(xml);
return result.toString();
}
/*
* convert the HttpRequest into the equivalent curl
* statement
*/
private String getCurl(HttpEntityEnclosingRequestBase message){
StringBuilder result = new StringBuilder("curl -verbose -X ");
result.append(message.getMethod());
HeaderIterator itr = message.headerIterator();
while(itr.hasNext()){
Header header = itr.nextHeader();
String key = header.getName();
String value = header.getValue();
// protect authentication info from being exposed
/**/
if(key.equals("X-Auth-Token") || key.equals("X-Auth-Key")){
value = "<secret>";
}
/**/
result.append(" -H \"" + key + ": " + value + "\"");
}
HttpEntity entity = message.getEntity();
String xmlBody = null;
if(entity != null){
try {
xmlBody = EntityUtils.toString(entity);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(xmlBody != null && !xmlBody.equals("")){
result.append(" -d \"<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + xmlBody + "\"");
}
result.append(" " + message.getURI());
return result.toString();
}
private String getCurl(HttpRequestBase message){
StringBuilder result = new StringBuilder("curl -verbose -X ");
result.append(message.getMethod());
HeaderIterator itr = message.headerIterator();
while(itr.hasNext()){
Header header = itr.nextHeader();
String key = header.getName();
String value = header.getValue();
// protect authentication info from being exposed
/**/
if(key.equals("X-Auth-Token") || key.equals("X-Auth-Key")){
value = "<secret>";
}
/**/
result.append(" -H \"" + key + ": " + value + "\"");
}
/* no body for just HttpRequestBase
HttpEntity entity = message.getEntity();
String xmlBody = null;
try {
xmlBody = EntityUtils.toString(entity);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(xmlBody != null && !xmlBody.equals("")){
result.append(" -d \"<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + xmlBody + "\"");
}
*/
result.append(" " + message.getURI());
return result.toString();
}
}