fix: SQL advanced assignment 5 (#2047)

- Add and show correct hints
- Fix solving the lesson immediately when you register as tom. Now uses `informationMessage` to display a message in the UI
- Add Playwright test

Closes: gh-2045
This commit is contained in:
Nanne Baars
2025-03-02 20:31:05 +01:00
committed by GitHub
parent c37a8e8c19
commit e9f79cc739
20 changed files with 189 additions and 97 deletions

View File

@ -4,11 +4,9 @@
*/
package org.owasp.webgoat.container.assignments;
import org.owasp.webgoat.container.i18n.PluginMessages;
public class AttackResultBuilder {
private boolean lessonCompleted;
private boolean assignmentCompleted;
private Object[] feedbackArgs;
private String feedbackResourceBundleKey;
private String output;
@ -16,15 +14,8 @@ public class AttackResultBuilder {
private AssignmentEndpoint assignment;
private boolean attemptWasMade = false;
public AttackResultBuilder lessonCompleted(boolean lessonCompleted) {
this.lessonCompleted = lessonCompleted;
this.feedbackResourceBundleKey = "lesson.completed";
return this;
}
public AttackResultBuilder lessonCompleted(boolean lessonCompleted, String resourceBundleKey) {
this.lessonCompleted = lessonCompleted;
this.feedbackResourceBundleKey = resourceBundleKey;
public AttackResultBuilder assignmentCompleted(boolean lessonCompleted) {
this.assignmentCompleted = lessonCompleted;
return this;
}
@ -55,7 +46,7 @@ public class AttackResultBuilder {
public AttackResult build() {
return new AttackResult(
lessonCompleted,
assignmentCompleted,
feedbackResourceBundleKey,
feedbackArgs,
output,
@ -81,7 +72,7 @@ public class AttackResultBuilder {
*/
public static AttackResultBuilder success(AssignmentEndpoint assignment) {
return new AttackResultBuilder()
.lessonCompleted(true)
.assignmentCompleted(true)
.attemptWasMade()
.feedback("assignment.solved")
.assignment(assignment);
@ -99,13 +90,13 @@ public class AttackResultBuilder {
*/
public static AttackResultBuilder failed(AssignmentEndpoint assignment) {
return new AttackResultBuilder()
.lessonCompleted(false)
.assignmentCompleted(false)
.attemptWasMade()
.feedback("assignment.not.solved")
.assignment(assignment);
}
public static AttackResultBuilder informationMessage(AssignmentEndpoint assignment) {
return new AttackResultBuilder().lessonCompleted(false).assignment(assignment);
return new AttackResultBuilder().assignmentCompleted(false).assignment(assignment);
}
}

View File

@ -84,7 +84,7 @@ public class CourseConfiguration {
@Bean
public Course course() {
assignments.stream().forEach(this::attachToLesson);
assignments.forEach(this::attachToLesson);
// Check if all assignments are attached to a lesson
var assignmentsAttachedToLessons =
@ -99,7 +99,7 @@ public class CourseConfiguration {
private List<String> findDiff() {
var matchedToLessons =
lessons.stream().flatMap(l -> l.getAssignments().stream()).map(a -> a.getName()).toList();
lessons.stream().flatMap(l -> l.getAssignments().stream()).map(Assignment::getName).toList();
var allAssignments = assignments.stream().map(a -> a.getClass().getSimpleName()).toList();
var diff = new ArrayList<>(allAssignments);