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;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.telephoners.krakyournet.ctf.beans.Flag;
import com.telephoners.krakyournet.ctf.beans.User;
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.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.mongodb.morphia.annotations.Entity;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Entity("tasks")
@JsonInclude(JsonInclude.Include.NON_NULL)
......@@ -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
public TaskResponse getTaskResponse(TaskRequestContext taskRequestContext) throws IOException
{
String url = getUrl() + taskRequestContext.getPath();
//todo: header in
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);
CloseableHttpResponse response = proxyRequest(url, taskRequestContext.getHeaders());
String text = StreamUtils.readStream(response.getEntity().getContent());
Header kynHeader = response.getFirstHeader(KYN_HEADER_NAME);
return new TaskResponse(text, kynHeader != null ? kynHeader.getValue() : null); //todo: needs refactorig
return new TaskResponse(text, buildHeadersMap(response.getAllHeaders()));
}
*/
public String getUrl()
{
......@@ -62,12 +69,11 @@ public class WebTask extends Task
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();
HttpGet httpget = new HttpGet(url);
httpget.setHeader("CTF-User", user.getName()); //todo: is it necessary?
httpget.setHeader("KYN_2016", kynHeaderValue); //todo: move to configuration
httpget.setHeaders(buildHeadersArray(headers));
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