divide by zero, inaccurate discount and totals, reflection of user input git-svn-id: http://webgoat.googlecode.com/svn/trunk/webgoat@273 4033779f-a91e-0410-96ef-6bf7bf53c507
91 lines
2.6 KiB
Java
Executable File
91 lines
2.6 KiB
Java
Executable File
package org.owasp.webgoat.session;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Properties;
|
|
|
|
public class RandomLessonTracker extends LessonTracker {
|
|
|
|
private String[] stages;
|
|
|
|
private String stage;
|
|
|
|
private Map<String, Boolean> completed = new HashMap<String, Boolean>();
|
|
|
|
public RandomLessonTracker(String[] stages) {
|
|
if (stages == null)
|
|
stages = new String[0];
|
|
this.stages = stages;
|
|
}
|
|
|
|
public void setStage(String stage) {
|
|
this.stage = stage;
|
|
}
|
|
|
|
public String getStage() {
|
|
if (this.stage == null && stages.length > 0)
|
|
return stages[0];
|
|
return this.stage;
|
|
}
|
|
|
|
public void setStageComplete(String stage, boolean complete) {
|
|
completed.put(stage, Boolean.valueOf(complete));
|
|
for (int i=0; i<stages.length-1; i++)
|
|
if (stages[i].equals(stage))
|
|
setStage(stages[i+1]);
|
|
}
|
|
|
|
public boolean hasCompleted(String stage) {
|
|
Boolean complete = completed.get(stage);
|
|
return complete == null ? false : complete.booleanValue();
|
|
}
|
|
|
|
@Override
|
|
public boolean getCompleted() {
|
|
for (int i=0; i<stages.length; i++)
|
|
if (!hasCompleted(stages[i]))
|
|
return false;
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public void setCompleted(boolean complete) {
|
|
if (complete == true)
|
|
throw new UnsupportedOperationException("Use individual stage completion instead");
|
|
for (int i=0;i<stages.length; i++)
|
|
setStageComplete(stages[i], false);
|
|
setStage(stages[0]);
|
|
}
|
|
|
|
protected void setProperties(Properties props, Screen screen) {
|
|
super.setProperties(props, screen);
|
|
for (int i=0; i<stages.length; i++) {
|
|
String p = props.getProperty(screen.getTitle() + "." + stages[i] + ".completed");
|
|
if (p != null) {
|
|
setStageComplete(stages[i], Boolean.valueOf(p));
|
|
}
|
|
}
|
|
setStage(props.getProperty(screen.getTitle() + ".stage"));
|
|
}
|
|
|
|
public void store(WebSession s, Screen screen, String user) {
|
|
for (int i=0; i<stages.length; i++) {
|
|
if (hasCompleted(stages[i]))
|
|
lessonProperties.setProperty(screen.getTitle() + "." + stages[i] + ".completed", Boolean.TRUE.toString());
|
|
}
|
|
lessonProperties.setProperty(screen.getTitle() + ".stage", getStage());
|
|
super.store(s, screen, user);
|
|
}
|
|
|
|
public String toString() {
|
|
StringBuffer buff = new StringBuffer();
|
|
buff.append(super.toString());
|
|
for (int i=0; i<stages.length; i++) {
|
|
buff.append(" - completed " + stages[i] + " :....... " + hasCompleted(stages[i]) + "\n");
|
|
}
|
|
buff.append(" - currentStage:....... " + getStage() + "\n");
|
|
return buff.toString();
|
|
}
|
|
|
|
}
|