Commit 00c212d9 authored by Grzegorz Pietrusza's avatar Grzegorz Pietrusza

proxy and crpyot enhanced

parent 841d4d34
...@@ -81,7 +81,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> { ...@@ -81,7 +81,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> {
Task task = new Task(String.valueOf(UUID.randomUUID()), i, Task task = new Task(String.valueOf(UUID.randomUUID()), i,
i % 2 == 0 ? TaskType.CRYPTO : TaskType.WEB, i % 2 == 0 ? TaskType.CRYPTO : TaskType.WEB,
Flag.newRandomFlag(), Flag.newRandomFlag(),
i % 2 == 0 ? new TaskCryptoContent("crypto text") : new TaskWebContent("url text") i % 2 == 0 ? new TaskCryptoContent("crypto text") : new TaskWebContent("http://google.com")
); );
tasksRepository.add(task); tasksRepository.add(task);
} }
...@@ -102,7 +102,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> { ...@@ -102,7 +102,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> {
//todo: use reflections to register tasks? //todo: use reflections to register tasks?
//todo: move //todo: move
jersey.register(new CryptoTaskResource(tasksRepository)); jersey.register(new CryptoTaskResource(tasksRepository));
jersey.register(new WebTaskResource()); jersey.register(new WebTaskResource(tasksRepository));
} }
private void registerAuthFeatures(Environment environment) { private void registerAuthFeatures(Environment environment) {
......
...@@ -3,11 +3,11 @@ package resources.tasks; ...@@ -3,11 +3,11 @@ package resources.tasks;
import core.TaskType; import core.TaskType;
import io.dropwizard.auth.Auth; import io.dropwizard.auth.Auth;
import objects.tasks.Task;
import objects.User; import objects.User;
import objects.tasks.Task;
import objects.tasks.TaskCryptoContent;
import repositories.TasksRepository; import repositories.TasksRepository;
import javax.inject.Inject;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
...@@ -20,14 +20,17 @@ import javax.ws.rs.core.Response; ...@@ -20,14 +20,17 @@ import javax.ws.rs.core.Response;
*/ */
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
public class CryptoTaskResource extends TaskResource { public class CryptoTaskResource extends TaskResource {
private TasksRepository tasksRepository;
@Inject
public CryptoTaskResource(TasksRepository tasksRepository) { public CryptoTaskResource(TasksRepository tasksRepository) {
this.tasksRepository = tasksRepository; super(tasksRepository);
} }
// private TasksRepository tasksRepository;
// @Inject
// public CryptoTaskResource(TasksRepository tasksRepository) {
// this.tasksRepository = tasksRepository;
// }
//todo: merge crypto and web task? //todo: merge crypto and web task?
// @Override // @Override
@Path("crypto/{task_level}") @Path("crypto/{task_level}")
...@@ -37,9 +40,11 @@ public class CryptoTaskResource extends TaskResource { ...@@ -37,9 +40,11 @@ public class CryptoTaskResource extends TaskResource {
final @PathParam("task_level") int taskLevel) { final @PathParam("task_level") int taskLevel) {
Task task = tasksRepository.get(taskLevel);//todo Task task = tasksRepository.get(taskLevel);//todo
if(task != null && task.getTaskType().equals(TaskType.CRYPTO)) { if(task == null || !task.getTaskType().equals(TaskType.CRYPTO)) {
return Response.ok().entity(task.getTaskType().getType()).build(); return Response.status(Response.Status.BAD_REQUEST).build();
} }
return Response.status(Response.Status.BAD_REQUEST).build(); TaskCryptoContent taskContent = (TaskCryptoContent) task.getTaskContent();
return Response.ok().entity(taskContent.getText()).build();
} }
} }
package resources.tasks; package resources.tasks;
import repositories.TasksRepository;
import javax.inject.Inject;
import javax.ws.rs.Path; import javax.ws.rs.Path;
/** /**
...@@ -7,6 +10,14 @@ import javax.ws.rs.Path; ...@@ -7,6 +10,14 @@ import javax.ws.rs.Path;
*/ */
@Path(value = "/task") @Path(value = "/task")
public abstract class TaskResource { public abstract class TaskResource {
protected TasksRepository tasksRepository;
@Inject
public TaskResource(TasksRepository tasksRepository) {
this.tasksRepository = tasksRepository;
}
//todo //todo
// public abstract Response getTask(); //todo: auth // public abstract Response getTask(); //todo: auth
} }
package resources.tasks; package resources.tasks;
import core.TaskType;
import io.dropwizard.auth.Auth;
import objects.User;
import objects.tasks.Task;
import objects.tasks.TaskWebContent;
import org.apache.http.HttpEntity;
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 repositories.TasksRepository;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;
/** /**
* Created by gpietrus on 23.02.2016. * Created by gpietrus on 23.02.2016.
*/ */
public class WebTaskResource extends TaskResource { public class WebTaskResource extends TaskResource {
@Path("web") public WebTaskResource(TasksRepository tasksRepository) {
super(tasksRepository);
}
public String readStream(InputStream input) throws IOException {
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(input))) {
return buffer.lines().collect(Collectors.joining("\n"));
}
}
//todo: remove proxy resource
private InputStream proxyRequest(String url, User user) 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();
}
//todo: merge crypto and web task?
// @Override
@Path("web/{task_level}")
@GET @GET
public Response getTask() { //todo: auth
return Response.ok().entity("web task").build(); public Response getTask(@Auth User user,
final @PathParam("task_level") int taskLevel) throws IOException {
Task task = tasksRepository.get(taskLevel);//todo
if(task == null || !task.getTaskType().equals(TaskType.WEB)) {
return Response.status(Response.Status.BAD_REQUEST).build();
}
TaskWebContent taskContent = (TaskWebContent) task.getTaskContent();
String response = readStream(proxyRequest(taskContent.getUrl(), user));
return Response.ok().entity(response).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