Index: lams_build/lib/lams/lams-central.jar =================================================================== diff -u -r542b83631b403e37429fce3bb928f2800c5cd9b8 -r134b8c6ce9847926aab1420c5adfe0a15b2c78cd Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r542b83631b403e37429fce3bb928f2800c5cd9b8 -r134b8c6ce9847926aab1420c5adfe0a15b2c78cd Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java =================================================================== diff -u -r347ac3f0ff762bdb26b60e8465847f7fe59b7426 -r134b8c6ce9847926aab1420c5adfe0a15b2c78cd --- lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java (.../CentralConstants.java) (revision 347ac3f0ff762bdb26b60e8465847f7fe59b7426) +++ lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java (.../CentralConstants.java) (revision 134b8c6ce9847926aab1420c5adfe0a15b2c78cd) @@ -129,6 +129,4 @@ public static final String ATTR_RESULT_TEXT = "resultText"; - public static final String PARAM_REDIRECT_URL = "URL"; - } Index: lams_central/src/java/org/lamsfoundation/lams/web/RedirectAction.java =================================================================== diff -u -r4726485a6c59a3bb4a87c7c98a73e9479294f054 -r134b8c6ce9847926aab1420c5adfe0a15b2c78cd --- lams_central/src/java/org/lamsfoundation/lams/web/RedirectAction.java (.../RedirectAction.java) (revision 4726485a6c59a3bb4a87c7c98a73e9479294f054) +++ lams_central/src/java/org/lamsfoundation/lams/web/RedirectAction.java (.../RedirectAction.java) (revision 134b8c6ce9847926aab1420c5adfe0a15b2c78cd) @@ -25,16 +25,27 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; -import org.lamsfoundation.lams.util.CentralConstants; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.lesson.service.ILessonService; +import org.lamsfoundation.lams.tool.ToolSession; +import org.lamsfoundation.lams.tool.service.ILamsToolService; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsAction; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.WebApplicationContextUtils; /** * @author lfoxton @@ -44,27 +55,146 @@ * from outside sources. It must be done through central as it is the only * project that offers this functionality * - * Usage r.do?URL= - * where rekURL = the URL-encoded relative LAMS url + * Usage r.do?URL= where rekURL = the URL-encoded relative LAMS url * * @struts:action path="/r" validate="false" * @struts:action-forward name="error" path=".error" + * @struts:action-forward name="message" path=".message" * */ public class RedirectAction extends LamsAction { private static Logger log = Logger.getLogger(RedirectAction.class); + public static final String PARAM_RELATIVE_URL = "r"; + public static final String PARAM_TOOL_SESSION_ID = "t"; + public static final String PARAM_ACCESS_MODE = "a"; + + public static final String ACCESS_MODE_TEACHER = "t"; + // public static final String ACCESS_MODE_AUTHOR ="a"; + public static final String ACCESS_MODE_LEARNER = "l"; + + private static ILamsToolService lamsToolService; + private static IUserManagementService userService; + public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res) throws Exception { + try { - String relativePath = WebUtil.readStrParam(req, CentralConstants.PARAM_REDIRECT_URL); + String relativePath = WebUtil.readStrParam(req, PARAM_RELATIVE_URL); + Long toolSessionID = WebUtil.readLongParam(req, PARAM_TOOL_SESSION_ID); + String accessMode = WebUtil.readStrParam(req, PARAM_ACCESS_MODE); + if (relativePath == null || toolSessionID == null || accessMode == null) { + throw new Exception("Parameters missing for LAMS redirect"); + } + + // Get the user + UserDTO user = getUser(); + if (user == null) { + log.error("admin: User missing from session. "); + return mapping.findForward("error"); + } + + // Get the tool session + ToolSession toolSession = getToolSession(toolSessionID); + + // Get the lesson + Lesson lesson = toolSession.getLesson(); + + // Check the user's permissions, either learner or monitor + if (accessMode.equals(ACCESS_MODE_LEARNER)) { + if (lesson == null || !lesson.isLessonStarted()) { + return displayMessage(mapping, req, "message.lesson.not.started.cannot.participate"); + } + + if (toolSession.getLearners() == null || !toolSession.getLearners().contains(getRealUser(user))) { + log.error("learner: User " + user.getLogin() + + " is not a learner in the requested group. Cannot access the lesson."); + return displayMessage(mapping, req, "error.authorisation"); + } + + } else if (accessMode.equals(ACCESS_MODE_TEACHER)) { + + if (lesson.getLessonClass() == null || !lesson.getLessonClass().isStaffMember(getRealUser(user))) { + log.error("learner: User " + user.getLogin() + + " is not a learner in the requested lesson. Cannot access the lesson."); + return displayMessage(mapping, req, "error.authorisation"); + } + + } else { + throw new Exception("Mode " + accessMode + " is not allowed."); + } + + // If user has passed all the checks, they will get redirected res.sendRedirect(Configuration.get(ConfigurationKeys.SERVER_URL) + relativePath); + return null; } catch (Exception e) { log.error("Failed redirect to url", e); return mapping.findForward("error"); } + + /* + * try { String relativePath = WebUtil.readStrParam(req, + * CentralConstants.PARAM_REDIRECT_URL); + * + * res.sendRedirect(Configuration.get(ConfigurationKeys.SERVER_URL) + + * relativePath); + * + * return null; } catch (Exception e) { log.error("Failed redirect to + * url", e); return mapping.findForward("error"); } + */ } + + public ActionForward doLearner(ActionMapping mapping, HttpServletRequest req, HttpServletResponse res, + Long toolSessionID, String relativePath) throws Exception { + + return null; + } + + private ActionForward displayMessage(ActionMapping mapping, HttpServletRequest req, String messageKey) { + req.setAttribute("messageKey", messageKey); + return mapping.findForward("message"); + } + + private UserDTO getUser() { + HttpSession ss = SessionManager.getSession(); + return (UserDTO) ss.getAttribute(AttributeNames.USER); + } + + private User getRealUser(UserDTO dto) { + return getUserService().getUserByLogin(dto.getLogin()); + } + + private ToolSession getToolSession(Long toolSessionID) + { + return getLamsToolService().getToolSession(toolSessionID); + } + + private IUserManagementService getUserService() { + if (userService == null) { + WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() + .getServletContext()); + userService = (IUserManagementService) ctx.getBean("userManagementService"); + } + return userService; + } + + public static void setUserService(IUserManagementService userService) { + RedirectAction.userService = userService; + } + + private ILamsToolService getLamsToolService() { + if (lamsToolService == null) { + WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(getServlet() + .getServletContext()); + lamsToolService = (ILamsToolService) ctx.getBean("lamsToolService"); + } + return lamsToolService; + } + + public static void setLamsToolService(ILamsToolService lamsToolService) { + RedirectAction.lamsToolService = lamsToolService; + } } \ No newline at end of file Index: lams_central/web/WEB-INF/struts/struts-config.xml =================================================================== diff -u -r3590714b9dfaa2eeee7dcacaa1e76db4f1f45d23 -r134b8c6ce9847926aab1420c5adfe0a15b2c78cd --- lams_central/web/WEB-INF/struts/struts-config.xml (.../struts-config.xml) (revision 3590714b9dfaa2eeee7dcacaa1e76db4f1f45d23) +++ lams_central/web/WEB-INF/struts/struts-config.xml (.../struts-config.xml) (revision 134b8c6ce9847926aab1420c5adfe0a15b2c78cd) @@ -263,6 +263,23 @@ > + + + + + XMPP + org.lamsfoundation.lams.web.PresenceServlet + + + BogoPogoServlet org.lamsfoundation.lams.webservice.WhiteboardToJpgServlet @@ -379,6 +384,11 @@ + + JabberHTTPBindingServlet + org.jabber.JabberHTTPBind.JHBServlet + + action *.do @@ -419,6 +429,11 @@ /services/xml/LessonManager/* + + JabberHTTPBindingServlet + /JHB/* + + forgotPasswordServlet /ForgotPasswordRequest @@ -444,6 +459,10 @@ /fckeditor/editor/filemanager/browser/default/connectors/jsp/connector + XMPP + /XMPP + + BogoPogoServlet /BogoPogo @@ -620,6 +639,7 @@ /fckeditor/* /toolcontent/* /development/* + /JHB/* LEARNER Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java =================================================================== diff -u -r9c4151d572fc555fd5980e3d88580ab1ba9a94bf -r134b8c6ce9847926aab1420c5adfe0a15b2c78cd --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision 9c4151d572fc555fd5980e3d88580ab1ba9a94bf) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ILamsToolService.java (.../ILamsToolService.java) (revision 134b8c6ce9847926aab1420c5adfe0a15b2c78cd) @@ -27,6 +27,7 @@ import org.lamsfoundation.lams.tool.IToolVO; import org.lamsfoundation.lams.tool.Tool; +import org.lamsfoundation.lams.tool.ToolSession; import org.lamsfoundation.lams.tool.exception.LamsToolServiceException; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.FileUtilException; @@ -64,4 +65,6 @@ public void saveOrUpdateTool(Tool tool); public Tool getPersistToolBySignature(final String toolSignature); + + public ToolSession getToolSession(Long toolSessionId); } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java =================================================================== diff -u -r9c4151d572fc555fd5980e3d88580ab1ba9a94bf -r134b8c6ce9847926aab1420c5adfe0a15b2c78cd --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision 9c4151d572fc555fd5980e3d88580ab1ba9a94bf) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsToolService.java (.../LamsToolService.java) (revision 134b8c6ce9847926aab1420c5adfe0a15b2c78cd) @@ -41,79 +41,85 @@ /** * * @author Jacky Fang - * @since 2005-3-17 + * @since 2005-3-17 * @version * * @author Ozgur Demirtas 24/06/2005 * */ -public class LamsToolService implements ILamsToolService -{ - private static Logger log = Logger.getLogger(LamsToolService.class); - - public IToolDAO toolDAO; - public IToolSessionDAO toolSessionDAO; - +public class LamsToolService implements ILamsToolService { + private static Logger log = Logger.getLogger(LamsToolService.class); + + public IToolDAO toolDAO; + public IToolSessionDAO toolSessionDAO; + /** * @see org.lamsfoundation.lams.tool.service.ILamsCoreToolService#getAllPotentialLearners(long) */ - public Set getAllPotentialLearners(long toolSessionId) throws LamsToolServiceException - { - - ToolSession session = toolSessionDAO.getToolSession(toolSessionId); - if ( session != null ) { - return session.getLearners(); - } else { - log.error("No tool session found for "+toolSessionId+". No potential learners being returned."); - return new HashSet(); - } + public Set getAllPotentialLearners(long toolSessionId) throws LamsToolServiceException { + + ToolSession session = toolSessionDAO.getToolSession(toolSessionId); + if (session != null) { + return session.getLearners(); + } else { + log.error("No tool session found for " + toolSessionId + ". No potential learners being returned."); + return new HashSet(); + } } - - public IToolVO getToolBySignature(final String toolSignature) - { - Tool tool = toolDAO.getToolBySignature(toolSignature); - return tool.createBasicToolVO(); + + public IToolVO getToolBySignature(final String toolSignature) { + Tool tool = toolDAO.getToolBySignature(toolSignature); + return tool.createBasicToolVO(); } - - public Tool getPersistToolBySignature(final String toolSignature) - { - return toolDAO.getToolBySignature(toolSignature); + + public Tool getPersistToolBySignature(final String toolSignature) { + return toolDAO.getToolBySignature(toolSignature); } - public long getToolDefaultContentIdBySignature(final String toolSignature) - { - return toolDAO.getToolDefaultContentIdBySignature(toolSignature); + public long getToolDefaultContentIdBySignature(final String toolSignature) { + return toolDAO.getToolDefaultContentIdBySignature(toolSignature); } - - /** - * @return Returns the toolDAO. - */ - public IToolDAO getToolDAO() { - return toolDAO; - } - /** - * @param toolDAO The toolDAO to set. - */ - public void setToolDAO(IToolDAO toolDAO) { - this.toolDAO = toolDAO; - } - public IToolSessionDAO getToolSessionDAO() { - return toolSessionDAO; - } + /** + * @return Returns the toolDAO. + */ + public IToolDAO getToolDAO() { + return toolDAO; + } - public void setToolSessionDAO(IToolSessionDAO toolSessionDAO) { - this.toolSessionDAO = toolSessionDAO; - } - - public String generateUniqueContentFolder() throws FileUtilException, IOException { - - return FileUtil.generateUniqueContentFolderID(); - - } - - public void saveOrUpdateTool(Tool tool) - { - toolDAO.saveOrUpdateTool(tool); - } + /** + * @param toolDAO + * The toolDAO to set. + */ + public void setToolDAO(IToolDAO toolDAO) { + this.toolDAO = toolDAO; + } + + public IToolSessionDAO getToolSessionDAO() { + return toolSessionDAO; + } + + public void setToolSessionDAO(IToolSessionDAO toolSessionDAO) { + this.toolSessionDAO = toolSessionDAO; + } + + public String generateUniqueContentFolder() throws FileUtilException, IOException { + + return FileUtil.generateUniqueContentFolderID(); + + } + + public void saveOrUpdateTool(Tool tool) { + toolDAO.saveOrUpdateTool(tool); + } + + /** + * Get the tool session object using the toolSessionId + * @param toolSessionId + * @return + */ + public ToolSession getToolSession(Long toolSessionId) + { + return toolSessionDAO.getToolSession(toolSessionId); + } }