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