package org.owasp.webgoat.lessons; import java.sql.Connection; import java.sql.SQLException; import org.owasp.webgoat.session.CreateDB; import org.owasp.webgoat.session.DatabaseUtilities; import org.owasp.webgoat.session.LessonTracker; import org.owasp.webgoat.session.RandomLessonTracker; import org.owasp.webgoat.session.WebSession; public abstract class RandomLessonAdapter extends LessonAdapter { public abstract String[] getStages(); public void setStage(WebSession s, String stage) { getLessonTracker(s).setStage(stage); try { Connection connection = DatabaseUtilities.getConnection(s); CreateDB db = new CreateDB(); db.makeDB(connection); System.out.println("Successfully refreshed the database."); } catch (SQLException sqle) { System.out.println("Error refreshing the database!"); sqle.printStackTrace(); } } public String getStage(WebSession s) { return getLessonTracker(s).getStage(); } public void setStageComplete(WebSession s, String stage) { RandomLessonTracker lt = getLessonTracker(s); lt.setStageComplete(stage, true); if (lt.getCompleted()) { s.setMessage("Congratulations, you have completed this lab"); } else { s.setMessage("You have completed Stage " + (lt.getStageNumber(stage) + 1) + ": " + stage + "."); if (!stage.equals(lt.getStage())) s.setMessage(" Welcome to Stage " + (lt.getStageNumber(lt.getStage()) + 1) + ": " + lt.getStage()); } try { Connection connection = DatabaseUtilities.getConnection(s); CreateDB db = new CreateDB(); db.makeDB(connection); System.out.println("Successfully refreshed the database."); } catch (SQLException sqle) { System.out.println("Error refreshing the database!"); sqle.printStackTrace(); } } public boolean isStageComplete(WebSession s, String stage) { return getLessonTracker(s).hasCompleted(stage); } @Override public RandomLessonTracker getLessonTracker(WebSession s) { return (RandomLessonTracker) super.getLessonTracker(s); } @Override public RandomLessonTracker getLessonTracker(WebSession s, AbstractLesson lesson) { return (RandomLessonTracker) super.getLessonTracker(s, lesson); } @Override public RandomLessonTracker getLessonTracker(WebSession s, String userNameOverride) { return (RandomLessonTracker) super.getLessonTracker(s, userNameOverride); } @Override public LessonTracker createLessonTracker() { return new RandomLessonTracker(getStages()); } }