ims-lti 2.2.3 → 2.3.4
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 +5 -5
- data/README.md +16 -1
- data/lib/ims/lti/models/lti_model.rb +3 -3
- data/lib/ims/lti/models/membership_service/lis_person.rb +2 -1
- data/lib/ims/lti/models/messages/message.rb +19 -2
- data/lib/ims/lti/serializers/membership_service/lis_person_serializer.rb +1 -0
- data/lib/ims/lti/services/oauth2_client.rb +5 -1
- data/lib/ims/lti/version.rb +1 -1
- data/lib/ims/lti.rb +0 -1
- metadata +17 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 573467a4a8bcafd316db27afd42ad7672c23aed334635c73aac5fbedf1bb0580
|
4
|
+
data.tar.gz: 0cc5b9cc51e4b9c95f1d92952712c5c0e4911862c65efd8e18064f424e228b19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31e9e42eb6ca32c3c7927f17ee73b23be2df9c3d1b1a9f0b602d79faa0b7c794868ee6ec336b376c29dcc9aad6ac5a96bea8d851c8e3b55f3e35195d604b5158
|
7
|
+
data.tar.gz: b4d67645a2e744e04bb63bbf6901972739666596592224b4fd6868e2b96edf858e87d204a83c8ca8205546649748cb83514b83ec50b1ac51cc1a87924b1c61d3
|
data/README.md
CHANGED
@@ -6,9 +6,11 @@ LTI ruby implementation
|
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
9
|
-
Add
|
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
|
-
|
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
|
@@ -11,7 +11,11 @@ module IMS::LTI::Services
|
|
11
11
|
|
12
12
|
def connection
|
13
13
|
@connection ||= Faraday.new base_url do |conn|
|
14
|
-
|
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
|
data/lib/ims/lti/version.rb
CHANGED
data/lib/ims/lti.rb
CHANGED
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.
|
4
|
+
version: 2.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Instructure
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-08-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -48,30 +48,16 @@ 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
|
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
|
60
|
+
version: '3.0'
|
75
61
|
- !ruby/object:Gem::Dependency
|
76
62
|
name: json-jwt
|
77
63
|
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:
|
90
|
+
name: rexml
|
105
91
|
requirement: !ruby/object:Gem::Requirement
|
106
92
|
requirements:
|
107
|
-
- - "
|
93
|
+
- - ">="
|
108
94
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
110
|
-
type: :
|
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: '
|
102
|
+
version: '0'
|
117
103
|
- !ruby/object:Gem::Dependency
|
118
104
|
name: guard
|
119
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -212,7 +198,7 @@ dependencies:
|
|
212
198
|
- - "~>"
|
213
199
|
- !ruby/object:Gem::Version
|
214
200
|
version: '0.8'
|
215
|
-
description:
|
201
|
+
description:
|
216
202
|
email: opensource@instructure.com
|
217
203
|
executables: []
|
218
204
|
extensions: []
|
@@ -320,7 +306,7 @@ homepage: http://github.com/instructure/ims-lti
|
|
320
306
|
licenses:
|
321
307
|
- MIT
|
322
308
|
metadata: {}
|
323
|
-
post_install_message:
|
309
|
+
post_install_message:
|
324
310
|
rdoc_options: []
|
325
311
|
require_paths:
|
326
312
|
- lib
|
@@ -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
|
-
|
339
|
-
|
340
|
-
signing_key:
|
324
|
+
rubygems_version: 3.3.26
|
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:
|