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> {
Task task = new Task(String.valueOf(UUID.randomUUID()), i,
i % 2 == 0 ? TaskType.CRYPTO : TaskType.WEB,
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);
}
......@@ -102,7 +102,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> {
//todo: use reflections to register tasks?
//todo: move
jersey.register(new CryptoTaskResource(tasksRepository));
jersey.register(new WebTaskResource());
jersey.register(new WebTaskResource(tasksRepository));
}
private void registerAuthFeatures(Environment environment) {
......
......@@ -3,11 +3,11 @@ package resources.tasks;
import core.TaskType;
import io.dropwizard.auth.Auth;
import objects.tasks.Task;
import objects.User;
import objects.tasks.Task;
import objects.tasks.TaskCryptoContent;
import repositories.TasksRepository;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
......@@ -20,14 +20,17 @@ import javax.ws.rs.core.Response;
*/
@Produces(MediaType.APPLICATION_JSON)
public class CryptoTaskResource extends TaskResource {
private TasksRepository tasksRepository;
@Inject
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?
// @Override
@Path("crypto/{task_level}")
......@@ -37,9 +40,11 @@ public class CryptoTaskResource extends TaskResource {
final @PathParam("task_level") int taskLevel) {
Task task = tasksRepository.get(taskLevel);//todo
if(task != null && task.getTaskType().equals(TaskType.CRYPTO)) {
return Response.ok().entity(task.getTaskType().getType()).build();
if(task == null || !task.getTaskType().equals(TaskType.CRYPTO)) {
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;
import repositories.TasksRepository;
import javax.inject.Inject;
import javax.ws.rs.Path;
/**
......@@ -7,6 +10,14 @@ import javax.ws.rs.Path;
*/
@Path(value = "/task")
public abstract class TaskResource {
protected TasksRepository tasksRepository;
@Inject
public TaskResource(TasksRepository tasksRepository) {
this.tasksRepository = tasksRepository;
}
//todo
// public abstract Response getTask(); //todo: auth
}
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.Path;
import javax.ws.rs.PathParam;
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.
*/
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
public Response getTask() {
return Response.ok().entity("web task").build();
//todo: auth
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