Extract the stage-related code from LessonTracker into SequentialLessonTracker

git-svn-id: http://webgoat.googlecode.com/svn/trunk@157 4033779f-a91e-0410-96ef-6bf7bf53c507
This commit is contained in:
rogan.dawes
2007-07-11 12:50:32 +00:00
parent 02560a2510
commit f5e56c7081
18 changed files with 234 additions and 175 deletions

View File

@ -42,8 +42,6 @@ public class LessonTracker
private boolean completed = false;
private int currentStage = 1;
private int maxHintLevel = 0;
private int numVisits = 0;
@ -72,18 +70,6 @@ public class LessonTracker
}
public int getStage()
{
return currentStage;
}
public void setStage(int stage)
{
currentStage = stage;
}
/**
* Gets the maxHintLevel attribute of the LessonTracker object
*
@ -175,15 +161,13 @@ public class LessonTracker
*
* @param props The new properties value
*/
private void setProperties(Properties props, Screen screen)
protected void setProperties(Properties props, Screen screen)
{
completed = Boolean.valueOf(
props.getProperty(screen.getTitle() + ".completed"))
.booleanValue();
maxHintLevel = Integer.parseInt(props.getProperty(screen.getTitle()
+ ".maxHintLevel"));
currentStage = Integer.parseInt(props.getProperty(screen.getTitle()
+ ".currentStage"));
numVisits = Integer.parseInt(props.getProperty(screen.getTitle()
+ ".numVisits"));
viewedCookies = Boolean.valueOf(
@ -367,8 +351,6 @@ public class LessonTracker
//System.out.println( "Storing data to" + fileName );
lessonProperties.setProperty(screen.getTitle() + ".completed", Boolean
.toString(completed));
lessonProperties.setProperty(screen.getTitle() + ".currentStage",
Integer.toString(currentStage));
lessonProperties.setProperty(screen.getTitle() + ".maxHintLevel",
Integer.toString(maxHintLevel));
lessonProperties.setProperty(screen.getTitle() + ".numVisits", Integer
@ -417,7 +399,6 @@ public class LessonTracker
StringBuffer buff = new StringBuffer();
buff.append("LessonTracker:" + "\n");
buff.append(" - completed:.......... " + completed + "\n");
buff.append(" - currentStage:....... " + currentStage + "\n");
buff.append(" - maxHintLevel:....... " + maxHintLevel + "\n");
buff.append(" - numVisits:.......... " + numVisits + "\n");
buff.append(" - viewedCookies:...... " + viewedCookies + "\n");

View File

@ -0,0 +1,39 @@
package org.owasp.webgoat.session;
import java.util.Properties;
public class SequentialLessonTracker extends LessonTracker {
private int currentStage = 1;
public int getStage()
{
return currentStage;
}
public void setStage(int stage)
{
currentStage = stage;
}
protected void setProperties(Properties props, Screen screen)
{
super.setProperties(props, screen);
currentStage = Integer.parseInt(props.getProperty(screen.getTitle()
+ ".currentStage"));
}
public void store(WebSession s, Screen screen, String user)
{
lessonProperties.setProperty(screen.getTitle() + ".currentStage",
Integer.toString(currentStage));
super.store(s, screen, user);
}
public String toString() {
return super.toString() + " - currentStage:....... " + currentStage + "\n";
}
}

View File

@ -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.SequentialLessonAdapter;
/*******************************************************************************
*
@ -907,9 +908,14 @@ public class WebSession
}
else if (myParser.getRawParameter( STAGE, null ) != null)
{
int stage = myParser.getIntParameter(STAGE, getCurrentLesson().getStage(this));
if (stage > 0 && stage <= getCurrentLesson().getStageCount())
getCurrentLesson().setStage(this, stage);
AbstractLesson al = getCurrentLesson();
if (al instanceof SequentialLessonAdapter)
{
SequentialLessonAdapter sla = (SequentialLessonAdapter) al;
int stage = myParser.getIntParameter(STAGE, sla.getStage(this));
if (stage > 0 && stage <= sla.getStageCount())
sla.setStage(this, stage);
}
}
// else update global variables for the current screen
else
@ -981,9 +987,14 @@ public class WebSession
private void restartLesson(int lessonId)
{
System.out.println("Restarting lesson: " + getLesson(lessonId));
getCurrentLesson().getLessonTracker( this ).setStage(1);
getCurrentLesson().getLessonTracker( this ).setCompleted(false);
AbstractLesson al = getLesson(lessonId);
System.out.println("Restarting lesson: " + al);
al.getLessonTracker( this ).setCompleted(false);
if (al instanceof SequentialLessonAdapter)
{
SequentialLessonAdapter sla = (SequentialLessonAdapter) al;
sla.getLessonTracker( this ).setStage(1);
}
}
/**
@ -1063,23 +1074,6 @@ public class WebSession
return currentMenu;
}
public String htmlEncode(String s)
{
//System.out.println("Testing for stage 4 completion in lesson " + getCurrentLesson().getName());
if (getCurrentLesson().getName().equals("CrossSiteScripting"))
{
if (getCurrentLesson().getStage(this) == 4 &&
s.indexOf("<script>") > -1 && s.indexOf("alert") > -1 && s.indexOf("</script>") > -1)
{
setMessage( "Welcome to stage 5 -- exploiting the data layer" );
// Set a phantom stage value to setup for the 4-5 transition
getCurrentLesson().setStage(this, 1005);
}
}
return ParameterParser.htmlEncode(s);
}
public WebgoatContext getWebgoatContext() {
return webgoatContext;
}