Commit c900bd03 authored by Grzegorz Pietrusza's avatar Grzegorz Pietrusza

forward post body

parent 0a612e65
......@@ -5,6 +5,7 @@ import com.google.inject.Singleton;
import com.telephoners.krakyournet.ctf.beans.User;
import com.telephoners.krakyournet.ctf.core.ApplicationConfiguration;
import com.telephoners.krakyournet.ctf.helpers.StreamUtils;
import org.eclipse.jetty.http.HttpMethod;
import org.glassfish.jersey.server.ContainerRequest;
import javax.ws.rs.container.ContainerRequestContext;
......@@ -55,10 +56,18 @@ public class TaskRequestContextBuilder
}
taskRequestContext.withPath(fullPath);
if (httpMethod.equals("POST")) {
if(httpMethod.equals("GET")) {
taskRequestContext.withHttpMethod(HttpMethod.GET);
}
else if (httpMethod.equals("POST")) {
taskRequestContext.withHttpMethod(HttpMethod.POST);
String body = StreamUtils.readStream(containerRequestContext.getEntityStream());
taskRequestContext.withBody(body);
}
else {
throw new IllegalStateException("Invalid http method");
}
Map<String, String> proxiedHeaders = extractProxiedHeaders(containerRequestContext.getHeaders());
taskRequestContext.withHeaders(proxiedHeaders);
......
......@@ -4,11 +4,17 @@ import com.fasterxml.jackson.annotation.JsonInclude;
import com.telephoners.krakyournet.ctf.beans.Flag;
import com.telephoners.krakyournet.ctf.helpers.StreamUtils;
import org.apache.http.Header;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.HttpEntityWrapper;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.eclipse.jetty.http.HttpMethod;
import org.mongodb.morphia.annotations.Entity;
import java.io.IOException;
......@@ -34,7 +40,8 @@ public class WebTask extends Task
}
//todo: avoid converting in both ways
private Map<String, String> buildHeadersMap(Header[] headers) {
private Map<String, String> buildHeadersMap(Header[] headers)
{
return Stream.of(headers)
.collect(Collectors.toMap(
Header::getName,
......@@ -42,7 +49,8 @@ public class WebTask extends Task
));
}
private Header[] buildHeadersArray(Map<String, String> headers) {
private Header[] buildHeadersArray(Map<String, String> headers)
{
List<BasicHeader> headersList = headers.entrySet().stream() //todo: dirty casting
.map(headerEntry -> new BasicHeader(headerEntry.getKey(), headerEntry.getValue()))
.collect(Collectors.toList());
......@@ -54,7 +62,7 @@ public class WebTask extends Task
public TaskResponse getTaskResponse(TaskRequestContext taskRequestContext) throws IOException
{
String url = getUrl() + taskRequestContext.getPath();
CloseableHttpResponse response = proxyRequest(url, taskRequestContext.getHeaders());
CloseableHttpResponse response = proxyRequest(url, taskRequestContext);
String text = StreamUtils.readStream(response.getEntity().getContent());
return new TaskResponse(text, buildHeadersMap(response.getAllHeaders()));
}
......@@ -69,11 +77,23 @@ public class WebTask extends Task
this.url = url;
}
private CloseableHttpResponse proxyRequest(String url, Map<String, String> headers) throws IOException
private CloseableHttpResponse proxyRequest(String url, TaskRequestContext taskRequestContext) throws IOException
{
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpMethod httpMethod = taskRequestContext.getHttpMethod();
if (httpMethod.equals(HttpMethod.GET)) {
HttpGet httpget = new HttpGet(url);
httpget.setHeaders(buildHeadersArray(headers));
httpget.setHeaders(buildHeadersArray(taskRequestContext.getHeaders()));
return httpClient.execute(httpget);
} else if (httpMethod.equals(HttpMethod.POST)) {
HttpPost httpPost = new HttpPost(url);
httpPost.setHeaders(buildHeadersArray(taskRequestContext.getHeaders()));
httpPost.setEntity(new ByteArrayEntity(taskRequestContext.getBody().getBytes("UTF-8")));
return httpClient.execute(httpPost);
} else {
throw new IllegalStateException("Invalid http method");
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment