qalam_lti_provider_engine 2.0.5 → 2.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6ccfc573b45088fcf5f6f7a2baab432a14cd2dca48f112002571d38332d8a0c
4
- data.tar.gz: e6bf0833f875d030751470feed9cb6b2c6370f62ce121ff7fe86cd8e2626a8aa
3
+ metadata.gz: 07bc159f241d267bd6e42067a210324f18198742dc3e4965959b6b95065aebe7
4
+ data.tar.gz: 5f962326d293321e6d9d229c6bd7fad1c57e4155efb03e416a540afaf30cda33
5
5
  SHA512:
6
- metadata.gz: c2e90003e78e5b64fe4ebd49c63de0e5fe115cde52a449e3bb3811065ca4c80f10fc121b094164befe58cf11dec3730214c831b1378b6578eaa32d766de5dbbb
7
- data.tar.gz: ad8ccaf97941edabfabf5756c099c8d7cc57122ee5830adedf31377dd19fd7a0297c20bdaa644b596318afadb917ad4b7faf6af8652fe63eb69c44ba84943757
6
+ metadata.gz: 215e7707f1858ce5cb1c3302b324ce2b9f0e513a1b7781d171b8179f1a7d1bc5378797f268dfffd4c179445a9396f7c58b51bc976f76ff2fc9a82165ac06f54d
7
+ data.tar.gz: a31aeb671814a4f142ebd99ccb2e19acb11334e5f35c7cfc384f50d80c7deca978f3a104239cf1d6de1328efac50f353498d233b16c7ef414799a43ffce3b44f
@@ -4,17 +4,28 @@ require 'colorize'
4
4
  module LtiProvider
5
5
  class LtiController < LtiProvider::LtiApplicationController
6
6
  skip_before_action :require_lti_launch
7
+ # skip_before_action :verify_authenticity_token, only: :launch
7
8
 
8
9
  def launch
9
- provider = IMS::LTI::ToolProvider.new(params['oauth_consumer_key'], LtiProvider::Config.secret, params)
10
+ tool_key = params['oauth_consumer_key']
11
+ tool_secret = ((ToolLtiKey.table_exists? && ToolLtiKey.find_by(key: tool_key, canvas_url: canvas_url_domain)&.secret) or (LtiProvider::Config.secret))
12
+
13
+ # puts tool_key.inspect.green
14
+ # puts LtiProvider::Config.secret.inspect.red
15
+ # puts (ToolLtiKey.table_exists? && ToolLtiKey.find_by(key: tool_key, canvas_url: canvas_url_domain)&.secret).inspect.red
16
+ # puts tool_secret.inspect.green
17
+
18
+ provider = IMS::LTI::ToolProvider.new(tool_key, tool_secret, params)
10
19
  launch = Launch.initialize_from_request(provider, request)
11
20
 
21
+ # puts launch.inspect.red
22
+ # puts request.origin.inspect.green
23
+ # puts request.base_url.inspect.yellow
12
24
  if !launch.valid_provider?
13
25
  msg = "#{launch.lti_errormsg} Please be sure you are launching this tool from the link provided in Qalam."
14
26
  return show_error msg
15
27
  elsif launch.save
16
28
  session[:cookie_test] = true
17
-
18
29
  ### QALAM ###
19
30
  if params[:timetable_date] && params[:section_room]
20
31
  redirect_to cookie_test_path(nonce: launch.nonce, timetable_date: params[:timetable_date], section_room: params[:section_room])
@@ -23,26 +34,34 @@ module LtiProvider
23
34
  end
24
35
  ### END ###
25
36
  else
26
- return show_error "Unable to launch #{LtiProvider::XmlConfig.tool_title}. Please check your External Tools configuration and try again."
37
+ # if params[:launch_tool] && params[:launch_tool] == 'digital_library'
38
+ # redirect_to main_app.root_path and return
39
+ # else
40
+ return show_error "Unable to launch #{LtiProvider::XmlConfig.tool_title}. Please check your External Tools configuration and try again."
41
+ # end
27
42
  end
28
43
  end
29
44
 
30
45
  def cookie_test
46
+ @launch = Launch.where("created_at > ?", 5.minutes.ago).find_by_nonce(params[:nonce])
47
+
31
48
  if session[:cookie_test]
32
49
  # success!!! we've got a session!
33
50
  consume_launch
34
51
  else
35
- render
52
+ # if @launch.launch_tool && @launch.launch_tool == 'digital_library'
53
+ # redirect_to main_app.root_path and return
54
+ # else
55
+ render and return
56
+ # end
36
57
  end
37
58
  end
38
59
 
39
60
  def consume_launch
40
- launch = Launch.where("created_at > ?", 5.minutes.ago).find_by_nonce(params[:nonce])
41
-
42
- if launch
61
+ if @launch
43
62
  [:account_id, :course_name, :course_id, :canvas_url, :tool_consumer_instance_guid,
44
63
  :user_id, :user_name, :user_roles, :user_avatar_url, :launch_tool].each do |attribute|
45
- session[attribute] = launch.public_send(attribute)
64
+ session[attribute] = @launch.public_send(attribute)
46
65
  end
47
66
 
48
67
  ### QALAM ###
@@ -52,11 +71,19 @@ module LtiProvider
52
71
  end
53
72
  ### END ###
54
73
 
55
- launch.destroy
74
+ @launch.destroy
56
75
 
57
- redirect_to main_app.root_path
76
+ # if @launch.launch_tool && @launch.launch_tool == 'digital_library'
77
+ # redirect_to main_app.root_path and return
78
+ # else
79
+ redirect_to main_app.root_path and return
80
+ # end
58
81
  else
59
- return show_error "The tool was not launched successfully. Please try again."
82
+ # if @launch.launch_tool && @launch.launch_tool == 'digital_library'
83
+ # redirect_to main_app.root_path and return
84
+ # else
85
+ return show_error "The tool was not launched successfully. Please try again."
86
+ # end
60
87
  end
61
88
  end
62
89
 
@@ -72,5 +99,15 @@ module LtiProvider
72
99
  def show_error(message)
73
100
  render plain: message
74
101
  end
102
+
103
+ private
104
+ def canvas_url_domain
105
+ if params['launch_presentation_return_url']
106
+ uri = URI.parse(params['launch_presentation_return_url'])
107
+ domain = "#{uri.scheme}://#{uri.host}"
108
+ domain += ":#{uri.port}" unless uri.port.nil? || [80, 443].include?(uri.port.to_i)
109
+ return domain
110
+ end
111
+ end
75
112
  end
76
113
  end
@@ -55,6 +55,82 @@ module LtiProvider
55
55
  tc.canvas_user_navigation!(LtiProvider::XmlConfig.user_navigation.symbolize_keys)
56
56
  end
57
57
 
58
+ ### QALAM ###
59
+
60
+ if LtiProvider::XmlConfig.course_home_sub_navigation
61
+ tc.canvas_course_home_sub_navigation!(LtiProvider::XmlConfig.course_home_sub_navigation.symbolize_keys)
62
+ end
63
+
64
+ if LtiProvider::XmlConfig.course_settings_sub_navigation
65
+ tc.canvas_course_settings_sub_navigation!(LtiProvider::XmlConfig.course_settings_sub_navigation.symbolize_keys)
66
+ end
67
+
68
+ if LtiProvider::XmlConfig.global_navigation
69
+ tc.canvas_global_navigation!(LtiProvider::XmlConfig.global_navigation.symbolize_keys)
70
+ end
71
+
72
+ if LtiProvider::XmlConfig.module_menu
73
+ tc.canvas_module_menu!(LtiProvider::XmlConfig.module_menu.symbolize_keys)
74
+ end
75
+
76
+ if LtiProvider::XmlConfig.module_index_menu
77
+ tc.canvas_module_index_menu!(LtiProvider::XmlConfig.module_index_menu.symbolize_keys)
78
+ end
79
+
80
+ if LtiProvider::XmlConfig.module_group_menu
81
+ tc.canvas_module_group_menu!(LtiProvider::XmlConfig.module_group_menu.symbolize_keys)
82
+ end
83
+
84
+ if LtiProvider::XmlConfig.quiz_menu
85
+ tc.canvas_quiz_menu!(LtiProvider::XmlConfig.quiz_menu.symbolize_keys)
86
+ end
87
+
88
+ if LtiProvider::XmlConfig.quiz_index_menu
89
+ tc.canvas_quiz_index_menu!(LtiProvider::XmlConfig.quiz_index_menu.symbolize_keys)
90
+ end
91
+
92
+ if LtiProvider::XmlConfig.assignment_menu
93
+ tc.canvas_assignment_menu!(LtiProvider::XmlConfig.assignment_menu.symbolize_keys)
94
+ end
95
+
96
+ if LtiProvider::XmlConfig.assignment_index_menu
97
+ tc.canvas_assignment_index_menu!(LtiProvider::XmlConfig.assignment_index_menu.symbolize_keys)
98
+ end
99
+
100
+ if LtiProvider::XmlConfig.assignment_group_menu
101
+ tc.canvas_assignment_group_menu!(LtiProvider::XmlConfig.assignment_group_menu.symbolize_keys)
102
+ end
103
+
104
+ if LtiProvider::XmlConfig.discussion_topic_menu
105
+ tc.canvas_discussion_topic_menu!(LtiProvider::XmlConfig.discussion_topic_menu.symbolize_keys)
106
+ end
107
+
108
+ if LtiProvider::XmlConfig.discussion_topic_index_menu
109
+ tc.canvas_discussion_topic_index_menu!(LtiProvider::XmlConfig.discussion_topic_index_menu.symbolize_keys)
110
+ end
111
+
112
+ if LtiProvider::XmlConfig.wiki_page_menu
113
+ tc.canvas_wiki_page_menu!(LtiProvider::XmlConfig.wiki_page_menu.symbolize_keys)
114
+ end
115
+
116
+ if LtiProvider::XmlConfig.wiki_index_menu
117
+ tc.canvas_wiki_index_menu!(LtiProvider::XmlConfig.wiki_index_menu.symbolize_keys)
118
+ end
119
+
120
+ if LtiProvider::XmlConfig.file_menu
121
+ tc.canvas_file_menu!(LtiProvider::XmlConfig.file_menu.symbolize_keys)
122
+ end
123
+
124
+ if LtiProvider::XmlConfig.file_index_menu
125
+ tc.canvas_file_index_menu!(LtiProvider::XmlConfig.file_index_menu.symbolize_keys)
126
+ end
127
+
128
+ if LtiProvider::XmlConfig.editor_button
129
+ tc.canvas_editor_button!(LtiProvider::XmlConfig.editor_button.symbolize_keys)
130
+ end
131
+
132
+ ### END ###
133
+
58
134
  if LtiProvider::XmlConfig.environments
59
135
  tc.set_ext_param(platform, :environments, LtiProvider::XmlConfig.environments.symbolize_keys)
60
136
  end
@@ -0,0 +1,4 @@
1
+ class ToolLtiKey < ApplicationRecord
2
+ validates :canvas_url, :secret, presence: true
3
+ validates :key, presence: true, :uniqueness => {:scope=>:canvas_url}
4
+ end
@@ -1,12 +1,14 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
- <head>
4
- <title>LtiProvider</title>
5
- <%= csrf_meta_tags %>
6
- </head>
7
- <body>
8
-
9
- <%= yield %>
10
-
11
- </body>
12
- </html>
3
+ <head>
4
+ <title>QalamLtiProvider</title>
5
+ <%= csrf_meta_tags %>
6
+ <meta name="description" content="About QalamLtiProvider">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <%= csrf_meta_tags %>
9
+ <%= csp_meta_tag %>
10
+ </head>
11
+ <body>
12
+ <%= yield %>
13
+ </body>
14
+ </html>
@@ -0,0 +1,11 @@
1
+ class CreateToolLtiKeys < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :tool_lti_keys do |t|
4
+ t.string :key
5
+ t.string :secret
6
+ t.string :canvas_url
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -12,8 +12,13 @@ module LtiProvider
12
12
  protected
13
13
  def require_lti_launch
14
14
  if canvas_url.blank? || user_id.blank?
15
- reset_session
16
- prompt_for_launch
15
+ if session[:qalam_url]
16
+ reset_session
17
+ prompt_for_launch_authorized
18
+ else
19
+ reset_session
20
+ prompt_for_launch
21
+ end
17
22
  end
18
23
  end
19
24
 
@@ -21,6 +26,10 @@ module LtiProvider
21
26
  render plain: 'Please launch this tool from Qalam and then try again.'
22
27
  end
23
28
 
29
+ def prompt_for_launch_authorized
30
+ render plain: 'You need to be login on Qalam.'
31
+ end
32
+
24
33
  def canvas_url
25
34
  session[:canvas_url]
26
35
  end
@@ -59,19 +68,19 @@ module LtiProvider
59
68
  end
60
69
 
61
70
  def student_launch?
62
- user_roles.split(',').include? 'urn:lti:role:ims/lis/Learner'
71
+ user_roles&.split(',')&.include? 'urn:lti:role:ims/lis/Learner'
63
72
  end
64
73
 
65
74
  def teacher_launch?
66
- user_roles.split(',').include? 'urn:lti:role:ims/lis/Instructor'
75
+ user_roles&.split(',')&.include? 'urn:lti:role:ims/lis/Instructor'
67
76
  end
68
77
 
69
78
  def account_admin_launch?
70
- user_roles.split(',').include? 'urn:lti:instrole:ims/lis/Administrator'
79
+ user_roles&.split(',')&.include? 'urn:lti:instrole:ims/lis/Administrator'
71
80
  end
72
81
 
73
82
  def root_admin_launch?
74
- user_roles.split(',').include? 'urn:lti:sysrole:ims/lis/SysAdmin'
83
+ user_roles&.split(',')&.include? 'urn:lti:sysrole:ims/lis/SysAdmin'
75
84
  end
76
85
  ### END ###
77
86
 
@@ -1,3 +1,3 @@
1
1
  module LtiProvider
2
- VERSION = "2.0.5"
2
+ VERSION = "2.0.9"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qalam_lti_provider_engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5
4
+ version: 2.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Donahue
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2021-08-01 00:00:00.000000000 Z
14
+ date: 2021-08-29 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -245,12 +245,14 @@ files:
245
245
  - app/controllers/lti_provider/lti_application_controller.rb
246
246
  - app/controllers/lti_provider/lti_controller.rb
247
247
  - app/models/lti_provider/launch.rb
248
+ - app/models/tool_lti_key.rb
248
249
  - app/views/layouts/lti_provider/application.html.erb
249
250
  - app/views/lti_provider/lti/cookie_test.html.erb
250
251
  - config/lti.yml.example
251
252
  - config/lti_xml.yml.example
252
253
  - config/routes.rb
253
254
  - db/migrate/20130319050003_create_lti_provider_launches.rb
255
+ - db/migrate/20210809101126_create_tool_lti_keys.rb
254
256
  - lib/lti_provider.rb
255
257
  - lib/lti_provider/config.rb
256
258
  - lib/lti_provider/engine.rb
@@ -312,7 +314,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
312
314
  - !ruby/object:Gem::Version
313
315
  version: '0'
314
316
  requirements: []
315
- rubygems_version: 3.2.21
317
+ rubygems_version: 3.2.22
316
318
  signing_key:
317
319
  specification_version: 4
318
320
  summary: LtiProvider is a mountable engine for handling the LTI launch and exposing