Commit 7719eff1 authored by Dominik Rosiek's avatar Dominik Rosiek

Merge branch 'master' of gitlab.telemabk.pl:jifwin/CTF

parents 7dcf779e fda85003
......@@ -8,6 +8,7 @@ import org.bson.types.ObjectId;
import org.mongodb.morphia.annotations.Entity;
import org.mongodb.morphia.annotations.Id;
import javax.ws.rs.container.ContainerRequestContext;
import java.io.IOException;
import java.util.List;
......@@ -37,7 +38,7 @@ public abstract class Task
{
}
public abstract String getTextForUser(User user, String path) throws IOException;
public abstract TaskResponse getTaskResponse(User user, String path, ContainerRequestContext containerRequestContext) throws IOException;
public String getName()
{
......
package com.telephoners.krakyournet.ctf.beans.tasks;
public class TaskResponse
{
private String text;
private String kynHeader;
public TaskResponse(String text, String kynHeader)
{
this.text = text;
this.kynHeader = kynHeader;
}
public String getText()
{
return text;
}
public String getKynHeader()
{
return kynHeader;
}
}
\ No newline at end of file
......@@ -5,6 +5,7 @@ import com.telephoners.krakyournet.ctf.beans.Flag;
import com.telephoners.krakyournet.ctf.beans.User;
import org.mongodb.morphia.annotations.Entity;
import javax.ws.rs.container.ContainerRequestContext;
import java.util.List;
@Entity("tasks")
......@@ -23,11 +24,12 @@ public class TextTask extends Task
{
}
public String getTextForUser(User user, String path)
public TaskResponse getTaskResponse(User user, String path, ContainerRequestContext containerRequestContext)
{
return text;
return new TaskResponse(text, null);
}
public void setText(String text)
{
this.text = text;
......
......@@ -5,15 +5,15 @@ import com.google.common.base.Joiner;
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.HttpEntity;
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.mongodb.morphia.annotations.Entity;
import javax.ws.rs.container.ContainerRequestContext;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
@Entity("tasks")
......@@ -21,7 +21,7 @@ import java.util.List;
public class WebTask extends Task
{
private String url;
private static final Joiner URL_JOINER = Joiner.on("/"); //todo
private static final String KYN_HEADER_NAME = "KYN_2016"; //todo
public WebTask(String name, int level, String description, List<Flag> flags, String url)
{
......@@ -33,11 +33,15 @@ public class WebTask extends Task
{
}
public String getTextForUser(User user, String path) throws IOException
@Override
public TaskResponse getTaskResponse(User user, String path, ContainerRequestContext context) throws IOException
{
// String url = URL_JOINER.join(getUrl(), path); //todo: rethink
String url = getUrl() + path;
return StreamUtils.readStream(proxyRequest(url, user));
String kynHeaderValue = context.getHeaderString(KYN_HEADER_NAME);
CloseableHttpResponse response = proxyRequest(url, user, kynHeaderValue);
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
}
public String getUrl()
......@@ -50,13 +54,12 @@ public class WebTask extends Task
this.url = url;
}
private InputStream proxyRequest(String url, User user) throws IOException
private CloseableHttpResponse proxyRequest(String url, User user, String kynHeaderValue) throws IOException
{
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpget = new HttpGet(url);
httpget.setHeader("CTF-User", user.getName());
CloseableHttpResponse execute = httpClient.execute(httpget);
HttpEntity entity = execute.getEntity();
return entity.getContent();
httpget.setHeader("CTF-User", user.getName()); //todo: is it necessary?
httpget.setHeader("KYN_2016", kynHeaderValue); //todo: move to configuration
return httpClient.execute(httpget);
}
}
......@@ -2,6 +2,7 @@ package com.telephoners.krakyournet.ctf.resources;
import com.telephoners.krakyournet.ctf.beans.User;
import com.telephoners.krakyournet.ctf.beans.tasks.Task;
import com.telephoners.krakyournet.ctf.beans.tasks.TaskResponse;
import com.telephoners.krakyournet.ctf.repositories.TasksRepository;
import io.dropwizard.auth.Auth;
import org.glassfish.jersey.server.ContainerRequest;
......@@ -21,6 +22,7 @@ import java.io.IOException;
public class TaskResource
{
private final TasksRepository tasksRepository;
private static final String KYN_HEADER_NAME = "KYN_2016"; //todo, move to configuration
@Inject
public TaskResource(TasksRepository tasksRepository)
......@@ -39,10 +41,18 @@ public class TaskResource
//todo: refactor, path not necessary in textTasks
ContainerRequest context = (ContainerRequest) containerRequestContext;
String query = context.getRequestUri().getQuery();
String fullPath = path;
if(query != null) { //todo: refactor
fullPath = fullPath + "?" + query;
}
return Response.ok().entity(task.getTextForUser(user, fullPath)).build();
TaskResponse taskResponse = task.getTaskResponse(user, fullPath, containerRequestContext);
Response.ResponseBuilder responseBuilder = Response.ok();
responseBuilder.entity(taskResponse.getText());
String kynHeaderValue = taskResponse.getKynHeader();
if(kynHeaderValue != null) {
responseBuilder.header(KYN_HEADER_NAME, kynHeaderValue);
}
return responseBuilder.build();
}
}
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