git-svn-id: http://webgoat.googlecode.com/svn/branches/webgoat-6.0@485 4033779f-a91e-0410-96ef-6bf7bf53c507
118 lines
2.8 KiB
Java
118 lines
2.8 KiB
Java
|
|
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));
|
|
if (!complete) return;
|
|
int i = getStageNumber(stage);
|
|
if (i < stages.length - 1) setStage(stages[i + 1]);
|
|
}
|
|
|
|
public int getStageNumber(String stage)
|
|
{
|
|
for (int i = 0; i < stages.length; i++)
|
|
if (stages[i].equals(stage)) return i;
|
|
return -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());
|
|
}
|
|
else
|
|
{
|
|
lessonProperties.remove(screen.getTitle() + "." + stages[i] + ".completed");
|
|
}
|
|
}
|
|
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();
|
|
}
|
|
|
|
}
|