qalam_ims_lti 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Changelog.txt +0 -0
- data/LICENSE.txt +22 -0
- data/README.md +39 -0
- data/lib/ims/lis/context_type/handles.rb +10 -0
- data/lib/ims/lis/context_type/urns.rb +10 -0
- data/lib/ims/lis/roles/context/handles.rb +60 -0
- data/lib/ims/lis/roles/context/urns.rb +60 -0
- data/lib/ims/lis/roles/institution/handles.rb +22 -0
- data/lib/ims/lis/roles/institution/urns.rb +22 -0
- data/lib/ims/lis/roles/system/handles.rb +15 -0
- data/lib/ims/lis/roles/system/urns.rb +15 -0
- data/lib/ims/lis/statuses/simple_names.rb +9 -0
- data/lib/ims/lis/statuses/uris.rb +9 -0
- data/lib/ims/lis.rb +14 -0
- data/lib/ims/lti/converters/time_json_converter.rb +13 -0
- data/lib/ims/lti/converters.rb +5 -0
- data/lib/ims/lti/deprecated_role_checks.rb +52 -0
- data/lib/ims/lti/errors/authentication_failed_error.rb +11 -0
- data/lib/ims/lti/errors/invalid_lti_config_error.rb +4 -0
- data/lib/ims/lti/errors/invalid_tool_consumer_profile.rb +4 -0
- data/lib/ims/lti/errors/tool_proxy_registration_error.rb +15 -0
- data/lib/ims/lti/errors.rb +8 -0
- data/lib/ims/lti/extensions/canvas.rb +125 -0
- data/lib/ims/lti/extensions/content.rb +209 -0
- data/lib/ims/lti/extensions/outcome_data.rb +216 -0
- data/lib/ims/lti/extensions.rb +45 -0
- data/lib/ims/lti/launch_params.rb +166 -0
- data/lib/ims/lti/models/base_url_choice.rb +15 -0
- data/lib/ims/lti/models/base_url_selector.rb +5 -0
- data/lib/ims/lti/models/contact.rb +5 -0
- data/lib/ims/lti/models/content_item_container.rb +14 -0
- data/lib/ims/lti/models/content_item_placement.rb +20 -0
- data/lib/ims/lti/models/content_items/content_item.rb +32 -0
- data/lib/ims/lti/models/content_items/file_item.rb +15 -0
- data/lib/ims/lti/models/content_items/lti_link_item.rb +14 -0
- data/lib/ims/lti/models/content_items.rb +7 -0
- data/lib/ims/lti/models/icon_endpoint.rb +5 -0
- data/lib/ims/lti/models/icon_info.rb +6 -0
- data/lib/ims/lti/models/image.rb +7 -0
- data/lib/ims/lti/models/localized_name.rb +12 -0
- data/lib/ims/lti/models/localized_text.rb +12 -0
- data/lib/ims/lti/models/lti_model.rb +227 -0
- data/lib/ims/lti/models/membership_service/agent.rb +11 -0
- data/lib/ims/lti/models/membership_service/container.rb +11 -0
- data/lib/ims/lti/models/membership_service/context.rb +11 -0
- data/lib/ims/lti/models/membership_service/lis_membership_container.rb +13 -0
- data/lib/ims/lti/models/membership_service/lis_person.rb +14 -0
- data/lib/ims/lti/models/membership_service/membership.rb +14 -0
- data/lib/ims/lti/models/membership_service/organization.rb +14 -0
- data/lib/ims/lti/models/membership_service/page.rb +16 -0
- data/lib/ims/lti/models/membership_service/person.rb +13 -0
- data/lib/ims/lti/models/membership_service.rb +16 -0
- data/lib/ims/lti/models/message_handler.rb +14 -0
- data/lib/ims/lti/models/messages/basic_lti_launch_request.rb +24 -0
- data/lib/ims/lti/models/messages/content_item_selection.rb +32 -0
- data/lib/ims/lti/models/messages/content_item_selection_request.rb +26 -0
- data/lib/ims/lti/models/messages/message.rb +222 -0
- data/lib/ims/lti/models/messages/registration_request.rb +20 -0
- data/lib/ims/lti/models/messages/request_message.rb +12 -0
- data/lib/ims/lti/models/messages/tool_proxy_update_request.rb +15 -0
- data/lib/ims/lti/models/messages.rb +11 -0
- data/lib/ims/lti/models/parameter.rb +28 -0
- data/lib/ims/lti/models/product_family.rb +8 -0
- data/lib/ims/lti/models/product_info.rb +26 -0
- data/lib/ims/lti/models/product_instance.rb +10 -0
- data/lib/ims/lti/models/resource_handler.rb +22 -0
- data/lib/ims/lti/models/resource_type.rb +6 -0
- data/lib/ims/lti/models/rest_service.rb +30 -0
- data/lib/ims/lti/models/rest_service_profile.rb +15 -0
- data/lib/ims/lti/models/security_contract.rb +21 -0
- data/lib/ims/lti/models/security_profile.rb +10 -0
- data/lib/ims/lti/models/serializable.rb +12 -0
- data/lib/ims/lti/models/service_owner.rb +26 -0
- data/lib/ims/lti/models/service_provider.rb +11 -0
- data/lib/ims/lti/models/tool_consumer_profile.rb +45 -0
- data/lib/ims/lti/models/tool_profile.rb +35 -0
- data/lib/ims/lti/models/tool_proxy.rb +21 -0
- data/lib/ims/lti/models/tool_setting.rb +12 -0
- data/lib/ims/lti/models/tool_setting_container.rb +14 -0
- data/lib/ims/lti/models/vendor.rb +28 -0
- data/lib/ims/lti/models.rb +38 -0
- data/lib/ims/lti/outcome_request.rb +225 -0
- data/lib/ims/lti/outcome_response.rb +166 -0
- data/lib/ims/lti/request_validator.rb +56 -0
- data/lib/ims/lti/role_checks.rb +101 -0
- data/lib/ims/lti/serializers/base.rb +125 -0
- data/lib/ims/lti/serializers/membership_service/agent_serializer.rb +5 -0
- data/lib/ims/lti/serializers/membership_service/container_serializer.rb +6 -0
- data/lib/ims/lti/serializers/membership_service/context_serializer.rb +9 -0
- data/lib/ims/lti/serializers/membership_service/lis_membership_container_serializer.rb +9 -0
- data/lib/ims/lti/serializers/membership_service/lis_person_serializer.rb +12 -0
- data/lib/ims/lti/serializers/membership_service/membership_serializer.rb +7 -0
- data/lib/ims/lti/serializers/membership_service/organization_serializer.rb +8 -0
- data/lib/ims/lti/serializers/membership_service/page_serializer.rb +10 -0
- data/lib/ims/lti/serializers/membership_service/person_serializer.rb +8 -0
- data/lib/ims/lti/serializers/membership_service.rb +13 -0
- data/lib/ims/lti/serializers.rb +6 -0
- data/lib/ims/lti/services/authentication_service.rb +67 -0
- data/lib/ims/lti/services/message_authenticator.rb +80 -0
- data/lib/ims/lti/services/oauth2_client.rb +18 -0
- data/lib/ims/lti/services/tool_config.rb +223 -0
- data/lib/ims/lti/services/tool_consumer_profile_service.rb +16 -0
- data/lib/ims/lti/services/tool_proxy_registration_service.rb +84 -0
- data/lib/ims/lti/services/tool_proxy_validator.rb +182 -0
- data/lib/ims/lti/services.rb +11 -0
- data/lib/ims/lti/tool_base.rb +29 -0
- data/lib/ims/lti/tool_config.rb +231 -0
- data/lib/ims/lti/tool_consumer.rb +86 -0
- data/lib/ims/lti/tool_provider.rb +143 -0
- data/lib/ims/lti/version.rb +5 -0
- data/lib/ims/lti.rb +61 -0
- data/lib/ims.rb +4 -0
- metadata +379 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: db3b34151420c4a9527ad921f50c2dde950ceba6932641d5574797a2048fa884
|
4
|
+
data.tar.gz: '00001549f129c5702ed5a65efe41215076333b27abfdb3057cd935291e642644'
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9d94160ee5062445d50f72aac11f69806421b0cc727582b9d15c04fcabb1c0e27b54dcddf71c718a8585e41f5cba07c92a1fca4562865b8704d3def4bfa157b3
|
7
|
+
data.tar.gz: a13ed5905cad8ce70a0e433403c02d831129f3e8a674c037afc36da6df37d9bbae9d4ef41f6537645adef97d88e80a2c98f50a911db334ab24b604421306e276
|
data/Changelog.txt
ADDED
File without changes
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Instructure
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# IMS LTI
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/instructure/ims-lti.svg?branch=2.1.x)](https://travis-ci.org/instructure/ims-lti)
|
4
|
+
|
5
|
+
LTI ruby implementation
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
gem 'qalam_ims_lti'
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
### LTI 1.x
|
20
|
+
|
21
|
+
#### Validating Launches
|
22
|
+
|
23
|
+
You can use the classes in the IMS::LTI::Models::Messages module to valdiate Launches
|
24
|
+
|
25
|
+
For example in a rails app you would do the following
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
|
29
|
+
authenticator = IMS::LTI::Services::MessageAuthenticator.new(request.url, request.request_parameters, shared_secret)
|
30
|
+
|
31
|
+
#Check if the signature is valid
|
32
|
+
return false unless authenticator.valid_signature?
|
33
|
+
|
34
|
+
# check if `params['oauth_nonce']` has already been used
|
35
|
+
|
36
|
+
#check if the message is too old
|
37
|
+
return false if DateTime.strptime(request.request_parameters['oauth_timestamp'],'%s') < 5.minutes.ago
|
38
|
+
|
39
|
+
```
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module IMS::LIS
|
2
|
+
module ContextType
|
3
|
+
module URNs
|
4
|
+
CourseTemplate = "urn:lti:context-type:ims/lis/CourseTemplate"
|
5
|
+
CourseOffering = "urn:lti:context-type:ims/lis/CourseOffering"
|
6
|
+
CourseSection = "urn:lti:context-type:ims/lis/CourseSection"
|
7
|
+
Group = "urn:lti:context-type:ims/lis/Group"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module IMS::LIS
|
2
|
+
module Roles
|
3
|
+
module Context
|
4
|
+
module Handles
|
5
|
+
Learner = "Learner"
|
6
|
+
Learner_Learner = "Learner/Learner"
|
7
|
+
Learner_NonCreditLearner = "Learner/NonCreditLearner"
|
8
|
+
Learner_GuestLearner = "Learner/GuestLearner"
|
9
|
+
Learner_ExternalLearner = "Learner/ExternalLearner"
|
10
|
+
Learner_Instructor = "Learner/Instructor"
|
11
|
+
Instructor = "Instructor"
|
12
|
+
Instructor_PrimaryInstructor = "Instructor/PrimaryInstructor"
|
13
|
+
Instructor_Lecturer = "Instructor/Lecturer"
|
14
|
+
Instructor_GuestInstructor = "Instructor/GuestInstructor"
|
15
|
+
Instructor_ExternalInstructor = "Instructor/ExternalInstructor"
|
16
|
+
ContentDeveloper = "ContentDeveloper"
|
17
|
+
ContentDeveloper_ContentDeveloper = "ContentDeveloper/ContentDeveloper"
|
18
|
+
ContentDeveloper_Librarian = "ContentDeveloper/Librarian"
|
19
|
+
ContentDeveloper_ContentExpert = "ContentDeveloper/ContentExpert"
|
20
|
+
ContentDeveloper_ExternalContentExpert = "ContentDeveloper/ExternalContentExpert"
|
21
|
+
Member = "Member"
|
22
|
+
Member_Member = "Member/Member"
|
23
|
+
Manager = "Manager"
|
24
|
+
Manager_AreaManager = "Manager/AreaManager"
|
25
|
+
Manager_CourseCoordinator = "Manager/CourseCoordinator"
|
26
|
+
Manager_Observer = "Manager/Observer"
|
27
|
+
Manager_ExternalObserver = "Manager/ExternalObserver"
|
28
|
+
Mentor = "Mentor"
|
29
|
+
Mentor_Mentor = "Mentor/Mentor"
|
30
|
+
Mentor_Reviewer = "Mentor/Reviewer"
|
31
|
+
Mentor_Advisor = "Mentor/Advisor"
|
32
|
+
Mentor_Auditor = "Mentor/Auditor"
|
33
|
+
Mentor_Tutor = "Mentor/Tutor"
|
34
|
+
Mentor_LearningFacilitator = "Mentor/LearningFacilitator"
|
35
|
+
Mentor_ExternalMentor = "Mentor/ExternalMentor"
|
36
|
+
Mentor_ExternalReviewer = "Mentor/ExternalReviewer"
|
37
|
+
Mentor_ExternalAdvisor = "Mentor/ExternalAdvisor"
|
38
|
+
Mentor_ExternalAuditor = "Mentor/ExternalAuditor"
|
39
|
+
Mentor_ExternalTutor = "Mentor/ExternalTutor"
|
40
|
+
Mentor_ExternalLearningFacilitator = "Mentor/ExternalLearningFacilitator"
|
41
|
+
Administrator = "Administrator"
|
42
|
+
Administrator_Administrator = "Administrator/Administrator"
|
43
|
+
Administrator_Support = "Administrator/Support"
|
44
|
+
Administrator_Developer = "Administrator/Developer"
|
45
|
+
Administrator_SystemAdministrator = "Administrator/SystemAdministrator"
|
46
|
+
Administrator_ExternalSystemAdministrator = "Administrator/ExternalSystemAdministrator"
|
47
|
+
Administrator_ExternalDeveloper = "Administrator/ExternalDeveloper"
|
48
|
+
Administrator_ExternalSupport = "Administrator/ExternalSupport"
|
49
|
+
TeachingAssistant = "TeachingAssistant"
|
50
|
+
TeachingAssistant_TeachingAssistant = "TeachingAssistant/TeachingAssistant"
|
51
|
+
TeachingAssistant_TeachingAssistantSection = "TeachingAssistant/TeachingAssistantSection"
|
52
|
+
TeachingAssistant_TeachingAssistantSectionAssociation = "TeachingAssistant/TeachingAssistantSectionAssociation"
|
53
|
+
TeachingAssistant_TeachingAssistantOffering = "TeachingAssistant/TeachingAssistantOffering"
|
54
|
+
TeachingAssistant_TeachingAssistantTemplate = "TeachingAssistant/TeachingAssistantTemplate"
|
55
|
+
TeachingAssistant_TeachingAssistantGroup = "TeachingAssistant/TeachingAssistantGroup"
|
56
|
+
TeachingAssistant_Grader = "TeachingAssistant/Grader"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module IMS::LIS
|
2
|
+
module Roles
|
3
|
+
module Context
|
4
|
+
module URNs
|
5
|
+
Learner = "urn:lti:role:ims/lis/Learner"
|
6
|
+
Learner_Learner = "urn:lti:role:ims/lis/Learner/Learner"
|
7
|
+
Learner_NonCreditLearner = "urn:lti:role:ims/lis/Learner/NonCreditLearner"
|
8
|
+
Learner_GuestLearner = "urn:lti:role:ims/lis/Learner/GuestLearner"
|
9
|
+
Learner_ExternalLearner = "urn:lti:role:ims/lis/Learner/ExternalLearner"
|
10
|
+
Learner_Instructor = "urn:lti:role:ims/lis/Learner/Instructor"
|
11
|
+
Instructor = "urn:lti:role:ims/lis/Instructor"
|
12
|
+
Instructor_PrimaryInstructor = "urn:lti:role:ims/lis/Instructor/PrimaryInstructor"
|
13
|
+
Instructor_Lecturer = "urn:lti:role:ims/lis/Instructor/Lecturer"
|
14
|
+
Instructor_GuestInstructor = "urn:lti:role:ims/lis/Instructor/GuestInstructor"
|
15
|
+
Instructor_ExternalInstructor = "urn:lti:role:ims/lis/Instructor/ExternalInstructor"
|
16
|
+
ContentDeveloper = "urn:lti:role:ims/lis/ContentDeveloper"
|
17
|
+
ContentDeveloper_ContentDeveloper = "urn:lti:role:ims/lis/ContentDeveloper/ContentDeveloper"
|
18
|
+
ContentDeveloper_Librarian = "urn:lti:role:ims/lis/ContentDeveloper/Librarian"
|
19
|
+
ContentDeveloper_ContentExpert = "urn:lti:role:ims/lis/ContentDeveloper/ContentExpert"
|
20
|
+
ContentDeveloper_ExternalContentExpert = "urn:lti:role:ims/lis/ContentDeveloper/ExternalContentExpert"
|
21
|
+
Member = "urn:lti:role:ims/lis/Member"
|
22
|
+
Member_Member = "urn:lti:role:ims/lis/Member/Member"
|
23
|
+
Manager = "urn:lti:role:ims/lis/Manager"
|
24
|
+
Manager_AreaManager = "urn:lti:role:ims/lis/Manager/AreaManager"
|
25
|
+
Manager_CourseCoordinator = "urn:lti:role:ims/lis/Manager/CourseCoordinator"
|
26
|
+
Manager_Observer = "urn:lti:role:ims/lis/Manager/Observer"
|
27
|
+
Manager_ExternalObserver = "urn:lti:role:ims/lis/Manager/ExternalObserver"
|
28
|
+
Mentor = "urn:lti:role:ims/lis/Mentor"
|
29
|
+
Mentor_Mentor = "urn:lti:role:ims/lis/Mentor/Mentor"
|
30
|
+
Mentor_Reviewer = "urn:lti:role:ims/lis/Mentor/Reviewer"
|
31
|
+
Mentor_Advisor = "urn:lti:role:ims/lis/Mentor/Advisor"
|
32
|
+
Mentor_Auditor = "urn:lti:role:ims/lis/Mentor/Auditor"
|
33
|
+
Mentor_Tutor = "urn:lti:role:ims/lis/Mentor/Tutor"
|
34
|
+
Mentor_LearningFacilitator = "urn:lti:role:ims/lis/Mentor/LearningFacilitator"
|
35
|
+
Mentor_ExternalMentor = "urn:lti:role:ims/lis/Mentor/ExternalMentor"
|
36
|
+
Mentor_ExternalReviewer = "urn:lti:role:ims/lis/Mentor/ExternalReviewer"
|
37
|
+
Mentor_ExternalAdvisor = "urn:lti:role:ims/lis/Mentor/ExternalAdvisor"
|
38
|
+
Mentor_ExternalAuditor = "urn:lti:role:ims/lis/Mentor/ExternalAuditor"
|
39
|
+
Mentor_ExternalTutor = "urn:lti:role:ims/lis/Mentor/ExternalTutor"
|
40
|
+
Mentor_ExternalLearningFacilitator = "urn:lti:role:ims/lis/Mentor/ExternalLearningFacilitator"
|
41
|
+
Administrator = "urn:lti:role:ims/lis/Administrator"
|
42
|
+
Administrator_Administrator = "urn:lti:role:ims/lis/Administrator/Administrator"
|
43
|
+
Administrator_Support = "urn:lti:role:ims/lis/Administrator/Support"
|
44
|
+
Administrator_Developer = "urn:lti:role:ims/lis/Administrator/Developer"
|
45
|
+
Administrator_SystemAdministrator = "urn:lti:role:ims/lis/Administrator/SystemAdministrator"
|
46
|
+
Administrator_ExternalSystemAdministrator = "urn:lti:role:ims/lis/Administrator/ExternalSystemAdministrator"
|
47
|
+
Administrator_ExternalDeveloper = "urn:lti:role:ims/lis/Administrator/ExternalDeveloper"
|
48
|
+
Administrator_ExternalSupport = "urn:lti:role:ims/lis/Administrator/ExternalSupport"
|
49
|
+
TeachingAssistant = "urn:lti:role:ims/lis/TeachingAssistant"
|
50
|
+
TeachingAssistant_TeachingAssistant = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistant"
|
51
|
+
TeachingAssistant_TeachingAssistantSection = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantSection"
|
52
|
+
TeachingAssistant_TeachingAssistantSectionAssociation = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantSectionAssociation"
|
53
|
+
TeachingAssistant_TeachingAssistantOffering = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantOffering"
|
54
|
+
TeachingAssistant_TeachingAssistantTemplate = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantTemplate"
|
55
|
+
TeachingAssistant_TeachingAssistantGroup = "urn:lti:role:ims/lis/TeachingAssistant/TeachingAssistantGroup"
|
56
|
+
TeachingAssistant_Grader = "urn:lti:role:ims/lis/TeachingAssistant/Grader"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module IMS::LIS
|
2
|
+
module Roles
|
3
|
+
module Institution
|
4
|
+
module Handles
|
5
|
+
Student = "Student"
|
6
|
+
Faculty = "Faculty"
|
7
|
+
Member = "Member"
|
8
|
+
Learner = "Learner"
|
9
|
+
Instructor = "Instructor"
|
10
|
+
Mentor = "Mentor"
|
11
|
+
Staff = "Staff"
|
12
|
+
Alumni = "Alumni"
|
13
|
+
ProspectiveStudent = "ProspectiveStudent"
|
14
|
+
Guest = "Guest"
|
15
|
+
Other = "Other"
|
16
|
+
Administrator = "Administrator"
|
17
|
+
Observer = "Observer"
|
18
|
+
None = "None"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module IMS::LIS
|
2
|
+
module Roles
|
3
|
+
module Institution
|
4
|
+
module URNs
|
5
|
+
Student = "urn:lti:instrole:ims/lis/Student"
|
6
|
+
Faculty = "urn:lti:instrole:ims/lis/Faculty"
|
7
|
+
Member = "urn:lti:instrole:ims/lis/Member"
|
8
|
+
Learner = "urn:lti:instrole:ims/lis/Learner"
|
9
|
+
Instructor = "urn:lti:instrole:ims/lis/Instructor"
|
10
|
+
Mentor = "urn:lti:instrole:ims/lis/Mentor"
|
11
|
+
Staff = "urn:lti:instrole:ims/lis/Staff"
|
12
|
+
Alumni = "urn:lti:instrole:ims/lis/Alumni"
|
13
|
+
ProspectiveStudent = "urn:lti:instrole:ims/lis/ProspectiveStudent"
|
14
|
+
Guest = "urn:lti:instrole:ims/lis/Guest"
|
15
|
+
Other = "urn:lti:instrole:ims/lis/Other"
|
16
|
+
Administrator = "urn:lti:instrole:ims/lis/Administrator"
|
17
|
+
Observer = "urn:lti:instrole:ims/lis/Observer"
|
18
|
+
None = "urn:lti:instrole:ims/lis/None"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module IMS::LIS
|
2
|
+
module Roles
|
3
|
+
module System
|
4
|
+
module Handles
|
5
|
+
SysAdmin = "SysAdmin"
|
6
|
+
SysSupport = "SysSupport"
|
7
|
+
Creator = "Creator"
|
8
|
+
AccountAdmin = "AccountAdmin"
|
9
|
+
User = "User"
|
10
|
+
Administrator = "Administrator"
|
11
|
+
None = "None"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module IMS::LIS
|
2
|
+
module Roles
|
3
|
+
module System
|
4
|
+
module URNs
|
5
|
+
SysAdmin = "urn:lti:sysrole:ims/lis/SysAdmin"
|
6
|
+
SysSupport = "urn:lti:sysrole:ims/lis/SysSupport"
|
7
|
+
Creator = "urn:lti:sysrole:ims/lis/Creator"
|
8
|
+
AccountAdmin = "urn:lti:sysrole:ims/lis/AccountAdmin"
|
9
|
+
User = "urn:lti:sysrole:ims/lis/User"
|
10
|
+
Administrator = "urn:lti:sysrole:ims/lis/Administrator"
|
11
|
+
None = "urn:lti:sysrole:ims/lis/None"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
module IMS::LIS
|
2
|
+
module Statuses
|
3
|
+
module URIs
|
4
|
+
Active = 'http://purl.imsglobal.org/vocab/lis/v2/status#Active'
|
5
|
+
Deleted = 'http://purl.imsglobal.org/vocab/lis/v2/status#Deleted'
|
6
|
+
Inactive = 'http://purl.imsglobal.org/vocab/lis/v2/status#Inactive'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
data/lib/ims/lis.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
module IMS
|
2
|
+
module LIS
|
3
|
+
require_relative 'lis/context_type/handles'
|
4
|
+
require_relative 'lis/context_type/urns'
|
5
|
+
require_relative 'lis/roles/institution/handles'
|
6
|
+
require_relative 'lis/roles/institution/urns'
|
7
|
+
require_relative 'lis/roles/system/handles'
|
8
|
+
require_relative 'lis/roles/system/urns'
|
9
|
+
require_relative 'lis/roles/context/handles'
|
10
|
+
require_relative 'lis/roles/context/urns'
|
11
|
+
require_relative 'lis/statuses/simple_names'
|
12
|
+
require_relative 'lis/statuses/uris'
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# These are here for backwards-compatibility
|
2
|
+
# But they are deprecated and the new ones in
|
3
|
+
# role_checks.rb should be used
|
4
|
+
module IMS::LTI
|
5
|
+
module DeprecatedRoleChecks
|
6
|
+
# Check whether the Launch Parameters have a role
|
7
|
+
def has_role?(role)
|
8
|
+
role = role.downcase
|
9
|
+
@roles && @roles.any?{|r| r.downcase.index(role)}
|
10
|
+
end
|
11
|
+
|
12
|
+
# Convenience method for checking if the user has 'learner' or 'student' role
|
13
|
+
def student?
|
14
|
+
has_role?('learner') || has_role?('student')
|
15
|
+
end
|
16
|
+
|
17
|
+
# Convenience method for checking if the user has 'instructor' or 'faculty' or 'staff' role
|
18
|
+
def instructor?
|
19
|
+
has_role?('instructor') || has_role?('faculty') || has_role?('staff')
|
20
|
+
end
|
21
|
+
|
22
|
+
# Convenience method for checking if the user has 'contentdeveloper' role
|
23
|
+
def content_developer?
|
24
|
+
has_role?('ContentDeveloper')
|
25
|
+
end
|
26
|
+
|
27
|
+
# Convenience method for checking if the user has 'Member' role
|
28
|
+
def member?
|
29
|
+
has_role?('Member')
|
30
|
+
end
|
31
|
+
|
32
|
+
# Convenience method for checking if the user has 'Manager' role
|
33
|
+
def manager?
|
34
|
+
has_role?('Manager')
|
35
|
+
end
|
36
|
+
|
37
|
+
# Convenience method for checking if the user has 'Mentor' role
|
38
|
+
def mentor?
|
39
|
+
has_role?('Mentor')
|
40
|
+
end
|
41
|
+
|
42
|
+
# Convenience method for checking if the user has 'administrator' role
|
43
|
+
def admin?
|
44
|
+
has_role?('administrator')
|
45
|
+
end
|
46
|
+
|
47
|
+
# Convenience method for checking if the user has 'TeachingAssistant' role
|
48
|
+
def ta?
|
49
|
+
has_role?('TeachingAssistant')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module IMS::LTI::Errors
|
2
|
+
class ToolProxyRegistrationError < StandardError
|
3
|
+
attr_reader :response_status, :response_body
|
4
|
+
|
5
|
+
def initialize(response_status, response_body = nil)
|
6
|
+
@response_status = response_status
|
7
|
+
@response_body = response_body
|
8
|
+
super <<-EOF
|
9
|
+
Unexpected response for tool proxy registration.
|
10
|
+
HTTP Response Status: #{response_status}
|
11
|
+
HTTP Response Body: #{response_body}
|
12
|
+
EOF
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module IMS::LTI
|
2
|
+
module Errors
|
3
|
+
require_relative 'errors/invalid_lti_config_error'
|
4
|
+
require_relative 'errors/tool_proxy_registration_error'
|
5
|
+
require_relative 'errors/invalid_tool_consumer_profile'
|
6
|
+
require_relative 'errors/authentication_failed_error'
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
module IMS::LTI
|
2
|
+
module Extensions
|
3
|
+
# Module that adds Canvas specific LTI extensions
|
4
|
+
#
|
5
|
+
# It adds convenience methods for generating common canvas use case LTI configurations
|
6
|
+
#
|
7
|
+
# == Usage
|
8
|
+
# To generate an XML configuration:
|
9
|
+
#
|
10
|
+
# # Create a config object and set some options
|
11
|
+
# tc = IMS::LTI::ToolConfig.new(:title => "Example Sinatra Tool Provider", :launch_url => url)
|
12
|
+
# tc.description = "This example LTI Tool Provider supports LIS Outcome pass-back."
|
13
|
+
#
|
14
|
+
# # Extend the Canvas Tool config and add canvas related extensions
|
15
|
+
# tc.extend IMS::LTI::Extensions::Canvas::ToolConfig
|
16
|
+
# tc.homework_submission! 'http://someplace.com/homework', 'Find Homework'
|
17
|
+
#
|
18
|
+
# # generate the XML
|
19
|
+
# tc.to_xml
|
20
|
+
#
|
21
|
+
# Or to create a config object from an XML String:
|
22
|
+
#
|
23
|
+
# tc = IMS::LTI::ToolConfig.create_from_xml(xml)
|
24
|
+
|
25
|
+
module Canvas
|
26
|
+
module ToolConfig
|
27
|
+
PLATFORM = 'canvas.instructure.com'
|
28
|
+
|
29
|
+
# Canvas extension defaults
|
30
|
+
# These properties will cascade down to any options that are configured
|
31
|
+
def set_canvas_ext_param(key, value)
|
32
|
+
set_ext_param(PLATFORM, key, value)
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_canvas_param(param_key)
|
36
|
+
get_ext_param PLATFORM, param_key
|
37
|
+
end
|
38
|
+
|
39
|
+
def canvas_privacy_public!()
|
40
|
+
set_canvas_ext_param(:privacy_level, 'public')
|
41
|
+
end
|
42
|
+
|
43
|
+
def canvas_privacy_name_only!()
|
44
|
+
set_canvas_ext_param(:privacy_level, 'name_only')
|
45
|
+
end
|
46
|
+
|
47
|
+
def canvas_privacy_anonymous!()
|
48
|
+
set_canvas_ext_param(:privacy_level, 'anonymous')
|
49
|
+
end
|
50
|
+
|
51
|
+
def canvas_domain!(domain)
|
52
|
+
set_canvas_ext_param(:domain, domain)
|
53
|
+
end
|
54
|
+
|
55
|
+
def canvas_text!(text)
|
56
|
+
set_canvas_ext_param(:text, text)
|
57
|
+
end
|
58
|
+
|
59
|
+
def canvas_icon_url!(icon_url)
|
60
|
+
set_canvas_ext_param(:icon_url, icon_url)
|
61
|
+
end
|
62
|
+
|
63
|
+
def canvas_tool_id!(tool_id)
|
64
|
+
set_canvas_ext_param(:tool_id, tool_id)
|
65
|
+
end
|
66
|
+
|
67
|
+
def canvas_selector_dimensions!(width, height)
|
68
|
+
set_canvas_ext_param(:selection_width, width)
|
69
|
+
set_canvas_ext_param(:selection_height, height)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Canvas options
|
73
|
+
# These configure canvas to expose the tool in various locations. Any properties that are set
|
74
|
+
# at this level will override the defaults for this launch of the tool
|
75
|
+
|
76
|
+
# Enables homework submissions via the tool
|
77
|
+
# Valid properties are url, text, selection_width, selection_height, enabled
|
78
|
+
def canvas_homework_submission!(params = {})
|
79
|
+
set_canvas_ext_param(:homework_submission, params)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Adds the tool to canvas' rich text editor
|
83
|
+
# Valid properties are url, icon_url, text, selection_width, selection_height, enabled
|
84
|
+
def canvas_editor_button!(params = {})
|
85
|
+
set_canvas_ext_param(:editor_button, params)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Adds the tool to canvas' resource selector
|
89
|
+
# Valid properties are url, text, selection_width, selection_height, enabled
|
90
|
+
def canvas_resource_selection!(params = {})
|
91
|
+
set_canvas_ext_param(:resource_selection, params)
|
92
|
+
end
|
93
|
+
|
94
|
+
# Adds the tool to account level navigation in canvas
|
95
|
+
# Valid properties are url, text, enabled
|
96
|
+
def canvas_account_navigation!(params = {})
|
97
|
+
set_canvas_ext_param(:account_navigation, params)
|
98
|
+
end
|
99
|
+
|
100
|
+
# Adds the tool to course level navigation in canvas
|
101
|
+
# Valid properties are url, text, visibility, default, enabled
|
102
|
+
# Visibility describes who will see the navigation element. Possible values are "admins", "members", and nil
|
103
|
+
# Default determines if it is on or off by default. Possible values are "admins", "members", and nil
|
104
|
+
def canvas_course_navigation!(params = {})
|
105
|
+
set_canvas_ext_param(:course_navigation, params)
|
106
|
+
end
|
107
|
+
|
108
|
+
# Adds the tool to user level navigation in canvas
|
109
|
+
# Valid properties are url, text, enabled
|
110
|
+
def canvas_user_navigation!(params = {})
|
111
|
+
set_canvas_ext_param(:user_navigation, params)
|
112
|
+
end
|
113
|
+
|
114
|
+
def canvas_course_home_sub_navigation!(params = {})
|
115
|
+
set_canvas_ext_param(:course_home_sub_navigation, params)
|
116
|
+
end
|
117
|
+
# Adds canvas environment configurations options
|
118
|
+
# Valid properties are launch_url, domain, test_launch_url, test_domain, beta_launch_url, beta_domain
|
119
|
+
def canvas_environments!(params = {})
|
120
|
+
set_canvas_ext_param(:environments, params)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|