Migrate the labs to direct/Random access stages
git-svn-id: http://webgoat.googlecode.com/svn/trunk@158 4033779f-a91e-0410-96ef-6bf7bf53c507
This commit is contained in:
@ -0,0 +1,86 @@
|
||||
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) {
|
||||
throw new UnsupportedOperationException("Use individual stage completion instead");
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.owasp.webgoat.lessons.AbstractLesson;
|
||||
import org.owasp.webgoat.lessons.Category;
|
||||
import org.owasp.webgoat.lessons.RandomLessonAdapter;
|
||||
import org.owasp.webgoat.lessons.SequentialLessonAdapter;
|
||||
|
||||
/*******************************************************************************
|
||||
@ -916,6 +917,17 @@ public class WebSession
|
||||
if (stage > 0 && stage <= sla.getStageCount())
|
||||
sla.setStage(this, stage);
|
||||
}
|
||||
else if (al instanceof RandomLessonAdapter)
|
||||
{
|
||||
try
|
||||
{
|
||||
RandomLessonAdapter rla = (RandomLessonAdapter) al;
|
||||
int stage = myParser.getIntParameter(STAGE) - 1;
|
||||
String[] stages = rla.getStages();
|
||||
if (stage>0 && stage <= stages.length)
|
||||
rla.setStage(this, stages[stage]);
|
||||
} catch (ParameterNotFoundException pnfe) {}
|
||||
}
|
||||
}
|
||||
// else update global variables for the current screen
|
||||
else
|
||||
|
Reference in New Issue
Block a user