diff --git a/bbb-lti/grails-app/conf/lti-config.properties b/bbb-lti/grails-app/conf/lti-config.properties index 7653c5d16a3a6c9991266f15056057a42671cd3e..d4f937b8156b0dd6b983e6a67f51b1940c9d9c85 100644 --- a/bbb-lti/grails-app/conf/lti-config.properties +++ b/bbb-lti/grails-app/conf/lti-config.properties @@ -49,11 +49,16 @@ ltiAllRecordedByDefault=false ltiCanvasPlacements= ltiCanvasPlacementName=BigBlueButton +# Parameters to generate a unique meeting ID from +# By default, resource_link_id and oauth_consumer_key are used, but certain LMS don't provide unique resource_link_ids +# Specify parameters separated by commas. Can leave blank to use default. +meetingIdParams=resource_link_id,oauth_consumer_key + #---------------------------------------------------- # Inject configuration values into BigbluebuttonSrvice beans beans.bigbluebuttonService.url=${bigbluebuttonURL} beans.bigbluebuttonService.salt=${bigbluebuttonSalt} - +beans.bigbluebuttonService.idParams=${meetingIdParams} #---------------------------------------------------- # Inject configuration values into LtiSrvice beans beans.ltiService.endPoint=${ltiEndPoint} diff --git a/bbb-lti/grails-app/services/org/bigbluebutton/BigbluebuttonService.groovy b/bbb-lti/grails-app/services/org/bigbluebutton/BigbluebuttonService.groovy index 17714737b5b13d625525ff043bdcfbd90ac3f930..ffa8649cb490e6fed7978bd6da550b96ab98d281 100644 --- a/bbb-lti/grails-app/services/org/bigbluebutton/BigbluebuttonService.groovy +++ b/bbb-lti/grails-app/services/org/bigbluebutton/BigbluebuttonService.groovy @@ -56,7 +56,8 @@ class BigbluebuttonService { def url = "http://test-install.blindsidenetworks.com/bigbluebutton" def salt = "8cd8ef52e8e101574e400365b55e11a6" - + def idParams = "resource_link_id,oauth_consumer_key" + Proxy bbbProxy DocumentBuilderFactory docBuilderFactory DocumentBuilder docBuilder @@ -81,8 +82,9 @@ class BigbluebuttonService { if (!salt.equals(bbbProxy.salt) && !salt.equals("")) { bbbProxy.setSalt(salt) } + String meetingName = getValidatedMeetingName(params.get(Parameter.RESOURCE_LINK_TITLE)) - String meetingID = getValidatedMeetingId(params.get(Parameter.RESOURCE_LINK_ID), params.get(Parameter.CONSUMER_ID)) + String meetingID = getValidatedMeetingId(getParamsForMeetingId(params)) String attendeePW = DigestUtils.shaHex("ap" + params.get(Parameter.RESOURCE_LINK_ID) + params.get(Parameter.CONSUMER_ID)) String moderatorPW = DigestUtils.shaHex("mp" + params.get(Parameter.RESOURCE_LINK_ID) + params.get(Parameter.CONSUMER_ID)) String logoutURL = getValidatedLogoutURL(params.get(Parameter.LAUNCH_RETURN_URL)) @@ -133,7 +135,7 @@ class BigbluebuttonService { if (!salt.equals(bbbProxy.salt) && !salt.equals("")) { bbbProxy.setSalt(salt) } - String meetingID = getValidatedMeetingId(params.get(Parameter.RESOURCE_LINK_ID), params.get(Parameter.CONSUMER_ID)) + String meetingID = getValidatedMeetingId(getParamsForMeetingId(params)) String recordingsURL = bbbProxy.getGetRecordingsURL(meetingID) Map<String, Object> responseAPICall = doAPICall(recordingsURL) if (responseAPICall == null) { @@ -204,8 +206,8 @@ class BigbluebuttonService { return (meetingName == null || meetingName == "")? "Meeting": meetingName } - private String getValidatedMeetingId(String resourceId, String consumerId){ - return DigestUtils.shaHex(resourceId + consumerId) + private String getValidatedMeetingId(String params){ + return DigestUtils.shaHex(params) } private String getValidatedLogoutURL(String logoutURL){ @@ -370,4 +372,23 @@ class BigbluebuttonService { } return list; } + + /** + * Get the value of all params from idParams (specified in lti-config) + * If none are specified, fallback to using resource_link_id and oauth_consumer_key + */ + private String getParamsForMeetingId(params) { + String[] paramArray = idParams.split(","); + String result = ""; + for(String s : paramArray) { + if(params.get(s) != null) { + result += params.get(s); + } + } + // If we can't get anything from config, fallback to old way + if(result.equals("")) { + result = params.get(Parameter.RESOURCE_LINK_ID) + params.get(Parameter.CONSUMER_ID); + } + return result; + } }