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