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