From 50c59c170803787a3b377ba8f2b2b8d6d5e8062b Mon Sep 17 00:00:00 2001 From: Ghazi Triki <ghazi.triki@riadvice.tn> Date: Tue, 16 Jul 2019 23:35:56 +0300 Subject: [PATCH] Make LTI URLs work. --- bbb-lti/grails-app/conf/lti-config.properties | 4 +++ .../org/bigbluebutton/lti/UrlMappings.groovy | 4 +-- .../lti/controllers/ToolController.groovy | 8 +++--- bbb-lti/lti.nginx | 25 ++++++++++++++++++ .../images => src/main/webapp/assets}/bbb.jpg | Bin .../main/webapp/assets}/bbb_logo.jpg | Bin .../main/webapp/assets}/favicon.ico | Bin .../main/webapp/{images => assets}/icon.ico | Bin 8 files changed, 36 insertions(+), 5 deletions(-) rename bbb-lti/{grails-app/assets/images => src/main/webapp/assets}/bbb.jpg (100%) rename bbb-lti/{grails-app/assets/images => src/main/webapp/assets}/bbb_logo.jpg (100%) rename bbb-lti/{grails-app/assets/images => src/main/webapp/assets}/favicon.ico (100%) rename bbb-lti/src/main/webapp/{images => assets}/icon.ico (100%) diff --git a/bbb-lti/grails-app/conf/lti-config.properties b/bbb-lti/grails-app/conf/lti-config.properties index d4f937b815..d5fb778cbf 100644 --- a/bbb-lti/grails-app/conf/lti-config.properties +++ b/bbb-lti/grails-app/conf/lti-config.properties @@ -24,6 +24,8 @@ bigbluebuttonURL=http://localhost/bigbluebutton # Salt which is used by 3rd-party apps to authenticate api calls bigbluebuttonSalt=bbb_salt +# The application name to use in URL path /lti +appName=lti # LTI basic information #---------------------------------------------------- @@ -68,3 +70,5 @@ beans.ltiService.restrictedAccess=${ltiRestrictedAccess} beans.ltiService.recordedByDefault=${ltiAllRecordedByDefault} beans.ltiService.canvasPlacements=${ltiCanvasPlacements} beans.ltiService.canvasPlacementName=${ltiCanvasPlacementName} + +beans.toolService.appName=${appName} \ No newline at end of file diff --git a/bbb-lti/grails-app/controllers/org/bigbluebutton/lti/UrlMappings.groovy b/bbb-lti/grails-app/controllers/org/bigbluebutton/lti/UrlMappings.groovy index c4292d9c7f..d92ee3c36c 100644 --- a/bbb-lti/grails-app/controllers/org/bigbluebutton/lti/UrlMappings.groovy +++ b/bbb-lti/grails-app/controllers/org/bigbluebutton/lti/UrlMappings.groovy @@ -21,13 +21,13 @@ package org.bigbluebutton.lti class UrlMappings { static mappings = { - "/$controller/$action?/$id?(.$format)?" { + "/lti/$controller/$action?/$id?(.$format)?" { constraints { // apply constraints here } } - "/"(controller: "tool") + "/lti/"(controller: "tool") "500"(view: '/error') } } diff --git a/bbb-lti/grails-app/controllers/org/bigbluebutton/lti/controllers/ToolController.groovy b/bbb-lti/grails-app/controllers/org/bigbluebutton/lti/controllers/ToolController.groovy index fed200c8a0..96fa401152 100644 --- a/bbb-lti/grails-app/controllers/org/bigbluebutton/lti/controllers/ToolController.groovy +++ b/bbb-lti/grails-app/controllers/org/bigbluebutton/lti/controllers/ToolController.groovy @@ -27,9 +27,11 @@ import java.text.DateFormat */ import java.text.SimpleDateFormat -import java.util.* class ToolController { + + def appName = "lti" + private static final String CONTROLLER_NAME = 'ToolController' private static final String RESP_CODE_SUCCESS = 'SUCCESS' private static final String RESP_CODE_FAILED = 'FAILED' @@ -59,7 +61,7 @@ class ToolController { // On post request proceed with the launch. def schemeHeader = request.getHeader("X-Forwarded-Proto") def scheme = schemeHeader == null ? ltiService.getScheme(request) : schemeHeader - def endPoint = scheme + "://" + ltiService.endPoint + "/" + grailsApplication.metadata['app.name'] + "/" + params.get("controller") + (params.get("format") != null ? "." + params.get("format") : "") + def endPoint = scheme + "://" + ltiService.endPoint + "/" + appName + "/" + params.get("controller") + (params.get("format") != null ? "." + params.get("format") : "") log.info "endPoint: " + endPoint ArrayList<String> missingParams = new ArrayList<String>() @@ -362,7 +364,7 @@ class ToolController { } private String getCartridgeXML(){ - def lti_endpoint = ltiService.retrieveBasicLtiEndpoint() + '/' + grailsApplication.metadata['app.name'] + def lti_endpoint = ltiService.retrieveBasicLtiEndpoint() + '/' + appName def launch_url = 'http://' + lti_endpoint + '/tool' def secure_launch_url = 'https://' + lti_endpoint + '/tool' def icon = 'http://' + lti_endpoint + '/assets/icon.ico' diff --git a/bbb-lti/lti.nginx b/bbb-lti/lti.nginx index 205906ab85..7ef18a09a3 100644 --- a/bbb-lti/lti.nginx +++ b/bbb-lti/lti.nginx @@ -21,3 +21,28 @@ include fastcgi_params; } + + location /lti/assets/ { + proxy_pass http://127.0.0.1:8181/assets/; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + # Workaround IE refusal to set cookies in iframe + add_header P3P 'CP="No P3P policy available"'; + + # Allow 30M uploaded presentation document. + client_max_body_size 30m; + client_body_buffer_size 128k; + + proxy_connect_timeout 90; + proxy_send_timeout 90; + proxy_read_timeout 90; + + proxy_buffer_size 4k; + proxy_buffers 4 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 64k; + + include fastcgi_params; + + proxy_request_buffering off; + } \ No newline at end of file diff --git a/bbb-lti/grails-app/assets/images/bbb.jpg b/bbb-lti/src/main/webapp/assets/bbb.jpg similarity index 100% rename from bbb-lti/grails-app/assets/images/bbb.jpg rename to bbb-lti/src/main/webapp/assets/bbb.jpg diff --git a/bbb-lti/grails-app/assets/images/bbb_logo.jpg b/bbb-lti/src/main/webapp/assets/bbb_logo.jpg similarity index 100% rename from bbb-lti/grails-app/assets/images/bbb_logo.jpg rename to bbb-lti/src/main/webapp/assets/bbb_logo.jpg diff --git a/bbb-lti/grails-app/assets/images/favicon.ico b/bbb-lti/src/main/webapp/assets/favicon.ico similarity index 100% rename from bbb-lti/grails-app/assets/images/favicon.ico rename to bbb-lti/src/main/webapp/assets/favicon.ico diff --git a/bbb-lti/src/main/webapp/images/icon.ico b/bbb-lti/src/main/webapp/assets/icon.ico similarity index 100% rename from bbb-lti/src/main/webapp/images/icon.ico rename to bbb-lti/src/main/webapp/assets/icon.ico -- GitLab