Commit 3a7563a1 authored by Grzegorz Pietrusza's avatar Grzegorz Pietrusza

proxy headers

parent 6689d7a5
...@@ -2,16 +2,20 @@ package com.telephoners.krakyournet.ctf.beans.tasks; ...@@ -2,16 +2,20 @@ package com.telephoners.krakyournet.ctf.beans.tasks;
import com.fasterxml.jackson.annotation.JsonInclude; 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.beans.User;
import com.telephoners.krakyournet.ctf.helpers.StreamUtils; import com.telephoners.krakyournet.ctf.helpers.StreamUtils;
import org.apache.http.Header;
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.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.mongodb.morphia.annotations.Entity; import org.mongodb.morphia.annotations.Entity;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Entity("tasks") @Entity("tasks")
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
...@@ -29,28 +33,31 @@ public class WebTask extends Task ...@@ -29,28 +33,31 @@ public class WebTask extends Task
{ {
} }
//todo: avoid converting in both ways
private Map<String, String> buildHeadersMap(Header[] headers) {
return Stream.of(headers)
.collect(Collectors.toMap(
Header::getName,
Header::getValue
));
}
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());
Header[] headersArray = new Header[headersList.size()];
return headersList.toArray(headersArray);
}
@Override @Override
public TaskResponse getTaskResponse(TaskRequestContext taskRequestContext) throws IOException public TaskResponse getTaskResponse(TaskRequestContext taskRequestContext) throws IOException
{ {
String url = getUrl() + taskRequestContext.getPath(); String url = getUrl() + taskRequestContext.getPath();
//todo: header in CloseableHttpResponse response = proxyRequest(url, taskRequestContext.getHeaders());
CloseableHttpResponse response = proxyRequest(url, taskRequestContext.getUser(), null);
String text = StreamUtils.readStream(response.getEntity().getContent());
//todo: header out
TaskResponse taskResponse = new TaskResponse(text, null);//todo: build with
return taskResponse;
}
/*
public TaskResponse getTaskResponse(User user, String path, ContainerRequestContext context) throws IOException
{
String kynHeaderValue = context.getHeaderString(KYN_HEADER_NAME);
CloseableHttpResponse response = proxyRequest(url, user, kynHeaderValue);
String text = StreamUtils.readStream(response.getEntity().getContent()); String text = StreamUtils.readStream(response.getEntity().getContent());
Header kynHeader = response.getFirstHeader(KYN_HEADER_NAME); return new TaskResponse(text, buildHeadersMap(response.getAllHeaders()));
return new TaskResponse(text, kynHeader != null ? kynHeader.getValue() : null); //todo: needs refactorig
} }
*/
public String getUrl() public String getUrl()
{ {
...@@ -62,12 +69,11 @@ public class WebTask extends Task ...@@ -62,12 +69,11 @@ public class WebTask extends Task
this.url = url; this.url = url;
} }
private CloseableHttpResponse proxyRequest(String url, User user, String kynHeaderValue) throws IOException private CloseableHttpResponse proxyRequest(String url, Map<String, String> headers) throws IOException
{ {
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpget = new HttpGet(url); HttpGet httpget = new HttpGet(url);
httpget.setHeader("CTF-User", user.getName()); //todo: is it necessary? httpget.setHeaders(buildHeadersArray(headers));
httpget.setHeader("KYN_2016", kynHeaderValue); //todo: move to configuration
return httpClient.execute(httpget); return httpClient.execute(httpget);
} }
} }
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