Scoreboard now returns the flags captured (title)

This commit is contained in:
Nanne Baars 2017-05-02 02:45:35 +02:00
parent eb7a6bd2be
commit a134b25213

View File

@ -3,6 +3,8 @@ package org.owasp.webgoat.users;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import org.owasp.webgoat.i18n.PluginMessages;
import org.owasp.webgoat.session.Course;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -21,12 +23,14 @@ public class Scoreboard {
private final UserTrackerRepository userTrackerRepository; private final UserTrackerRepository userTrackerRepository;
private final UserRepository userRepository; private final UserRepository userRepository;
private final Course course;
private final PluginMessages pluginMessages;
@AllArgsConstructor @AllArgsConstructor
@Getter @Getter
private class Ranking { private class Ranking {
private String username; private String username;
private int flagsCaptured; private List<String> flagsCaptured;
} }
@GetMapping("/scoreboard") @GetMapping("/scoreboard")
@ -35,17 +39,23 @@ public class Scoreboard {
List<Ranking> rankings = Lists.newArrayList(); List<Ranking> rankings = Lists.newArrayList();
for (WebGoatUser user : allUsers) { for (WebGoatUser user : allUsers) {
UserTracker userTracker = userTrackerRepository.findOne(user.getUsername()); UserTracker userTracker = userTrackerRepository.findOne(user.getUsername());
int challengesSolved = challengesSolved(userTracker); rankings.add(new Ranking(user.getUsername(), challengesSolved(userTracker)));
rankings.add(new Ranking(user.getUsername(), challengesSolved));
} }
return rankings; return rankings;
} }
private int challengesSolved(UserTracker userTracker) { private List<String> challengesSolved(UserTracker userTracker) {
List<String> challenges = Lists.newArrayList("Challenge1", "Challenge2", "Challenge3", "Challenge4", "Challenge5"); List<String> challenges = Lists.newArrayList("Challenge1", "Challenge2", "Challenge3", "Challenge4", "Challenge5");
List<LessonTracker> challengeTrackers = challenges.stream() return challenges.stream()
.map(c -> userTracker.getLessonTracker(c)) .map(c -> userTracker.getLessonTracker(c))
.filter(l -> l.isPresent()).map(l -> l.get()).collect(Collectors.toList()); .filter(l -> l.isPresent()).map(l -> l.get())
return challengeTrackers.size(); .map(l -> l.getLessonName())
.map(l -> toLessonTitle(l))
.collect(Collectors.toList());
}
private String toLessonTitle(String id) {
String titleKey = course.getLessons().stream().filter(l -> l.getId().equals(id)).findFirst().get().getTitle();
return pluginMessages.getMessage(titleKey, titleKey);
} }
} }