ims-lti 2.0.0.beta.41 → 2.1.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fe29bdb1f765a0a3bf91d6268d275f3f84a5d402
4
- data.tar.gz: 8051d34738fcec8d0a10902492fa8f0621ab0e82
3
+ metadata.gz: 29e9c5e5a1a93a572ef8c13b58070c2a346cc9b0
4
+ data.tar.gz: b8e314b9ce9a1be4370c2bc664636093c774aa3d
5
5
  SHA512:
6
- metadata.gz: bb0eaa36739ed561812ebb7dd2d715a39ee3bb4e19d6e3bf886ee572ab22502d50898e06784b34580766678e9d6da9c9431eecf522a6f94b8fb405eb2c367cd9
7
- data.tar.gz: 8848464d689ddf0267561efc1f6c31c4bb6107018833697dc27d72b0b76cdb4c7e4f164286b165f5916d70e7db0dc516288282e45643ab2166907f7e6177c55f
6
+ metadata.gz: c1395db97d9522e4db6f47abcc4f78898be410ff37d0254162cbb4c3012c16b02a94961adc57233c6d6310dbd9ee47cbd2cd6cf6b2439d18a0fbc9385bb43407
7
+ data.tar.gz: 6e50211103d46cad1ea94365c1e34848cb54b2bb97768807c959fda2270c02b929b45cc307781c4126630d9c4710d3b2860859d4475ba74bf5981bbacb8ff66f
@@ -1,7 +1,7 @@
1
1
  module IMS::LTI::Models::Messages
2
2
  class Message
3
3
 
4
- attr_reader :simple_oauth_header
4
+ attr_reader :message_authenticator
5
5
 
6
6
  class << self
7
7
 
@@ -126,23 +126,9 @@ module IMS::LTI::Models::Messages
126
126
  end
127
127
 
128
128
  def signed_post_params(secret)
129
- params = post_params
130
- @simple_oauth_header = SimpleOAuth::Header.new(:post, launch_url, params, consumer_key: oauth_consumer_key, consumer_secret: secret, callback: 'about:blank')
131
- @simple_oauth_header.signed_attributes.merge(params)
132
- end
133
-
134
- def valid_signature?(secret)
135
- params = collect_attributes(OAUTH_KEYS)
136
- params = OAUTH_KEYS.inject({}) do |hash, k|
137
- value = instance_variable_get("@#{k}")
138
- hash[k] = value if value
139
- hash
140
- end
141
- options, parsed_params = parse_params(params.merge(post_params))
142
- signature = parsed_params.delete(:oauth_signature)
143
- consumer_key = oauth_consumer_key
144
- @simple_oauth_header = SimpleOAuth::Header.new(:post, launch_url, parsed_params, options.merge({consumer_key: consumer_key, consumer_secret: secret}))
145
- @simple_oauth_header.valid?(signature: signature)
129
+ message_params = { oauth_consumer_key: oauth_consumer_key}.merge(post_params)
130
+ @message_authenticator = IMS::LTI::Services::MessageAuthenticator.new(launch_url, message_params, secret )
131
+ @message_authenticator.signed_params
146
132
  end
147
133
 
148
134
  def parameters
@@ -181,18 +167,6 @@ module IMS::LTI::Models::Messages
181
167
 
182
168
  private
183
169
 
184
- def parse_params(params)
185
- params.inject([{}, {}]) do |array, (k, v)|
186
- attr = k.to_s.sub('oauth_', '').to_sym
187
- if SimpleOAuth::Header::ATTRIBUTE_KEYS.include?(attr)
188
- array[0][attr] = v
189
- else
190
- array[1][k] = v
191
- end
192
- array
193
- end
194
- end
195
-
196
170
  def collect_attributes(attributes)
197
171
  attributes.inject({}) do |h, param|
198
172
  value = instance_variable_get("@#{param}")
@@ -3,5 +3,6 @@ module IMS::LTI
3
3
  require_relative 'services/tool_proxy_registration_service'
4
4
  require_relative 'services/tool_config'
5
5
  require_relative 'services/tool_proxy_validator'
6
+ require_relative 'services/message_authenticator'
6
7
  end
7
8
  end
@@ -0,0 +1,67 @@
1
+ module IMS::LTI::Services
2
+ class MessageAuthenticator
3
+
4
+ attr_reader :launch_url, :params, :message, :simple_oauth_header, :signature, :consumer_key
5
+
6
+ def initialize(launch_url, params, secret)
7
+ @launch_url = launch_url
8
+ @params = params
9
+ @consumer_key = params[:oauth_consumer_key]
10
+ @options, @parsed_params = parse_params(params)
11
+ @signature = @parsed_params.delete(:oauth_signature)
12
+ @secret = secret
13
+ end
14
+
15
+
16
+ def valid_signature?
17
+ simple_oauth_header.valid?(signature: signature)
18
+ end
19
+
20
+ def message
21
+ @message ||= begin
22
+ m = IMS::LTI::Models::Messages::Message.generate(params)
23
+ m.launch_url = launch_url
24
+ m
25
+ end
26
+ end
27
+
28
+ def simple_oauth_header
29
+ @simple_oauth_header ||= begin
30
+ @simple_oauth_header = SimpleOAuth::Header.new(
31
+ :post, launch_url,
32
+ @parsed_params,
33
+ @options.merge(
34
+ {
35
+ consumer_key: consumer_key,
36
+ consumer_secret: @secret
37
+ }
38
+ )
39
+ )
40
+ @simple_oauth_header
41
+ end
42
+ end
43
+
44
+ def base_string
45
+ simple_oauth_header.send(:signature_base)
46
+ end
47
+
48
+ def signed_params
49
+ simple_oauth_header.signed_attributes.merge(params)
50
+ end
51
+
52
+
53
+ private
54
+ def parse_params(params)
55
+ params.inject([{}, {}]) do |array, (k, v)|
56
+ attr = k.to_s.sub('oauth_', '').to_sym
57
+ if SimpleOAuth::Header::ATTRIBUTE_KEYS.include?(attr)
58
+ array[0][attr] = v
59
+ else
60
+ array[1][k] = v
61
+ end
62
+ array
63
+ end
64
+ end
65
+
66
+ end
67
+ end
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.0.0.beta.41
4
+ version: 2.1.0.beta.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Instructure
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-13 00:00:00.000000000 Z
11
+ date: 2016-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simple_oauth
@@ -258,6 +258,7 @@ files:
258
258
  - lib/ims/lti/serializers/membership_service/page_serializer.rb
259
259
  - lib/ims/lti/serializers/membership_service/person_serializer.rb
260
260
  - lib/ims/lti/services.rb
261
+ - lib/ims/lti/services/message_authenticator.rb
261
262
  - lib/ims/lti/services/tool_config.rb
262
263
  - lib/ims/lti/services/tool_proxy_registration_service.rb
263
264
  - lib/ims/lti/services/tool_proxy_validator.rb