Hi everyone,
At my college, we changed our older server (2.16) to the newest version 2.18. We had our older server integraded with D2L (Brightspace) using LTI 1.1. The issue was that it didn't LTI grades pass back. We were told that Brightspace was not set to do it with LTI 1.1. The single logon was working fine.
So to upgrade our system to have LTI 1.3, we did the following:
1) Install WeBWorK 2.18 for Ubuntu Server 22.04 from scratch (we attempted several times to just upgrade the old system but encoutered issues that we could not resolve)
2) Did the database dump and save a copy of /opt/webwork/courses from the old server
3) Restore the courses folder and import the database into the new server
4) use the admin course to upgrade databases
For the LTI setup with Brightspace, we followed the instructions from https://sukhjitsehra.github.io/webwork-2.18/#webwork-configuration-part-1-step-2
Registered as a standard tool
Domain: https://webwork.qcc.cuny.edu
Redirect URLs: https://webwork.qcc.cuny.edu/webwork2/ltiadvantage/launch
OpenId Connect Login URL: https://webwork.qcc.cuny.edu/webwork2/ltiadvantage/login
Target Link URI: https://webwork.qcc.cuny.edu/webwork2
Keyset URL: https://webwork.qcc.cuny.edu/webwork2/ltiadvantage/keys
I setup the debug.log to 1 and also uncomented the line to the file location in webwork2.mojolicious.yml but no debug.log has been written so far. 🤷♀️
Any suggestions about what to do to resolve this issue?
Thank you in advance for any suggestion!
---------------
***Here are the parameters for authen_LTI.conf
#!perl
$debug_lti_parameters = 1;
$debug_lti_grade_passback = 1;
# Authentication settings
$authen{user_module} = [
{ '*' => 'WeBWorK::Authen::LTIAdvantage' }, # first try LTI 1.3
# { '*' => 'WeBWorK::Authen::LTIAdvanced' }, # next try LTI 1.1
{ '*' => 'WeBWorK::Authen::Basic_TheLastOption' } # fallback authoriz ation method
];
#include('conf/authen_LTI_1_1.conf');
include('conf/authen_LTI_1_3.conf');
$LTIVersion = 'v1p3';
$LTIAccountCreationCutoff = 'professor';
$LMSManageUserData = 1;
$external_auth = 0;
$permissionLevels{change_password} = 'ta';
#$LTIGradeMode = '';
#$LTIGradeMode = 'course';
$LTIGradeMode = 'homework';
$LTIGradeOnSubmit = 1;
$LTICheckPrior = 0;
$LTIMassUpdateInterval = 3600; #in seconds
################################################################################ ################
# Add an 'LTI' tab to the Course Configuration page
################################################################################ ################
@LTIConfigVariables = (
#'LTI{v1p1}{LMS_name}',
#'LTI{v1p3}{LMS_name}',
#'LTI{v1p1}{LMS_url}',
#'LTI{v1p3}{LMS_url}',
#'external_auth',
#'LTIGradeMode',
#'LMSManageUserData',
#'debug_lti_parameters'
);
1; # final line of the file to reassure perl that it was read properly.
***Here are the parameters for authen_1_3_LTI.conf
#!perl
#$LTI{v1p3}{LMS_name} = 'e.g., Blackboard, Canvas, Moodle, etc.';
$LTI{v1p3}{LMS_name} = 'Brightspace';
$LTI{v1p3}{LMS_url} = 'https://brightspace.cuny.edu';
#$LTI{v1p3}{LMS_url} = 'https://myschool.edu/lms/';
$LTI{v1p3}{preferred_source_of_username} = 'ext_d2l_orgdefinedid';
$LTI{v1p3}{fallback_source_of_username} = 'email';
#$LTI{v1p3}{fallback_source_of_username} = https://purl.imsglobal.org/spec/lti/claim/lis#person_sourcedid;
$LTI{v1p3}{strip_domain_from_email} = 1;
$LTI{v1p3}{lowercase_username} = 0;
$LTI{v1p3}{preferred_source_of_student_id} = 'ext_d2l_orgdefinedid';
$LTI{v1p3}{PlatformID} = 'https://brightspace.cuny.edu';
$LTI{v1p3}{ClientID} = 'a2adccd2-3a39-48f4-9740-dfa12ba26dfe';
$LTI{v1p3}{DeploymentID} = 'b42ae0ba-a627-4aab-91c0-c600733bbaaa';
$LTI{v1p3}{PublicKeysetURL} = 'https://brightspace.cuny.edu/d2l/.well-known/jwks';
$LTI{v1p3}{AccessTokenURL} = 'https://auth.brightspace.com/core/connect/token';
$LTI{v1p3}{AccessTokenAUD} = 'https://api.brightspace.com/auth/token';
$LTI{v1p3}{AuthReqURL} = 'https://brightspace.cuny.edu/d2l/lti/authenticate';
$LTI{v1p3}{StateKeyLifetime} = 60; # in seconds
$LTI{v1p3}{LMSrolesToWeBWorKroles} = {
'librarian' => 'guest',
'observer' => 'guest',
'visitor' => 'guest',
'Guest' => 'guest',
'Administrator' => 'professor',
'Designer' => 'professor',
'instructor' => 'professor',
'Instructor' => 'professor',
'Faculty' => 'professor',
'Teacher' => 'professor',
'Student' => 'student',
'Learner' => 'student',
'student' => 'student',
'AI/TA' => 'ta',
'TA' => 'ta',
'Teaching Assistant' => 'ta',
'Teaching Assistant (TA)' => 'ta',
'Non-editing teacher' => 'ta',
'Grader' => 'ta',
};
################################################################################################
# Local routine to modify users
################################################################################################
# When users are added to the system WeBWorK will do its best to fill out user information.
# However, institutions can add code to the following routine to set fields not normally set by
# WeBWorK. E.G. The student ID field.
#$LTI{v1p3}{modify_user} = sub {
# # The self object from LTIAdvantange.pm
# my $self = shift;
# # The user object to be modified
# my $user = shift;
#
# # Parse context_id for additional information. E.G.
# my @course_id = split /-/, $self->{context_id};
# $user->{section} = $course_id[4];
#};
################################################################################################
# Local routine to modify user sets
################################################################################################
# When users are added to the system they are also assigned all visible sets This routine can be
# used to modify the sets before they are assigned. E.g. extend due dates based off the number
# of problems students have to do.
#$LTI{v1p3}{modify_user_set} = sub {
# # The self object from LTIAdvantange.pm
# my $self = shift;
# my $globalSet = shift;
# # The userSet object to be modified
# my $userSet = shift;
#
# my $numberOfSetsAssigned = $self->{numberOfSetsAssigned};
# my $daysPerSetMakeup = 2;
# my $reasonableNumberOfDays = $numberOfSetsAssigned * $daysPerSetMakeup + 1;
# if ($reasonableNumberOfDays < 2) { $reasonableNumberOfDays = 2; }
# my $niceDueTime = $globalSet->due_date + $reasonableNumberOfDays * 86400;
# my $niceAnswerTime = $niceDueTime + 600;
#
# $userSet->due_date($niceDueTime);
# $userSet->answer_date($niceAnswerTime);
#};
##### NOTE: The following was used in the older system and we didn't change in the upgrade.
# modification of the above to pull info from Bb to fill info into WW
$LTI_modify_user = sub {
# The self object from LTIAdvanced.pm
my $self = shift;
# The user object to be modified
my $user = shift;
# Parse context_id for additional information. E.G.
my $r = $self ->{r};
my @course_id=split /\s/, $r->param("context_title");
$user->{"section"} = $course_id[-5].' '.$course_id[-4].' '.$course_id[-3];
$user->{"recitation"} = $course_id[0].' '.$course_id[1];
};
# Do not change this.
$LTI{v1p3}{grader} = 'WeBWorK::Authen::LTIAdvantage::SubmitGrade';
1; # final line of the file to reassure perl that it was read properly.