Commit f3352b0e authored by Grzegorz Pietrusza's avatar Grzegorz Pietrusza

make flag submitting dependent on task level

parent d32c1cb0
...@@ -18,8 +18,6 @@ import java.security.NoSuchAlgorithmException; ...@@ -18,8 +18,6 @@ import java.security.NoSuchAlgorithmException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Singleton @Singleton
...@@ -92,50 +90,21 @@ public class TasksRepository implements Repository ...@@ -92,50 +90,21 @@ public class TasksRepository implements Repository
} }
//todo: refactor with the function below //todo: refactor with the function below
private Optional<Pair<Task, Flag>> getTaskFlagPairByHashValue(User user, String userHash) private Optional<Pair<Task, Flag>> getTaskFlagPairByHashValue(User user, String userHash, int taskLevel)
{ {
//todo: find TASK by level
//todo: inline
String username = user.getName(); String username = user.getName();
//todo: collapse lambdas Task task = getByLevel(taskLevel);
Optional<Pair<Task, Flag>> matched = this.getAll().stream() List<Flag> flags = task.getFlags();
.collect(Collectors.toMap( Optional<Flag> matchedFlag = flags.stream()
task -> task, .filter(flag -> calculateHashValue(username, flag.getValue()).equals(userHash))
Task::getFlags
))
.entrySet()
.stream()
.map((Function<Map.Entry<Task, List<Flag>>, Pair<Task, Optional<Flag>>>) taskFlagsEntry -> {
Task task = taskFlagsEntry.getKey();
Optional<Flag> matchedFlag = taskFlagsEntry.getValue().stream()
.filter(new Predicate<Flag>()
{
@Override
public boolean test(Flag flag1)
{
return calculateHashValue(username, flag1.getValue()).equals(userHash);
}
})
.findFirst(); .findFirst();
return new Pair<Task, Optional<Flag>>(task, matchedFlag); //todo: use orElse
}) if(matchedFlag.isPresent()) {
.filter(new Predicate<Pair<Task, Optional<Flag>>>() return Optional.of(new Pair<>(task, matchedFlag.get()));
{
@Override
public boolean test(Pair<Task, Optional<Flag>> taskOptionalPair)
{
return taskOptionalPair.getValue().isPresent();
}
})
.map(new Function<Pair<Task, Optional<Flag>>, Pair<Task, Flag>>()
{
@Override
public Pair<Task, Flag> apply(Pair<Task, Optional<Flag>> taskOptionalPair)
{
return new Pair<Task, Flag>(taskOptionalPair.getKey(), taskOptionalPair.getValue().get());
} }
}) return Optional.empty();
.findFirst();
return matched;
//todo: refactor
} }
public String calculateHashValue(String username, String flagValue) public String calculateHashValue(String username, String flagValue)
...@@ -156,10 +125,10 @@ public class TasksRepository implements Repository ...@@ -156,10 +125,10 @@ public class TasksRepository implements Repository
return solutionsRepository.exists(solution); return solutionsRepository.exists(solution);
} }
public boolean checkHash(User user, String hashValue) public boolean checkHash(User user, String hashValue, int taskLevel)
{ {
//todo: refactor //todo: refactor
Optional<Pair<Task, Flag>> taskFlagPairOptional = getTaskFlagPairByHashValue(user, hashValue); Optional<Pair<Task, Flag>> taskFlagPairOptional = getTaskFlagPairByHashValue(user, hashValue, taskLevel);
if (!taskFlagPairOptional.isPresent()) { if (!taskFlagPairOptional.isPresent()) {
return false; return false;
} }
......
...@@ -9,10 +9,7 @@ import io.dropwizard.auth.Auth; ...@@ -9,10 +9,7 @@ import io.dropwizard.auth.Auth;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import javax.ws.rs.GET; import javax.ws.rs.*;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import java.util.List; import java.util.List;
...@@ -39,10 +36,12 @@ public class SolutionsResource ...@@ -39,10 +36,12 @@ public class SolutionsResource
} }
@POST @POST
@Path("/{task_level}")
public Response submitSolution(@Auth User user, public Response submitSolution(@Auth User user,
@PathParam("task_level") int taskLevel,
String hash) throws Exception String hash) throws Exception
{ {
if (tasksRepository.checkHash(user, hash)) { if (tasksRepository.checkHash(user, hash, taskLevel)) {
return Response.ok().build(); return Response.ok().build();
} }
return Response.status(Response.Status.NOT_ACCEPTABLE).build(); return Response.status(Response.Status.NOT_ACCEPTABLE).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