Commit c900bd03 authored by Grzegorz Pietrusza's avatar Grzegorz Pietrusza

forward post body

parent 0a612e65
...@@ -5,6 +5,7 @@ import com.google.inject.Singleton; ...@@ -5,6 +5,7 @@ import com.google.inject.Singleton;
import com.telephoners.krakyournet.ctf.beans.User; import com.telephoners.krakyournet.ctf.beans.User;
import com.telephoners.krakyournet.ctf.core.ApplicationConfiguration; import com.telephoners.krakyournet.ctf.core.ApplicationConfiguration;
import com.telephoners.krakyournet.ctf.helpers.StreamUtils; import com.telephoners.krakyournet.ctf.helpers.StreamUtils;
import org.eclipse.jetty.http.HttpMethod;
import org.glassfish.jersey.server.ContainerRequest; import org.glassfish.jersey.server.ContainerRequest;
import javax.ws.rs.container.ContainerRequestContext; import javax.ws.rs.container.ContainerRequestContext;
...@@ -55,10 +56,18 @@ public class TaskRequestContextBuilder ...@@ -55,10 +56,18 @@ public class TaskRequestContextBuilder
} }
taskRequestContext.withPath(fullPath); 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()); String body = StreamUtils.readStream(containerRequestContext.getEntityStream());
taskRequestContext.withBody(body); taskRequestContext.withBody(body);
} }
else {
throw new IllegalStateException("Invalid http method");
}
Map<String, String> proxiedHeaders = extractProxiedHeaders(containerRequestContext.getHeaders()); Map<String, String> proxiedHeaders = extractProxiedHeaders(containerRequestContext.getHeaders());
taskRequestContext.withHeaders(proxiedHeaders); taskRequestContext.withHeaders(proxiedHeaders);
......
...@@ -4,11 +4,17 @@ import com.fasterxml.jackson.annotation.JsonInclude; ...@@ -4,11 +4,17 @@ import com.fasterxml.jackson.annotation.JsonInclude;
import com.telephoners.krakyournet.ctf.beans.Flag; import com.telephoners.krakyournet.ctf.beans.Flag;
import com.telephoners.krakyournet.ctf.helpers.StreamUtils; import com.telephoners.krakyournet.ctf.helpers.StreamUtils;
import org.apache.http.Header; 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.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet; 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.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHeader;
import org.eclipse.jetty.http.HttpMethod;
import org.mongodb.morphia.annotations.Entity; import org.mongodb.morphia.annotations.Entity;
import java.io.IOException; import java.io.IOException;
...@@ -34,15 +40,17 @@ public class WebTask extends Task ...@@ -34,15 +40,17 @@ public class WebTask extends Task
} }
//todo: avoid converting in both ways //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( return Stream.of(headers)
Header::getName, .collect(Collectors.toMap(
Header::getValue Header::getName,
)); Header::getValue
));
} }
private Header[] buildHeadersArray(Map<String, String> headers) { private Header[] buildHeadersArray(Map<String, String> headers)
{
List<BasicHeader> headersList = headers.entrySet().stream() //todo: dirty casting List<BasicHeader> headersList = headers.entrySet().stream() //todo: dirty casting
.map(headerEntry -> new BasicHeader(headerEntry.getKey(), headerEntry.getValue())) .map(headerEntry -> new BasicHeader(headerEntry.getKey(), headerEntry.getValue()))
.collect(Collectors.toList()); .collect(Collectors.toList());
...@@ -54,7 +62,7 @@ public class WebTask extends Task ...@@ -54,7 +62,7 @@ public class WebTask extends Task
public TaskResponse getTaskResponse(TaskRequestContext taskRequestContext) throws IOException public TaskResponse getTaskResponse(TaskRequestContext taskRequestContext) throws IOException
{ {
String url = getUrl() + taskRequestContext.getPath(); String url = getUrl() + taskRequestContext.getPath();
CloseableHttpResponse response = proxyRequest(url, taskRequestContext.getHeaders()); CloseableHttpResponse response = proxyRequest(url, taskRequestContext);
String text = StreamUtils.readStream(response.getEntity().getContent()); String text = StreamUtils.readStream(response.getEntity().getContent());
return new TaskResponse(text, buildHeadersMap(response.getAllHeaders())); return new TaskResponse(text, buildHeadersMap(response.getAllHeaders()));
} }
...@@ -69,11 +77,23 @@ public class WebTask extends Task ...@@ -69,11 +77,23 @@ public class WebTask extends Task
this.url = url; 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(); CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpget = new HttpGet(url);
httpget.setHeaders(buildHeadersArray(headers)); HttpMethod httpMethod = taskRequestContext.getHttpMethod();
return httpClient.execute(httpget); if (httpMethod.equals(HttpMethod.GET)) {
HttpGet httpget = new HttpGet(url);
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