Index: lams_admin/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rd9653595fbb52e47a56519a3eb6bc5f58cf307fe -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision d9653595fbb52e47a56519a3eb6bc5f58cf307fe) +++ lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -641,7 +641,7 @@ label.type.logout =User logout label.type.config.change =Configuration change outcome.authoring.remove.confirm =Are you sure you want to remove this learning outcome? -sysadmin.alternative.user.id.name =Use alternative parameter name "lis_person_sourcedid" to get user id +sysadmin.user.id.name =Parameter name to get user id config.header.privacy.settings =Privacy settings config.restricted.displaying.user.names.in.groupings =Groupings: only display names for learners within own group sysadmin.maintain.session.count =logged in users Index: lams_admin/conf/language/lams/ApplicationResources_el_GR.properties =================================================================== diff -u -rcb0641eaf48e70c986e2c9079553bcc61f7c65f0 -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_admin/conf/language/lams/ApplicationResources_el_GR.properties (.../ApplicationResources_el_GR.properties) (revision cb0641eaf48e70c986e2c9079553bcc61f7c65f0) +++ lams_admin/conf/language/lams/ApplicationResources_el_GR.properties (.../ApplicationResources_el_GR.properties) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -641,7 +641,6 @@ label.type.logout =\u0391\u03c0\u03bf\u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03b7 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 label.type.config.change =\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03b4\u03b9\u03b1\u03bc\u03cc\u03c1\u03c6\u03c9\u03c3\u03b7\u03c2 outcome.authoring.remove.confirm =\u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03ba\u03b1\u03c4\u03b1\u03c1\u03b3\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03bc\u03b1\u03b8\u03b7\u03c3\u03b9\u03b1\u03ba\u03cc \u03b1\u03c0\u03bf\u03c4\u03ad\u03bb\u03b5\u03c3\u03bc\u03b1; -sysadmin.alternative.user.id.name =\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u03b5\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03cc \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 "lis_person_sourcedid" \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03bb\u03ac\u03b2\u03b5\u03c4\u03b5 \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b7 config.header.privacy.settings =\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03b1\u03c0\u03bf\u03c1\u03c1\u03ae\u03c4\u03bf\u03c5 config.restricted.displaying.user.names.in.groupings =\u039f\u03bc\u03b1\u03b4\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9\u03c2: \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03b6\u03bf\u03bd\u03c4\u03b1\u03b9 \u03bc\u03cc\u03bd\u03bf \u03bf\u03bd\u03cc\u03bc\u03b1\u03c4\u03b1 \u03b5\u03ba\u03c0\u03b1\u03b9\u03b4\u03b5\u03c5\u03cc\u03bc\u03b5\u03bd\u03c9\u03bd \u03bc\u03ad\u03c3\u03b1 \u03c3\u03c4\u03b7\u03bd \u03af\u03b4\u03b9\u03b1 \u03bf\u03bc\u03ac\u03b4\u03b1 sysadmin.maintain.session.count =\u03c3\u03c5\u03bd\u03b4\u03b5\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03b9 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2 Index: lams_admin/conf/language/lams/ApplicationResources_en_AU.properties =================================================================== diff -u -r5e1548fd8c9caed9a861784801054363e2efb400 -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_admin/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 5e1548fd8c9caed9a861784801054363e2efb400) +++ lams_admin/conf/language/lams/ApplicationResources_en_AU.properties (.../ApplicationResources_en_AU.properties) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -641,7 +641,6 @@ label.type.logout =User logout label.type.config.change =Configuration change outcome.authoring.remove.confirm =Are you sure you want to remove this learning outcome? -sysadmin.alternative.user.id.name =Use alternative parameter name "lis_person_sourcedid" to get user id config.header.privacy.settings =Privacy settings config.restricted.displaying.user.names.in.groupings =Groupings: only display names for learners within own group sysadmin.maintain.session.count =logged in users Index: lams_admin/conf/language/lams/ApplicationResources_es_ES.properties =================================================================== diff -u -rcb0641eaf48e70c986e2c9079553bcc61f7c65f0 -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_admin/conf/language/lams/ApplicationResources_es_ES.properties (.../ApplicationResources_es_ES.properties) (revision cb0641eaf48e70c986e2c9079553bcc61f7c65f0) +++ lams_admin/conf/language/lams/ApplicationResources_es_ES.properties (.../ApplicationResources_es_ES.properties) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -641,7 +641,6 @@ label.type.logout =Usuario cierra sesi\u00f3n label.type.config.change =Cambio de configuraci\u00f3n outcome.authoring.remove.confirm =\u00bfEst\u00e1 seguro que desea eliminar? -sysadmin.alternative.user.id.name =Utilizar par\u00e1metro alternativo con nombres "lis_person_sourceid" como user id config.header.privacy.settings =Configuraciones de privacidad config.restricted.displaying.user.names.in.groupings =Grupos: solo mostrar los nombres de estudiantes que est\u00e1n en el mismo grupo. sysadmin.maintain.session.count =usuarios conectados. Index: lams_admin/conf/language/lams/ApplicationResources_no_NO.properties =================================================================== diff -u -rcb0641eaf48e70c986e2c9079553bcc61f7c65f0 -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_admin/conf/language/lams/ApplicationResources_no_NO.properties (.../ApplicationResources_no_NO.properties) (revision cb0641eaf48e70c986e2c9079553bcc61f7c65f0) +++ lams_admin/conf/language/lams/ApplicationResources_no_NO.properties (.../ApplicationResources_no_NO.properties) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -641,7 +641,6 @@ label.type.logout =Bruker logg ut label.type.config.change =Endring av oppsett outcome.authoring.remove.confirm =Er du sikker p\u00e5 at du vil fjerne dette l\u00e6reresultatet ? -sysadmin.alternative.user.id.name =Bruk et alternativt parameter navn "lis_person_sourcedid" for \u00e5 f\u00e5 bruker id config.header.privacy.settings =Oppsett for personvern config.restricted.displaying.user.names.in.groupings =Gruppering: viser kun navn for studenter egen gruppe sysadmin.maintain.session.count =innloggede brukere Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/LtiConsumerForm.java =================================================================== diff -u -rcdfd865f5b09b49251732b2de7456ba7c09192bb -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/LtiConsumerForm.java (.../LtiConsumerForm.java) (revision cdfd865f5b09b49251732b2de7456ba7c09192bb) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/LtiConsumerForm.java (.../LtiConsumerForm.java) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -22,41 +22,48 @@ package org.lamsfoundation.lams.admin.web.form; +import org.apache.commons.lang.StringUtils; + /** * Form for managing LTI tool consumers (ExtServer instances). - * + * * @author Andrey Balan */ public class LtiConsumerForm extends ExtServerCommonForm { private String ltiToolConsumerMonitorRoles; - + private String lessonFinishUrl; - - private Boolean useAlternativeUseridParameterName; + private String userIdParameterName; + + public LtiConsumerForm() { + userIdParameterName = "user_id"; + } + public String getLtiToolConsumerMonitorRoles() { return ltiToolConsumerMonitorRoles; } public void setLtiToolConsumerMonitorRoles(String ltiToolConsumerMonitorRoles) { this.ltiToolConsumerMonitorRoles = ltiToolConsumerMonitorRoles; } - + + @Override public String getLessonFinishUrl() { return lessonFinishUrl; } + @Override public void setLessonFinishUrl(String lessonFinishUrl) { this.lessonFinishUrl = lessonFinishUrl; } - - public Boolean getUseAlternativeUseridParameterName() { - return useAlternativeUseridParameterName; - } - public void setUseAlternativeUseridParameterName(Boolean useAlternativeUseridParameterName) { - this.useAlternativeUseridParameterName = useAlternativeUseridParameterName; + public String getUserIdParameterName() { + return userIdParameterName; } -} + public void setUserIdParameterName(String userIdParameterName) { + this.userIdParameterName = StringUtils.trim(userIdParameterName); + } +} \ No newline at end of file Index: lams_admin/web/integration/ltiConsumer.jsp =================================================================== diff -u -rcdfd865f5b09b49251732b2de7456ba7c09192bb -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_admin/web/integration/ltiConsumer.jsp (.../ltiConsumer.jsp) (revision cdfd865f5b09b49251732b2de7456ba7c09192bb) +++ lams_admin/web/integration/ltiConsumer.jsp (.../ltiConsumer.jsp) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -111,9 +111,9 @@ - : + : - + Index: lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestLtiServlet.java =================================================================== diff -u -r290f69ec4bba91e9bc91247e7633f44bd8dc0e5c -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestLtiServlet.java (.../LoginRequestLtiServlet.java) (revision 290f69ec4bba91e9bc91247e7633f44bd8dc0e5c) +++ lams_central/src/java/org/lamsfoundation/lams/web/LoginRequestLtiServlet.java (.../LoginRequestLtiServlet.java) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -43,7 +43,6 @@ import org.lamsfoundation.lams.integration.service.IntegrationService; import org.lamsfoundation.lams.integration.util.IntegrationConstants; import org.lamsfoundation.lams.integration.util.LtiUtils; -import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.service.ILessonService; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.CentralConstants; @@ -88,12 +87,9 @@ String consumerKey = request.getParameter(LtiUtils.OAUTH_CONSUMER_KEY); ExtServer extServer = integrationService.getExtServer(consumerKey); //get user id as "user_id" parameter, or as lis_person_sourcedid (if according option is ON for this LTI server) - String lisPersonSourcedid = request.getParameter(BasicLTIConstants.LIS_PERSON_SOURCEDID); - String extUsername = extServer.getUseAlternativeUseridParameterName() - && StringUtils.isNotBlank(lisPersonSourcedid) ? lisPersonSourcedid - : request.getParameter(BasicLTIConstants.USER_ID); + String extUsername = request.getParameter(extServer.getUserIdParameterName()); String roles = request.getParameter(BasicLTIConstants.ROLES); - + // implicit login params String firstName = request.getParameter(BasicLTIConstants.LIS_PERSON_NAME_GIVEN); String lastName = request.getParameter(BasicLTIConstants.LIS_PERSON_NAME_FAMILY); @@ -102,30 +98,30 @@ String locale = request.getParameter(BasicLTIConstants.LAUNCH_PRESENTATION_LOCALE); String countryIsoCode = LoginRequestLtiServlet.getCountry(locale); String langIsoCode = LoginRequestLtiServlet.getLanguage(locale); - + String resourceLinkId = request.getParameter(BasicLTIConstants.RESOURCE_LINK_ID); String contextId = request.getParameter(BasicLTIConstants.CONTEXT_ID); String contextLabel = request.getParameter(BasicLTIConstants.CONTEXT_LABEL); - + //log all incoming request parameters, so we can use them later to debug future issues String logMessage = "LoginRequestLtiServlet is requested with the following parameters: "; - Enumeration parameterNames = request.getParameterNames(); - while (parameterNames.hasMoreElements()) { - String paramName = parameterNames.nextElement(); - logMessage += paramName + "="; - - String[] paramValues = request.getParameterValues(paramName); - for (int i = 0; i < paramValues.length; i++) { - String paramValue = paramValues[i]; - if (i>0) { - logMessage += "|"; - } - logMessage += paramValue; - } - logMessage += ", "; - } - log.debug(logMessage); + Enumeration parameterNames = request.getParameterNames(); + while (parameterNames.hasMoreElements()) { + String paramName = parameterNames.nextElement(); + logMessage += paramName + "="; + String[] paramValues = request.getParameterValues(paramName); + for (int i = 0; i < paramValues.length; i++) { + String paramValue = paramValues[i]; + if (i > 0) { + logMessage += "|"; + } + logMessage += paramValue; + } + logMessage += ", "; + } + log.debug(logMessage); + if ((extUsername == null) || (consumerKey == null)) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Login Failed - login parameters missing"); return; @@ -153,24 +149,24 @@ //in case both first and last names are missing, try to get them using other ways if (StringUtils.isBlank(firstName) && StringUtils.isBlank(lastName)) { - + //check LIS_PERSON_NAME_FULL parameter String fullName = request.getParameter(BasicLTIConstants.LIS_PERSON_NAME_FULL); if (StringUtils.isNotBlank(fullName)) { firstName = fullName; lastName = " "; - + } else { //provide default values for user names, as we can't fetch them from LTI Tool consumer firstName = DEFAULT_FIRST_NAME; lastName = DEFAULT_LAST_NAME; } - - //only firstName is missing + + //only firstName is missing } else if (StringUtils.isBlank(firstName)) { firstName = " "; - - //only lastName is missing + + //only lastName is missing } else if (StringUtils.isBlank(lastName)) { lastName = " "; } @@ -217,7 +213,7 @@ //skip parameters starting with "oath_" if (LtiUtils.OAUTH_CONSUMER_KEY.equals(paramName) || !paramName.startsWith(BasicLTIConstants.OAUTH_PREFIX)) { - //set "user_id" parameter taking into account extServer.getUseAlternativeUseridParameterName() setting + //set "user_id" parameter taking into account extServer.getUserIdParamName() setting String paramValue = BasicLTIConstants.USER_ID.equals(paramName) ? extUsername : request.getParameter(paramName); redirectUrl = WebUtil.appendParameterToURL(redirectUrl, paramName, Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20200909.sql =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20200909.sql (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20200909.sql (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -0,0 +1,14 @@ +SET AUTOCOMMIT = 0; +set FOREIGN_KEY_CHECKS = 0; + +-- LDEV-5027 Convert a boolean value of LTI user ID parameter name into string + +ALTER TABLE lams_ext_server_org_map ADD COLUMN user_id_parameter_name VARCHAR(255); +UPDATE lams_ext_server_org_map SET user_id_parameter_name = 'user_id' WHERE use_alternative_user_id_parameter_name = 0; +UPDATE lams_ext_server_org_map SET user_id_parameter_name = 'lis_person_sourcedid' WHERE use_alternative_user_id_parameter_name = 1; +ALTER TABLE lams_ext_server_org_map DROP COLUMN use_alternative_user_id_parameter_name; + +COMMIT; +SET AUTOCOMMIT = 1; +set FOREIGN_KEY_CHECKS = 1; + Index: lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java =================================================================== diff -u -rf0924238dddb80210e0e088cda5fe967f66ef979 -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java (.../ExtServer.java) (revision f0924238dddb80210e0e088cda5fe967f66ef979) +++ lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java (.../ExtServer.java) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -62,7 +62,7 @@ @Column(name = "ext_groups_url") private String extGroupsUrl; - + @Column(name = "membership_url") private String membershipUrl; @@ -118,12 +118,13 @@ */ @Column(name = "lti_consumer_monitor_roles") private String ltiToolConsumerMonitorRoles; - - @Column(name = "use_alternative_user_id_parameter_name") - private Boolean useAlternativeUseridParameterName; + @Column(name = "user_id_parameter_name") + private String userIdParameterName; + public ExtServer() { timeToLiveLoginRequest = 80; + userIdParameterName = "user_id"; } public Integer getSid() { @@ -213,7 +214,7 @@ public void setExtGroupsUrl(String extGroupsUrl) { this.extGroupsUrl = extGroupsUrl; } - + public String getMembershipUrl() { return this.membershipUrl; } @@ -347,12 +348,12 @@ public void setGradebookOnComplete(Boolean gradebookOnComplete) { this.gradebookOnComplete = gradebookOnComplete; } - - public Boolean getUseAlternativeUseridParameterName() { - return useAlternativeUseridParameterName; + + public String getUserIdParameterName() { + return userIdParameterName; } - public void setUseAlternativeUseridParameterName(Boolean useAlternativeUseridParameterName) { - this.useAlternativeUseridParameterName = useAlternativeUseridParameterName; + public void setUserIdParameterName(String userIdParameterName) { + this.userIdParameterName = userIdParameterName; } } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java =================================================================== diff -u -rd2d41bfb7652d3fbcfe21d152af14235eefdcbcb -r058adba867d104c2148e289a3dacda7f22f6ac60 --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision d2d41bfb7652d3fbcfe21d152af14235eefdcbcb) +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java (.../IntegrationService.java) (revision 058adba867d104c2148e289a3dacda7f22f6ac60) @@ -44,7 +44,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpResponseException; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; @@ -55,8 +54,6 @@ import org.imsglobal.lti.launch.LtiSigner; import org.imsglobal.lti.launch.LtiSigningException; import org.imsglobal.pox.IMSPOXRequest; -import org.lamsfoundation.lams.gradebook.GradebookUserLesson; -import org.lamsfoundation.lams.gradebook.service.IGradebookService; import org.lamsfoundation.lams.integration.ExtCourseClassMap; import org.lamsfoundation.lams.integration.ExtServer; import org.lamsfoundation.lams.integration.ExtServerLessonMap; @@ -94,6 +91,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import oauth.signpost.exception.OAuthException; + /** *

* View Source @@ -224,7 +222,7 @@ * Updates user roles based on the provided method parameter. It method is "author" - we assign Role.ROLE_AUTHOR, * Role.ROLE_MONITOR, Role.ROLE_LEARNER; if method is "monitor" - we assign Role.ROLE_MONITOR; in all other cases * assign Role.ROLE_LEARNER. - * + * * @param user * @param org * @param method @@ -239,14 +237,14 @@ user.addUserOrganisation(uo); service.saveUser(user); } - + Integer[] roles; if (StringUtils.equals(method, IntegrationConstants.METHOD_AUTHOR)) { roles = new Integer[] { Role.ROLE_AUTHOR, Role.ROLE_MONITOR, Role.ROLE_LEARNER }; - + } else if (StringUtils.equals(method, IntegrationConstants.METHOD_MONITOR)) { roles = new Integer[] { Role.ROLE_MONITOR }; - + } else { roles = new Integer[] { Role.ROLE_LEARNER }; } @@ -635,7 +633,7 @@ if (lesson == null) { return null; } - + // the callback url must contain %username%, %lessonid%, %timestamp% and %hash% eg: // "http://server.com/lams--bb/UserData?uid=%username%&lessonid=%lessonid%&ts=%timestamp%&hash=%hash%"; // where %username%, %lessonid%, %timestamp% and %hash% will be replaced with their real values @@ -669,7 +667,7 @@ return lessonFinishCallbackUrl; } - + @Override public void pushMarkToLtiConsumer(User user, Lesson lesson, Double userMark) { if (lesson == null) { @@ -680,7 +678,7 @@ ExtServer server = extServerLesson == null ? null : extServerLesson.getExtServer(); ExtUserUseridMap extUser = extServerLesson == null ? null : getExtUserUseridMapByUserId(server, user.getUserId()); - + // checks whether the lesson was created from extServer and whether it's a LTI Tool Consumer - create a new thread to report score back to LMS (in order to do this task in parallel not to slow down later work) if (extServerLesson != null && extUser != null && server.getServerTypeId().equals(ExtServer.LTI_CONSUMER_SERVER_TYPE) @@ -692,8 +690,7 @@ final String lessonFinishUrl = server.getLessonFinishUrl(); if (userMark != null && StringUtils.isNotBlank(lessonFinishUrl)) { Double score = lessonMaxPossibleMark.equals(0L) ? 0 : userMark / lessonMaxPossibleMark; - final String scoreStr = (userMark == null) || lessonMaxPossibleMark.equals(0L) ? "" - : score.toString(); + final String scoreStr = (userMark == null) || lessonMaxPossibleMark.equals(0L) ? "" : score.toString(); final String serverKey = server.getServerid(); final String serverSecret = server.getServerkey(); @@ -875,14 +872,15 @@ List list = service.findByProperties(ExtCourseClassMap.class, properties); return list == null || list.isEmpty() ? null : list.get(0); } - + @Override - public ExtUserUseridMap addExtUserToCourse(ExtServer extServer, String method, String username, String firstName, String lastName, - String email, String extCourseId, String countryIsoCode, String langIsoCode) + public ExtUserUseridMap addExtUserToCourse(ExtServer extServer, String method, String username, String firstName, + String lastName, String email, String extCourseId, String countryIsoCode, String langIsoCode) throws UserInfoFetchException, UserInfoValidationException { if (log.isDebugEnabled()) { - log.debug("Adding user '" + username + "' as " + method + " to course with extCourseId '" + extCourseId + "'."); + log.debug("Adding user '" + username + "' as " + method + " to course with extCourseId '" + extCourseId + + "'."); } ExtUserUseridMap userMap = null; @@ -903,19 +901,19 @@ return userMap; } - + @Override - public ExtUserUseridMap addExtUserToCourseAndLesson(ExtServer extServer, String method, Long lesssonId, String username, - String firstName, String lastName, String email, String extCourseId, String countryIsoCode, String langIsoCode) - throws UserInfoFetchException, UserInfoValidationException { + public ExtUserUseridMap addExtUserToCourseAndLesson(ExtServer extServer, String method, Long lesssonId, + String username, String firstName, String lastName, String email, String extCourseId, String countryIsoCode, + String langIsoCode) throws UserInfoFetchException, UserInfoValidationException { if (log.isDebugEnabled()) { log.debug("Adding user '" + username + "' as " + method + " to lesson with id '" + lesssonId + "'."); } - - ExtUserUseridMap userMap = addExtUserToCourse(extServer, method, username, firstName, lastName, email, extCourseId, - countryIsoCode, langIsoCode); + ExtUserUseridMap userMap = addExtUserToCourse(extServer, method, username, firstName, lastName, email, + extCourseId, countryIsoCode, langIsoCode); + User user = userMap.getUser(); if (user == null) { String error = "Unable to add user to lesson class as user is missing from the user map"; @@ -974,26 +972,26 @@ } @Override - public void addUsersUsingMembershipService(ExtServer extServer, Long lessonId, String courseId, String resourceLinkId) - throws IOException, UserInfoFetchException, UserInfoValidationException { - + public void addUsersUsingMembershipService(ExtServer extServer, Long lessonId, String courseId, + String resourceLinkId) throws IOException, UserInfoFetchException, UserInfoValidationException { + String membershipUrl = extServer.getMembershipUrl(); - //if tool consumer haven't provided membershipUrl (ToolProxyBinding.memberships.url parameter) we can't add any users + //if tool consumer haven't provided membershipUrl (ToolProxyBinding.memberships.url parameter) we can't add any users if (StringUtils.isBlank(membershipUrl)) { return; } membershipUrl += membershipUrl.contains("?") ? "&" : "?"; membershipUrl += "rlid=" + resourceLinkId; - - log.debug("Make a call to remote membershipUrl:" + membershipUrl); - HttpGet ltiServiceGetRequest = new HttpGet(membershipUrl); - ltiServiceGetRequest.setHeader("Accept", "application/vnd.ims.lis.v2.membershipcontainer+json"); + log.debug("Make a call to remote membershipUrl:" + membershipUrl); + HttpGet ltiServiceGetRequest = new HttpGet(membershipUrl); + ltiServiceGetRequest.setHeader("Accept", "application/vnd.ims.lis.v2.membershipcontainer+json"); + LtiSigner ltiSigner = new LtiOauthSigner(); try { HttpRequest httpRequest = ltiSigner.sign(ltiServiceGetRequest, extServer.getServerid(), - extServer.getServerkey()); + extServer.getServerkey()); } catch (LtiSigningException e) { throw new RuntimeException(e); } @@ -1004,17 +1002,17 @@ throw new HttpResponseException(response.getStatusLine().getStatusCode(), response.getStatusLine().getReasonPhrase()); } - + String responseString = EntityUtils.toString(response.getEntity()); log.debug("membershipUrl responded with the following message: " + responseString); JsonNode json = new ObjectMapper().readTree(responseString); - + //no users provided by membership service - if (json == null) { - return; - } - - //process users provided by membership service + if (json == null) { + return; + } + + //process users provided by membership service JsonNode memberships = json.get("pageOf").get("membershipSubject").get("membership"); for (int i = 0; i < memberships.size(); i++) { JsonNode membership = memberships.get(i); @@ -1023,8 +1021,9 @@ //get user id using "userId" property, or "sourcedId" if UseAlternativeUseridParameterName option is ON for this LTI server JsonNode lisPersonSourcedid = member.get("sourcedId"); - String extUserId = extServer.getUseAlternativeUseridParameterName() && lisPersonSourcedid != null - && StringUtils.isNotBlank(lisPersonSourcedid.asText()) ? lisPersonSourcedid.asText() + String extUserId = extServer.getUserIdParameterName().equalsIgnoreCase("lis_person_sourcedid") + && lisPersonSourcedid != null && StringUtils.isNotBlank(lisPersonSourcedid.asText()) + ? lisPersonSourcedid.asText() : member.get("userId").asText(); //to address Moodle version 3.7.1 bug @@ -1049,7 +1048,7 @@ String method = LtiUtils.isStaff(roles, extServer) || LtiUtils.isAdmin(roles) ? IntegrationConstants.METHOD_MONITOR : IntegrationConstants.METHOD_LEARNER; - + //empty lessonId means we need to only add users to the course. Otherwise we add them to course AND lesson ExtUserUseridMap extUser = lessonId == null ? addExtUserToCourse(extServer, method, extUserId, firstName, lastName, email, courseId, @@ -1078,7 +1077,7 @@ } } } - + // --------------------------------------------------------------------- // Inversion of Control Methods - Method injection // --------------------------------------------------------------------- @@ -1094,7 +1093,7 @@ public void setToolService(ILamsCoreToolService toolService) { this.toolService = toolService; } - + public void setTimezoneService(ITimezoneService timezoneService) { this.timezoneService = timezoneService; }