Index: lams_admin/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -rbc83e1708c00ed0163382fb0b215cc3c8c41e018 -reedad9bd6fed8d844a97f9def3e8fd59e212fb6c --- lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision bc83e1708c00ed0163382fb0b215cc3c8c41e018) +++ lams_admin/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision eedad9bd6fed8d844a97f9def3e8fd59e212fb6c) @@ -665,11 +665,19 @@ tool.groups.group.name.error = A group name can not be blank tool.groups.save.error = Error while saving groups config.login.as.enable = Enable Login-as feature for administrators + sysadmin.lti.advantage=LTI Advantage settings +sysadmin.use.course.prefix=Use prefix when creating new users and courses +sysadmin.user.registration.enabled=Allow creating new users +sysadmin.user.name.lower.case=Convert user names to lower case before registering and logging in +sysadmin.lti.advantage.enforce.state.cookie=Send "state" cookie during authentication even if tool and platform domains do not match +sysadmin.lti.advantage.tool.reregistration.enabled=Allow reusing dynamic registration link sysadmin.lti.advantage.platform.issuer=Platform issuer (platform name) sysadmin.lti.advantage.platform.keyset.url=Platform keyset URL sysadmin.lti.advantage.platform.oidc.url=Platform OIDC authentication URL sysadmin.lti.advantage.platform.access.token.url=Platform access token URL +sysadmin.lti.advantage.tool.name=Tool name +sysadmin.lti.advantage.tool.description=Tool description sysadmin.lti.advantage.tool.client.id=Tool client ID sysadmin.lti.advantage.tool.keyset.url=Tool keyset URL sysadmin.lti.advantage.tool.key.id=Tool key ID Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/LtiConsumerForm.java =================================================================== diff -u -rbc83e1708c00ed0163382fb0b215cc3c8c41e018 -reedad9bd6fed8d844a97f9def3e8fd59e212fb6c --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/LtiConsumerForm.java (.../LtiConsumerForm.java) (revision bc83e1708c00ed0163382fb0b215cc3c8c41e018) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/form/LtiConsumerForm.java (.../LtiConsumerForm.java) (revision eedad9bd6fed8d844a97f9def3e8fd59e212fb6c) @@ -33,10 +33,18 @@ private String ltiToolConsumerMonitorRoles; - private String lessonFinishUrl; - private String userIdParameterName; + private boolean useCoursePrefix; + + private boolean userRegistrationEnabled; + + private boolean userNameLowerCase; + + private boolean enforceStateCookie; + + private boolean toolReregistrationEnabled; + private String issuer; private String clientId; @@ -47,6 +55,10 @@ private String accessTokenUrl; + private String toolName; + + private String toolDescription; + private String toolKeySetUrl; private String toolKeyId; @@ -57,6 +69,11 @@ public LtiConsumerForm() { userIdParameterName = "user_id"; + toolReregistrationEnabled = true; + useCoursePrefix = true; + userRegistrationEnabled = true; + toolName = "LAMS Advantage"; + toolDescription = "platform for delivering online collaborative learning activities"; } public String getLtiToolConsumerMonitorRoles() { @@ -75,16 +92,46 @@ this.userIdParameterName = StringUtils.trim(userIdParameterName); } - @Override - public String getLessonFinishUrl() { - return lessonFinishUrl; + public boolean isUseCoursePrefix() { + return useCoursePrefix; } - @Override - public void setLessonFinishUrl(String lessonFinishUrl) { - this.lessonFinishUrl = lessonFinishUrl; + public void setUseCoursePrefix(boolean useCoursePrefix) { + this.useCoursePrefix = useCoursePrefix; } + public boolean isUserRegistrationEnabled() { + return userRegistrationEnabled; + } + + public void setUserRegistrationEnabled(boolean userRegistrationEnabled) { + this.userRegistrationEnabled = userRegistrationEnabled; + } + + public boolean isUserNameLowerCase() { + return userNameLowerCase; + } + + public void setUserNameLowerCase(boolean userNameLowerCase) { + this.userNameLowerCase = userNameLowerCase; + } + + public boolean isEnforceStateCookie() { + return enforceStateCookie; + } + + public void setEnforceStateCookie(boolean enforceStateCookie) { + this.enforceStateCookie = enforceStateCookie; + } + + public boolean isToolReregistrationEnabled() { + return toolReregistrationEnabled; + } + + public void setToolReregistrationEnabled(boolean toolReregistrationEnabled) { + this.toolReregistrationEnabled = toolReregistrationEnabled; + } + public String getIssuer() { return issuer; } @@ -125,6 +172,22 @@ this.accessTokenUrl = accessTokenUrl; } + public String getToolName() { + return toolName; + } + + public void setToolName(String toolName) { + this.toolName = toolName; + } + + public String getToolDescription() { + return toolDescription; + } + + public void setToolDescription(String toolDescription) { + this.toolDescription = toolDescription; + } + public String getToolKeySetUrl() { return toolKeySetUrl; } Index: lams_admin/web/integration/ltiConsumer.jsp =================================================================== diff -u -rbc83e1708c00ed0163382fb0b215cc3c8c41e018 -reedad9bd6fed8d844a97f9def3e8fd59e212fb6c --- lams_admin/web/integration/ltiConsumer.jsp (.../ltiConsumer.jsp) (revision bc83e1708c00ed0163382fb0b215cc3c8c41e018) +++ lams_admin/web/integration/ltiConsumer.jsp (.../ltiConsumer.jsp) (revision eedad9bd6fed8d844a97f9def3e8fd59e212fb6c) @@ -100,19 +100,19 @@ : - + : - + : - + @@ -121,57 +121,99 @@ + : + + + + + + : + + + + + + : + + + + + + : + + + + + + : + + + + + : - + : - + : - + : - + + : + + + + + + : + + + + + : - + : - + : - + : - + : - + Index: lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20220126.sql =================================================================== diff -u -r25789285b22f2b11797f61c46e176abeffb3b2cf -reedad9bd6fed8d844a97f9def3e8fd59e212fb6c --- lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20220126.sql (.../patch20220126.sql) (revision 25789285b22f2b11797f61c46e176abeffb3b2cf) +++ lams_common/src/java/org/lamsfoundation/lams/dbupdates/patch20220126.sql (.../patch20220126.sql) (revision eedad9bd6fed8d844a97f9def3e8fd59e212fb6c) @@ -8,15 +8,23 @@ ADD COLUMN lti_adv_grading_type VARCHAR(10), ADD COLUMN lti_adv_grading_url VARCHAR(255); -ALTER TABLE lams_ext_server_org_map ADD COLUMN lti_adv_issuer VARCHAR(64), - ADD COLUMN lti_adv_client_id VARCHAR(64), - ADD COLUMN lti_adv_platform_key_set_url VARCHAR(255), - ADD COLUMN lti_adv_oidc_auth_url VARCHAR(255), - ADD COLUMN lti_adv_access_token_url VARCHAR(255), - ADD COLUMN lti_adv_tool_key_set_url VARCHAR(255), - ADD COLUMN lti_adv_tool_key_id VARCHAR(32), - ADD COLUMN lti_adv_public_key TEXT, - ADD COLUMN lti_adv_private_key TEXT; +ALTER TABLE lams_ext_server_org_map ADD COLUMN use_course_prefix TINYINT NOT NULL DEFAULT 1, + ADD COLUMN user_registration_enabled TINYINT NOT NULL DEFAULT 1, + ADD COLUMN user_name_lower_case TINYINT NOT NULL DEFAULT 0, + + ADD COLUMN lti_adv_enforce_cookie TINYINT NOT NULL DEFAULT 0, + ADD COLUMN lti_adv_reregistration_enabled TINYINT NOT NULL DEFAULT 1, + ADD COLUMN lti_adv_issuer VARCHAR(64), + ADD COLUMN lti_adv_client_id VARCHAR(64), + ADD COLUMN lti_adv_platform_key_set_url VARCHAR(255), + ADD COLUMN lti_adv_oidc_auth_url VARCHAR(255), + ADD COLUMN lti_adv_access_token_url VARCHAR(255), + ADD COLUMN lti_adv_tool_name VARCHAR(64), + ADD COLUMN lti_adv_tool_description VARCHAR(255), + ADD COLUMN lti_adv_tool_key_set_url VARCHAR(255), + ADD COLUMN lti_adv_tool_key_id VARCHAR(32), + ADD COLUMN lti_adv_public_key TEXT, + ADD COLUMN lti_adv_private_key TEXT; -- Put all sql statements above here Index: lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java =================================================================== diff -u -r25789285b22f2b11797f61c46e176abeffb3b2cf -reedad9bd6fed8d844a97f9def3e8fd59e212fb6c --- lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java (.../ExtServer.java) (revision 25789285b22f2b11797f61c46e176abeffb3b2cf) +++ lams_common/src/java/org/lamsfoundation/lams/integration/ExtServer.java (.../ExtServer.java) (revision eedad9bd6fed8d844a97f9def3e8fd59e212fb6c) @@ -122,6 +122,27 @@ @Column(name = "user_id_parameter_name") private String userIdParameterName; + /** + * Options currently used by LTI Advantage, but eventually also used in SAML + */ + @Column(name = "use_course_prefix") + private boolean useCoursePrefix; + + @Column(name = "user_registration_enabled") + private boolean userRegistrationEnabled; + + @Column(name = "user_name_lower_case") + private boolean userNameLowerCase; + + /** + * Options used by LTI Advantage + */ + @Column(name = "lti_adv_enforce_cookie") + private boolean enforceStateCookie; + + @Column(name = "lti_adv_reregistration_enabled") + private boolean toolReregistrationEnabled; + @Column(name = "lti_adv_issuer") private String issuer; @@ -137,6 +158,12 @@ @Column(name = "lti_adv_access_token_url") private String accessTokenUrl; + @Column(name = "lti_adv_tool_name") + private String toolName; + + @Column(name = "lti_adv_tool_description") + private String toolDescription; + @Column(name = "lti_adv_tool_key_set_url") private String toolKeySetUrl; @@ -152,6 +179,9 @@ public ExtServer() { timeToLiveLoginRequest = 80; userIdParameterName = "user_id"; + toolReregistrationEnabled = true; + useCoursePrefix = true; + userRegistrationEnabled = true; } public Integer getSid() { @@ -384,6 +414,62 @@ this.userIdParameterName = userIdParameterName; } + public boolean isUseCoursePrefix() { + return useCoursePrefix; + } + + public void setUseCoursePrefix(boolean useCoursePrefix) { + this.useCoursePrefix = useCoursePrefix; + } + + public boolean isUserRegistrationEnabled() { + return userRegistrationEnabled; + } + + public void setUserRegistrationEnabled(boolean userRegistrationEnabled) { + this.userRegistrationEnabled = userRegistrationEnabled; + } + + public boolean isUserNameLowerCase() { + return userNameLowerCase; + } + + public void setUserNameLowerCase(boolean userNameLowerCase) { + this.userNameLowerCase = userNameLowerCase; + } + + public boolean isEnforceStateCookie() { + return enforceStateCookie; + } + + public void setEnforceStateCookie(boolean enforceStateCookie) { + this.enforceStateCookie = enforceStateCookie; + } + + public boolean isToolReregistrationEnabled() { + return toolReregistrationEnabled; + } + + public void setToolReregistrationEnabled(boolean toolReregistrationEnabled) { + this.toolReregistrationEnabled = toolReregistrationEnabled; + } + + public String getToolName() { + return toolName; + } + + public void setToolName(String toolName) { + this.toolName = toolName; + } + + public String getToolDescription() { + return toolDescription; + } + + public void setToolDescription(String toolDescription) { + this.toolDescription = toolDescription; + } + public String getIssuer() { return issuer; }