Commit 5f53a626 authored by Grzegorz Pietrusza's avatar Grzegorz Pietrusza

implement flags dependended on username stub

parent 1cb24255
......@@ -31,12 +31,14 @@ import java.util.UUID;
public class CTFApplication extends Application<ApplicationConfiguration> {
private UsersRepository usersRepository; //todo: refactor to injects
private TasksRepository tasksRepository; //todo: refactor to injects
private FlagChecker flagChecker; //todo: inject
@Override
public void run(ApplicationConfiguration applicationConfiguration, Environment environment) throws Exception {
MongoDBConnector dbConnector = new MongoDBConnector(applicationConfiguration);
dbConnector.connect();
Injector injector = createInjector(applicationConfiguration, dbConnector);
//REGISTER TEAMS
......@@ -45,8 +47,6 @@ public class CTFApplication extends Application<ApplicationConfiguration> {
applicationConfiguration.getTeams().forEach(teamsRepository::add);
//GENERATE TASKS
TasksRepository tasksRepository = new TasksRepository(dbConnector);
tasksRepository.clean();
int numberOfNewTasks = 20;
......@@ -62,7 +62,6 @@ public class CTFApplication extends Application<ApplicationConfiguration> {
//GENERATE TASKS END
//REGISTER RESOURCES
Injector injector = createInjector(applicationConfiguration, dbConnector);
environment.jersey().register(injector.getInstance(TeamsResource.class));
environment.jersey().register(injector.getInstance(TasksResource.class));
environment.jersey().register(injector.getInstance(ProxyResource.class));
......@@ -115,11 +114,12 @@ public class CTFApplication extends Application<ApplicationConfiguration> {
bind(MongoDBConnector.class).toInstance(dbConnector);
TeamsRepository teamsRepository = new TeamsRepository(dbConnector);
TasksRepository tasksRepository = new TasksRepository(dbConnector);
usersRepository = new UsersRepository(dbConnector, teamsRepository);
SolutionsRepository solutionsRepository = new SolutionsRepository(dbConnector);
FlagChecker flagChecker = new FlagChecker(applicationConfiguration, tasksRepository, teamsRepository, solutionsRepository);
flagChecker = new FlagChecker(applicationConfiguration, tasksRepository, teamsRepository, solutionsRepository);
tasksRepository = new TasksRepository(dbConnector, flagChecker);
bind(FlagChecker.class).toInstance(flagChecker);
bind(TeamsRepository.class).toInstance(teamsRepository);
bind(TasksRepository.class).toInstance(tasksRepository);
bind(UsersRepository.class).toInstance(usersRepository);
......@@ -128,7 +128,6 @@ public class CTFApplication extends Application<ApplicationConfiguration> {
bind(TasksResource.class).toInstance(new TasksResource(tasksRepository, teamsRepository,
solutionsRepository, flagChecker));
bind(ProxyResource.class).toInstance(new ProxyResource());
bind(FlagChecker.class).toInstance(flagChecker);
}
});
}
......
......@@ -15,6 +15,8 @@ import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Created by gpietrus on 16.02.16.
......@@ -42,6 +44,12 @@ public class TasksResource
return tasksRepository.getAll();
}
@GET
@Path("my")
public List<String> getUserFlags(@Auth User user) {
return tasksRepository.getUserFlagsHashes(user.getName()).stream().map(Map.Entry::getValue).collect(Collectors.toList());
}
@POST
public boolean submitSolution(@Auth User user,
String flag) throws Exception {
......
......@@ -12,7 +12,6 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
* Created by gpietrus on 20.02.2016.
......@@ -33,7 +32,7 @@ public class FlagChecker {
this.solutionsRepository = solutionsRepository;
}
private String calculateHashValue(String username, String flagValue) {
public String calculateHashValue(String username, String flagValue) { //todo
String combinedStrings = salt + username + flagValue; //todo
MessageDigest md5 = null;//todo: discuss
try {
......@@ -51,17 +50,12 @@ public class FlagChecker {
}
private boolean compareHash(String hash, String username) throws Exception {
Optional<Map.Entry<Task, String>> matchingHash = tasksRepository.getAll().stream()
.collect(Collectors.toMap(
task -> task,
task -> calculateHashValue(username, task.getFlag().getValue())
))
.entrySet()
Optional<Map.Entry<Task, String>> matchingHash = tasksRepository.getUserFlagsHashes(username)
.stream()
.filter(taskHashEntry -> taskHashEntry.getValue().equals(hash))
.findFirst();
if(matchingHash.isPresent()) {
if (matchingHash.isPresent()) {
acceptSolution(username, matchingHash.get().getKey());
return true;
}
......
package repositories;
import core.FlagChecker;
import database.MongoDBConnector;
import objects.Task;
import org.bson.Document;
import javax.inject.Inject;
import java.util.List;
import java.util.UUID;
import java.util.*;
import java.util.stream.Collectors;
/**
......@@ -14,11 +14,13 @@ import java.util.stream.Collectors;
*/
public class TasksRepository implements Repository {
private final FlagChecker flagChecker;
private MongoDBConnector mongoDBConnector;
@Inject
public TasksRepository(MongoDBConnector mongoDBConnector) {
public TasksRepository(MongoDBConnector mongoDBConnector, FlagChecker flagChecker) {
this.mongoDBConnector = mongoDBConnector;
this.flagChecker = flagChecker;
}
public void get(UUID uuid) {
......@@ -39,6 +41,15 @@ public class TasksRepository implements Repository {
public void clean() {
mongoDBConnector.removeCollection("tasks");
}
public Set<Map.Entry<Task, String>> getUserFlagsHashes(String username) {
return this.getAll().stream()
.collect(Collectors.toMap(
task -> task,
task -> flagChecker.calculateHashValue(username, task.getFlag().getValue())
))
.entrySet();
}
}
//todo: generify!
\ No newline at end of file
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