Index: lams_admin/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r298b5600c99cf71c588d5ae57c48a1c66500e3b5 -r0c436f5f696e462cb9882e9e0fb1e1e76224044e --- lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 298b5600c99cf71c588d5ae57c48a1c66500e3b5) +++ lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 0c436f5f696e462cb9882e9e0fb1e1e76224044e) @@ -389,6 +389,7 @@ config.show.all.my.lesson.link =Show "All my lessons" link in User's profile config.display.print.button =Display a print button when the lesson is completed sysadmin.lessonFinishUrl =Lesson finish callback URL +sysadmin.logoutUrl =Redirect user after logout to the following URL admin.servertimezone.server.timezone.management =Server timezone management admin.servertimezone.title =Server timezone management admin.servertimezone.select.server.timezone =Please, select server timezone Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/ExtServerForm.java =================================================================== diff -u -r8d8232ae7142c30068360a2a41bbcccc065e775b -r0c436f5f696e462cb9882e9e0fb1e1e76224044e --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/ExtServerForm.java (.../ExtServerForm.java) (revision 8d8232ae7142c30068360a2a41bbcccc065e775b) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/ExtServerForm.java (.../ExtServerForm.java) (revision 0c436f5f696e462cb9882e9e0fb1e1e76224044e) @@ -40,6 +40,8 @@ private String lessonFinishUrl; + private String logoutUrl; + private String extGroupsUrl; private boolean disabled = false; @@ -137,6 +139,14 @@ this.lessonFinishUrl = lessonFinishUrl; } + public String getLogoutUrl() { + return logoutUrl; + } + + public void setLogoutUrl(String logoutUrl) { + this.logoutUrl = logoutUrl; + } + public String getExtGroupsUrl() { return extGroupsUrl; } Index: lams_admin/web/servermaintain.jsp =================================================================== diff -u -r37bb2ae017713b44cdfd6a55cfceca28c3efab02 -r0c436f5f696e462cb9882e9e0fb1e1e76224044e --- lams_admin/web/servermaintain.jsp (.../servermaintain.jsp) (revision 37bb2ae017713b44cdfd6a55cfceca28c3efab02) +++ lams_admin/web/servermaintain.jsp (.../servermaintain.jsp) (revision 0c436f5f696e462cb9882e9e0fb1e1e76224044e) @@ -119,6 +119,10 @@
+ + +
+
Index: lams_central/src/java/org/lamsfoundation/lams/web/HomeController.java =================================================================== diff -u -r587ed647f8d1a0410710ce167369607c1eb57c45 -r0c436f5f696e462cb9882e9e0fb1e1e76224044e --- lams_central/src/java/org/lamsfoundation/lams/web/HomeController.java (.../HomeController.java) (revision 587ed647f8d1a0410710ce167369607c1eb57c45) +++ lams_central/src/java/org/lamsfoundation/lams/web/HomeController.java (.../HomeController.java) (revision 0c436f5f696e462cb9882e9e0fb1e1e76224044e) @@ -38,6 +38,7 @@ import javax.servlet.http.HttpSession; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.contentrepository.exception.RepositoryCheckedException; import org.lamsfoundation.lams.learningdesign.GroupUser; @@ -353,10 +354,10 @@ } @RequestMapping("/logout") - public String logout(HttpServletRequest req) throws IOException, ServletException { - - req.getSession().invalidate(); - return "redirect:/index.do"; + public String logout(HttpSession session) throws IOException, ServletException { + String logoutURL = (String) session.getAttribute("integratedLogoutURL"); + session.invalidate(); + return "redirect:" + (StringUtils.isBlank(logoutURL) ? "/index.do" : logoutURL); } private String displayMessage(HttpServletRequest req, String messageKey) { Index: lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java =================================================================== diff -u -r33829c670fd8c90447d62ea3300498a103905e7a -r0c436f5f696e462cb9882e9e0fb1e1e76224044e --- lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java (.../LoginRequestServlet.java) (revision 33829c670fd8c90447d62ea3300498a103905e7a) +++ lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestServlet.java (.../LoginRequestServlet.java) (revision 0c436f5f696e462cb9882e9e0fb1e1e76224044e) @@ -184,6 +184,9 @@ hses.setAttribute("login", login); String token = "#LAMS" + RandomPasswordGenerator.nextPassword(10); hses.setAttribute("password", token); + // if there is logout URL at the integrated server, put it into session right now + // if authentication fails, it will be cleared + hses.setAttribute("integratedLogoutURL", extServer.getLogoutUrl()); // notify the login module that the user has been authenticated correctly UniversalLoginModule.setAuthenticationToken(token); Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20190415.sql =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20190415.sql (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20190415.sql (revision 0c436f5f696e462cb9882e9e0fb1e1e76224044e) @@ -0,0 +1,16 @@ +-- Turn off autocommit, so nothing is committed if there is an error +SET AUTOCOMMIT = 0; +SET FOREIGN_KEY_CHECKS=0; +----------------------Put all sql statements below here------------------------- + +-- SP-2 Add logout URL to integrated servers + +ALTER TABLE lams_ext_server_org_map +ADD COLUMN logout_url TEXT AFTER lesson_finish_url; + +----------------------Put all sql statements above here------------------------- + +-- If there were no errors, commit and restore autocommit to on +COMMIT; +SET AUTOCOMMIT = 1; +SET FOREIGN_KEY_CHECKS=1; \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java =================================================================== diff -u -r5b1fbc89c883857eace8c043a594a79cb0f60bc4 -r0c436f5f696e462cb9882e9e0fb1e1e76224044e --- lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java (.../ExtServer.java) (revision 5b1fbc89c883857eace8c043a594a79cb0f60bc4) +++ lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java (.../ExtServer.java) (revision 0c436f5f696e462cb9882e9e0fb1e1e76224044e) @@ -17,7 +17,7 @@ @Entity @Table(name = "lams_ext_server_org_map") public class ExtServer implements Serializable, Comparable { - + private static final long serialVersionUID = 337894825609071182L; /* @@ -57,6 +57,9 @@ @Column(name = "lesson_finish_url") private String lessonFinishUrl; + @Column(name = "logout_url") + private String logoutUrl; + @Column(name = "ext_groups_url") private String extGroupsUrl; @@ -102,10 +105,10 @@ private Boolean gradebookOnComplete; @OneToMany(mappedBy = "extServer") - private Set extCourseClassMaps = new HashSet(); + private Set extCourseClassMaps = new HashSet<>(); @OneToMany(mappedBy = "extServer") - private Set extUserUseridMaps = new HashSet(); + private Set extUserUseridMaps = new HashSet<>(); /** * Comma-separated list of roles that LTI tool consumer uses to indicate user monitor role @@ -189,6 +192,14 @@ this.lessonFinishUrl = lessonFinishUrl; } + public String getLogoutUrl() { + return logoutUrl; + } + + public void setLogoutUrl(String logoutUrl) { + this.logoutUrl = logoutUrl; + } + public String getExtGroupsUrl() { return this.extGroupsUrl; } Index: lams_common/src/java/org/lamsfoundation/lams/integration/security/SsoHandler.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -r0c436f5f696e462cb9882e9e0fb1e1e76224044e --- lams_common/src/java/org/lamsfoundation/lams/integration/security/SsoHandler.java (.../SsoHandler.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_common/src/java/org/lamsfoundation/lams/integration/security/SsoHandler.java (.../SsoHandler.java) (revision 0c436f5f696e462cb9882e9e0fb1e1e76224044e) @@ -190,6 +190,9 @@ } } else { + // clear after failed authentication, if it was set in LoginRequestServlet + session.removeAttribute("integratedLogoutURL"); + Integer failedAttempts = user.getFailedAttempts(); if (failedAttempts == null) { failedAttempts = 1;