ims-lti 2.2.3 → 2.3.5

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
- SHA1:
3
- metadata.gz: 1ecba7e383b26f256f513d977ce7a1a5ddc6cf4d
4
- data.tar.gz: cbb2dcd2d373cb968b72d8ec689d6d1bb4e1b8df
2
+ SHA256:
3
+ metadata.gz: 9899601b123b10eb2feee49196ff7416632bca74d3d447944ce22b69fe72b3c4
4
+ data.tar.gz: 55862774dae198a76d3d179db2b651e08491a3b03fc2edf4615873270e9c0330
5
5
  SHA512:
6
- metadata.gz: 1eee3ca7972a1c446be5e4a0abb85eba9c6aed471af0891c6cfad4999a876393349a89adbf84865e401b77732bd8da7bec9803adbb4e7d6fd054675a7f99bb49
7
- data.tar.gz: ef39d166b973161e51f2b91f01e39a26e26fe71fdde1ecee3d4f37f178db9bc5a9bdbf8b04afe9923385862bcea0b162a6ef23ce967778b11792ea0ea773108e
6
+ metadata.gz: '0972ae6f32083f0386f81b0cf027429c7848edfc0e59a37477c6dfdab17183fd53697298e30944f3c91699b6f1c3a54271dd5c4a891fad0521bbab63d0a65c2b'
7
+ data.tar.gz: 2750f5c13df1af5faaefcf45bb44107d2194f79250b41e9f37d425c34e852d975fe3364b12dfb3f373b678d0d7837e8b56c26dcacb0afb02ea0db4fbc909afe9
data/README.md CHANGED
@@ -6,9 +6,11 @@ LTI ruby implementation
6
6
 
7
7
  ## Installation
8
8
 
9
- Add this line to your application's Gemfile:
9
+ Add these lines to your application's Gemfile:
10
10
 
11
11
  gem 'ims-lti'
12
+ # only necessary if using ToolProxyRegistrationService:
13
+ gem 'faraday-oauth' # or faraday_middleware if using Faraday < 2.0
12
14
 
13
15
  And then execute:
14
16
 
@@ -41,6 +43,19 @@ return false if DateTime.strptime(request.request_parameters['oauth_timestamp'],
41
43
 
42
44
  ```
43
45
 
46
+
47
+ ```ruby
48
+
49
+ params = { user_id: '123', lti_message_type: IMS::LTI::Models::Messages::BasicLTILaunchRequest::MESSAGE_TYPE }
50
+
51
+ header = SimpleOAuth::Header.new(:post, 'https://yoursite.com', params, consumer_key: oauth_consumer_key, consumer_secret: secret)
52
+
53
+ signed_params = header.signed_attributes.merge(params)
54
+
55
+ IMS::LTI::Services::MessageAuthenticator.new(launch_url, signed_params, secret)
56
+
57
+ ```
58
+
44
59
  ## Contributing
45
60
 
46
61
  1. Fork it ( http://github.com/instructure/ims-lti/fork )
@@ -1,6 +1,6 @@
1
+ require 'uri'
2
+
1
3
  module IMS::LTI::Models
2
- require 'uri'
3
-
4
4
  class LTIModel
5
5
  LTI_VERSION_2P0 = 'LTI-2p0'.freeze
6
6
  LTI_VERSION_2P1 = 'LTI-2p1'.freeze
@@ -96,7 +96,7 @@ module IMS::LTI::Models
96
96
  begin
97
97
  data = JSON.parse(json)
98
98
  rescue
99
- data = JSON.parse(URI.unescape(json))
99
+ data = JSON.parse(URI::DEFAULT_PARSER.unescape(json))
100
100
  end
101
101
 
102
102
  if data.is_a? Array
@@ -1,6 +1,6 @@
1
1
  module IMS::LTI::Models::MembershipService
2
2
  class LISPerson < Person
3
- attr_reader :email, :result_sourced_id, :sourced_id, :user_id
3
+ attr_reader :email, :result_sourced_id, :sourced_id, :user_id, :sis_id
4
4
 
5
5
  def initialize(opts={})
6
6
  super(opts)
@@ -8,6 +8,7 @@ module IMS::LTI::Models::MembershipService
8
8
  @result_sourced_id = opts[:result_sourced_id]
9
9
  @sourced_id = opts[:sourced_id]
10
10
  @user_id = opts[:user_id]
11
+ @sis_id = opts[:sis_id]
11
12
  end
12
13
  end
13
14
  end
@@ -47,6 +47,19 @@ module IMS::LTI::Models::Messages
47
47
  @descendants || Set.new
48
48
  end
49
49
 
50
+ # For signature generation -- see usage in signed_post_params
51
+ def convert_param_values_to_crlf_endings(hash)
52
+ hash.transform_values do |val|
53
+ if val.is_a?(String)
54
+ # Convert to all newlines first, for consistency, just in case there
55
+ # is some weird mix of newlines & carriage returns in input
56
+ val.encode(universal_newline: true).encode(crlf_newline: true)
57
+ else
58
+ val
59
+ end
60
+ end
61
+ end
62
+
50
63
  private
51
64
 
52
65
  def add_params(instance_variable, param, *params)
@@ -148,7 +161,11 @@ module IMS::LTI::Models::Messages
148
161
  end
149
162
 
150
163
  def signed_post_params(secret)
151
- message_params = oauth_params.merge(post_params)
164
+ # The params will be used in an HTML form, and browsers will always use
165
+ # newlines+carriage return line endings for submitted form data. The
166
+ # signature needs to match, and signature generation does not add carriage
167
+ # returns, so we ensure CRLF endings here.
168
+ message_params = self.class.convert_param_values_to_crlf_endings(oauth_params.merge(post_params))
152
169
  @message_authenticator = IMS::LTI::Services::MessageAuthenticator.new(launch_url, message_params, secret)
153
170
  @message_authenticator.signed_params
154
171
  end
@@ -219,4 +236,4 @@ module IMS::LTI::Models::Messages
219
236
  end
220
237
 
221
238
  end
222
- end
239
+ end
@@ -7,5 +7,6 @@ module IMS::LTI::Serializers::MembershipService
7
7
  set_attribute :result_sourced_id, key: :resultSourcedId
8
8
  set_attribute :sourced_id, key: :sourcedId
9
9
  set_attribute :user_id, key: :userId
10
+ set_attribute :sis_id, key: :sisId, optional: true
10
11
  end
11
12
  end
@@ -11,7 +11,11 @@ module IMS::LTI::Services
11
11
 
12
12
  def connection
13
13
  @connection ||= Faraday.new base_url do |conn|
14
- conn.authorization :Bearer, token
14
+ if Gem::Version.new(Faraday::VERSION) < Gem::Version.new('1.0')
15
+ conn.authorization :Bearer, token
16
+ else
17
+ conn.request :authorization, 'Bearer', token
18
+ end
15
19
  end
16
20
  end
17
21
  end
@@ -1,5 +1,5 @@
1
1
  module IMS
2
2
  module LTI
3
- VERSION = "2.2.3"
3
+ VERSION = "2.3.5"
4
4
  end
5
5
  end
data/lib/ims/lti.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'addressable/uri'
2
2
  require 'builder'
3
3
  require 'faraday'
4
- require 'faraday_middleware'
5
4
  require 'json'
6
5
  require 'json/jwt'
7
6
  require 'rexml/document'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ims-lti
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.3
4
+ version: 2.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Instructure
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-02 00:00:00.000000000 Z
11
+ date: 2024-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -48,44 +48,30 @@ dependencies:
48
48
  name: faraday
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - "<"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.8'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '0.8'
61
- - !ruby/object:Gem::Dependency
62
- name: faraday_middleware
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '0.8'
53
+ version: '3.0'
68
54
  type: :runtime
69
55
  prerelease: false
70
56
  version_requirements: !ruby/object:Gem::Requirement
71
57
  requirements:
72
- - - "~>"
58
+ - - "<"
73
59
  - !ruby/object:Gem::Version
74
- version: '0.8'
60
+ version: '3.0'
75
61
  - !ruby/object:Gem::Dependency
76
62
  name: json-jwt
77
63
  requirement: !ruby/object:Gem::Requirement
78
64
  requirements:
79
65
  - - "~>"
80
66
  - !ruby/object:Gem::Version
81
- version: '1.7'
67
+ version: 1.16.6
82
68
  type: :runtime
83
69
  prerelease: false
84
70
  version_requirements: !ruby/object:Gem::Requirement
85
71
  requirements:
86
72
  - - "~>"
87
73
  - !ruby/object:Gem::Version
88
- version: '1.7'
74
+ version: 1.16.6
89
75
  - !ruby/object:Gem::Dependency
90
76
  name: simple_oauth
91
77
  requirement: !ruby/object:Gem::Requirement
@@ -101,19 +87,19 @@ dependencies:
101
87
  - !ruby/object:Gem::Version
102
88
  version: 0.3.1
103
89
  - !ruby/object:Gem::Dependency
104
- name: byebug
90
+ name: rexml
105
91
  requirement: !ruby/object:Gem::Requirement
106
92
  requirements:
107
- - - "~>"
93
+ - - ">="
108
94
  - !ruby/object:Gem::Version
109
- version: '9.0'
110
- type: :development
95
+ version: '0'
96
+ type: :runtime
111
97
  prerelease: false
112
98
  version_requirements: !ruby/object:Gem::Requirement
113
99
  requirements:
114
- - - "~>"
100
+ - - ">="
115
101
  - !ruby/object:Gem::Version
116
- version: '9.0'
102
+ version: '0'
117
103
  - !ruby/object:Gem::Dependency
118
104
  name: guard
119
105
  requirement: !ruby/object:Gem::Requirement
@@ -335,10 +321,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
335
321
  - !ruby/object:Gem::Version
336
322
  version: '0'
337
323
  requirements: []
338
- rubyforge_project:
339
- rubygems_version: 2.5.1
324
+ rubygems_version: 3.1.6
340
325
  signing_key:
341
326
  specification_version: 4
342
327
  summary: Ruby library for creating IMS LTI tool providers and consumers
343
328
  test_files: []
344
- has_rdoc: