WebGoat/main/project/JavaSource/org/owasp/webgoat/session/RandomLessonTracker.java
rogan.dawes b0b94c4688 Miscellaneous bug fixes
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
2008-01-14 14:02:11 +00:00

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();
}
}