ims-lti 2.0.0.beta.29 → 2.0.0.beta.30
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 +4 -4
- data/lib/ims/lti/errors/invalid_tool_consumer_profile.rb +4 -0
- data/lib/ims/lti/errors.rb +1 -0
- data/lib/ims/lti/models/lti_model.rb +1 -0
- data/lib/ims/lti/models/service_owner.rb +2 -0
- data/lib/ims/lti/services/tool_proxy_validator.rb +135 -0
- data/lib/ims/lti/services.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c2af2a10db5b2ed1ba1c946bdbfb7b07bd4d733
|
4
|
+
data.tar.gz: 00b8c3301b940f227c5e694a93a9e2ac0a906fd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b9e9087df014ed6cf2b10572ae24401339d08ab9c2d57b7957df65b90c49ecf51885e29a9839aee0f7236fc0fc67c108b9a88506e97994f5d3e6c40006c6eb2
|
7
|
+
data.tar.gz: 14de49fcd0fd56c4fb1c29e7fdd2ba12315ba4303e4ca0b37a9fc97d1b42c14734759a556ed67f3033cbf8a0de6bd6906d9d58ce9abc04a295cdb88a43c18cee
|
data/lib/ims/lti/errors.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
module IMS::LTI::Models
|
2
2
|
class ServiceOwner < LTIModel
|
3
|
+
add_attribute :id, json_key:'@id'
|
3
4
|
add_attribute :description, relation: 'IMS::LTI::Models::LocalizedText'
|
4
5
|
add_attribute :timestamp, json_converter:'IMS::LTI::Converters::TimeJSONConverter'
|
5
6
|
add_attribute :service_owner_name, relation: 'IMS::LTI::Models::LocalizedName'
|
7
|
+
add_attribute :support, relation:'IMS::LTI::Models::Contact'
|
6
8
|
|
7
9
|
def create_service_owner_name(name, key = 'service_owner.name')
|
8
10
|
@service_owner_name = LocalizedName.new(name, key)
|
@@ -0,0 +1,135 @@
|
|
1
|
+
module IMS::LTI::Services
|
2
|
+
class ToolProxyValidator
|
3
|
+
|
4
|
+
attr_reader :tool_proxy
|
5
|
+
|
6
|
+
def initialize(tool_proxy)
|
7
|
+
@tool_proxy = tool_proxy
|
8
|
+
end
|
9
|
+
|
10
|
+
def tool_consumer_profile
|
11
|
+
return @tool_consumer_profile if @tool_consumer_profile
|
12
|
+
|
13
|
+
connection = Faraday.new
|
14
|
+
response = connection.get(tool_proxy.tool_consumer_profile)
|
15
|
+
@tool_consumer_profile = IMS::LTI::Models::ToolConsumerProfile.new.from_json(response.body)
|
16
|
+
@tool_consumer_profile
|
17
|
+
end
|
18
|
+
|
19
|
+
def tool_consumer_profile=(tcp)
|
20
|
+
tcp = IMS::LTI::Models::ToolConsumerProfile.from_json(tcp) unless tcp.is_a?(IMS::LTI::Models::ToolConsumerProfile)
|
21
|
+
if tool_proxy.tool_consumer_profile != tcp.id
|
22
|
+
raise IMS::LTI::Errors::InvalidToolConsumerProfile, "Tool Consumer Profile @id doesn't match the Tool Proxy"
|
23
|
+
end
|
24
|
+
@tool_consumer_profile = tcp
|
25
|
+
end
|
26
|
+
|
27
|
+
def capabilities_offered
|
28
|
+
tool_consumer_profile.capabilities_offered
|
29
|
+
end
|
30
|
+
|
31
|
+
def invalid_services
|
32
|
+
services = tool_proxy.security_contract.services
|
33
|
+
services_used = services.each_with_object({}) do |s, hash|
|
34
|
+
hash[s.service.split('#').last.strip] = s.actions
|
35
|
+
hash
|
36
|
+
end
|
37
|
+
services_offered = tool_consumer_profile.services_offered.each_with_object({}) do |s, hash|
|
38
|
+
hash[s.id.split(':').last.split('#').last.strip] = s.actions
|
39
|
+
hash
|
40
|
+
end
|
41
|
+
invalid_services = services_used.each_with_object({}) do |(id, actions), hash|
|
42
|
+
if services_offered.keys.include?(id)
|
43
|
+
actions_used = normalize_strings(*services_offered[id])
|
44
|
+
actions_offered = normalize_strings(*actions)
|
45
|
+
invalid_actions = actions_offered - actions_used
|
46
|
+
hash[id] = invalid_actions unless invalid_actions.empty?
|
47
|
+
else
|
48
|
+
hash[id] = actions
|
49
|
+
end
|
50
|
+
hash
|
51
|
+
end
|
52
|
+
invalid_services
|
53
|
+
end
|
54
|
+
|
55
|
+
def invalid_message_handlers
|
56
|
+
ret_val = {}
|
57
|
+
tool_profile = tool_proxy.tool_profile
|
58
|
+
#singleton_message_handlers = tool_profile.messages
|
59
|
+
invalid_rhs = validate_resource_handlers(tool_profile.resource_handlers)
|
60
|
+
ret_val[:resource_handlers] = invalid_rhs unless invalid_rhs.empty?
|
61
|
+
invalid_singleton_message_handlers = validate_singleton_message_handlers(tool_profile.messages)
|
62
|
+
ret_val[:singleton_message_handlers] = invalid_singleton_message_handlers unless invalid_singleton_message_handlers.empty?
|
63
|
+
ret_val
|
64
|
+
end
|
65
|
+
|
66
|
+
def valid?
|
67
|
+
invalid_services.empty? && invalid_message_handlers.empty?
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def normalize_strings(string, *strings)
|
74
|
+
strings.push(string)
|
75
|
+
normalized = strings.map { |s| s.upcase.strip }
|
76
|
+
normalized
|
77
|
+
end
|
78
|
+
|
79
|
+
def validate_message_handlers(message_handlers)
|
80
|
+
message_handlers.each_with_object([]) do |mh, array|
|
81
|
+
invalid_capabilities = mh.enabled_capabilities - capabilities_offered
|
82
|
+
invalid_parameters = validate_parameters(mh.parameters)
|
83
|
+
if !invalid_parameters.empty? || !invalid_capabilities.empty?
|
84
|
+
hash = {message_type: mh.message_type, }
|
85
|
+
hash[:invalid_capabilities] = invalid_capabilities unless invalid_capabilities.empty?
|
86
|
+
hash[:invalid_parameters] = invalid_parameters unless invalid_parameters.empty?
|
87
|
+
array << hash
|
88
|
+
end
|
89
|
+
array
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def validate_parameters(parameters)
|
94
|
+
parameters.each_with_object([]) do |p, array|
|
95
|
+
if !p.fixed? && !capabilities_offered.include?(p.variable)
|
96
|
+
array << {name: p.name, variable: p.variable}
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def validate_message_types(message_handlers)
|
102
|
+
message_handlers.each_with_object([]) do |mh, array|
|
103
|
+
array << mh.message_type unless capabilities_offered.include?(mh.message_type)
|
104
|
+
array
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def validate_resource_handlers(resource_handlers)
|
109
|
+
resource_handlers.each_with_object([]) do |rh, array|
|
110
|
+
invalid_message_types = validate_message_types(rh.messages)
|
111
|
+
invalid_mhs = validate_message_handlers(rh.messages)
|
112
|
+
if !invalid_mhs.empty? || !invalid_message_types.empty?
|
113
|
+
hash = {
|
114
|
+
code: rh.resource_type.code,
|
115
|
+
}
|
116
|
+
hash[:messages] = invalid_mhs unless invalid_mhs.empty?
|
117
|
+
hash[:invalid_message_types] = invalid_message_types unless invalid_message_types.empty?
|
118
|
+
array << hash
|
119
|
+
end
|
120
|
+
array
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def validate_singleton_message_handlers(message_handlers)
|
125
|
+
hash = {}
|
126
|
+
invalid_messages = validate_message_handlers(message_handlers)
|
127
|
+
invalid_message_types = validate_message_types(message_handlers)
|
128
|
+
hash[:messages] = invalid_messages unless invalid_messages.empty?
|
129
|
+
hash[:invalid_message_types] = invalid_message_types unless invalid_message_types.empty?
|
130
|
+
hash
|
131
|
+
end
|
132
|
+
|
133
|
+
|
134
|
+
end
|
135
|
+
end
|
data/lib/ims/lti/services.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.0.0.beta.
|
4
|
+
version: 2.0.0.beta.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Instructure
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simple_oauth
|
@@ -151,6 +151,7 @@ files:
|
|
151
151
|
- lib/ims/lti/converters/time_json_converter.rb
|
152
152
|
- lib/ims/lti/errors.rb
|
153
153
|
- lib/ims/lti/errors/invalid_lti_config_error.rb
|
154
|
+
- lib/ims/lti/errors/invalid_tool_consumer_profile.rb
|
154
155
|
- lib/ims/lti/errors/tool_proxy_registration_error.rb
|
155
156
|
- lib/ims/lti/models.rb
|
156
157
|
- lib/ims/lti/models/base_url_choice.rb
|
@@ -197,6 +198,7 @@ files:
|
|
197
198
|
- lib/ims/lti/services.rb
|
198
199
|
- lib/ims/lti/services/tool_config.rb
|
199
200
|
- lib/ims/lti/services/tool_proxy_registration_service.rb
|
201
|
+
- lib/ims/lti/services/tool_proxy_validator.rb
|
200
202
|
- lib/ims/lti/version.rb
|
201
203
|
homepage: http://github.com/instructure/ims-lti
|
202
204
|
licenses:
|