omniauth-lti 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in omniauth-lti.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,40 @@
1
+ OmniAuth LTI
2
+ ============
3
+
4
+ The OmniAuth LTI gem provides a way for applications to authenticate users using LTI 1.1 specification.
5
+
6
+ It relies on [ims-lti gem][] for validating LTI data.
7
+
8
+ Usage
9
+ =====
10
+
11
+ Add the provider to your OmniAuth stack, giving the tool_consumer credentials:
12
+
13
+ Rails.application.config.middleware.use OmniAuth::Builder do
14
+ provider :lti, :oauth_credentials => {:test => 'secret'}
15
+ end
16
+
17
+ Include Omniauth::Lti::Context in your application_controller:
18
+
19
+ class ApplicationController < ActionController::Base
20
+ ...
21
+ include Omniauth::Lti::Context
22
+ ...
23
+ end
24
+
25
+ When you create the session in your sessions\_controller, call to save_lti_context for saving LTI context through all the application
26
+
27
+ For accessing the context anywhere in your application, just call the helper method lti\_tool\_provider.
28
+ For instance, to show the title of the resource that call your application just put in your haml view:
29
+
30
+ =lti_tool_provider.resource_link_title
31
+
32
+ You can find an example web application in [omniauth-lti-example-webapp][]
33
+
34
+ TODO
35
+ =====
36
+
37
+ Add support for outcomes
38
+
39
+ [ims-lti gem]: https://github.com/instructure/ims-lti
40
+ [omniauth-lti-example-webapp]: https://github.com/xaviaracil/omniauth-lti-example
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,9 @@
1
+ require 'omniauth'
2
+ require 'ims/lti'
3
+ require 'oauth/request_proxy/rack_request'
4
+
5
+ module OmniAuth
6
+ module Strategies
7
+ autoload :Lti, 'omniauth/strategies/lti'
8
+ end
9
+ end
@@ -0,0 +1,58 @@
1
+ module OmniAuth
2
+ module Strategies
3
+ class Lti
4
+ include OmniAuth::Strategy
5
+
6
+ # Hash for storing your Consumer Tools credentials, whether:
7
+ # - the key is the consumer_key
8
+ # - the value is the comsumer_secret
9
+ option :oauth_credentials, {}
10
+
11
+ # Defaul username for users when LTI context doesn't provide a name
12
+ option :default_user_name, 'User'
13
+
14
+ def callback_phase
15
+ # validate request
16
+ return fail!(:invalid_credentials) unless valid_lti?
17
+ #save the launch parameters for use in later request
18
+ env['lti.launch_params'] = @tp.to_params
19
+ super
20
+ end
21
+
22
+ # define the UID
23
+ uid { @tp.user_id }
24
+
25
+ # define the hash of info about user
26
+ info do
27
+ {
28
+ :name => @tp.username(options.default_user_name),
29
+ :email => @tp.lis_person_contact_email_primary,
30
+ :first_name => @tp.lis_person_name_given,
31
+ :last_name => @tp.lis_person_name_family,
32
+ :image => @tp.user_image
33
+ }
34
+ end
35
+
36
+ # define the hash of credentials
37
+ credentials do
38
+ {
39
+ :token => @tp.consumer_key,
40
+ :secret => @tp.consumer_secret
41
+ }
42
+ end
43
+
44
+ #define extra hash
45
+ extra do
46
+ { :raw_info => @tp.to_params }
47
+ end
48
+
49
+ private
50
+
51
+ def valid_lti?
52
+ key = request.params['oauth_consumer_key']
53
+ @tp = IMS::LTI::ToolProvider.new(key, options.oauth_credentials[key], request.params)
54
+ @tp.valid_request!(request)
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,42 @@
1
+ module Omniauth
2
+ module Lti
3
+ module Context
4
+
5
+ def self.included(receiver)
6
+ receiver.class_eval do
7
+ # add lti_tool_provider as a helper method to received object
8
+ helper_method :lti_tool_provider
9
+ attr_reader :lti_credentials
10
+
11
+ def lti_credentials=(credentials)
12
+ if credentials && credentials.is_a?(Hash)
13
+ @lti_credentials = credentials.keys.inject({}) {|h,k| h[k.to_s] = credentials[k] ; h }
14
+ end
15
+ end
16
+ end
17
+ end
18
+
19
+ def save_lti_context
20
+ session[LTI_LAUNCH_PARAMS_SESSION_NAME] = request.env['lti.launch_params']
21
+ end
22
+
23
+ private
24
+
25
+ LTI_LAUNCH_PARAMS_SESSION_NAME = 'lti_launch_params'
26
+
27
+ def lti_launch_params
28
+ session[LTI_LAUNCH_PARAMS_SESSION_NAME]
29
+ end
30
+
31
+ def lti_tool_provider
32
+ return nil unless lti_launch_params
33
+ key = lti_launch_params['oauth_consumer_key']
34
+ secret = self.lti_credentials[key] if self.lti_credentials
35
+ @tp ||= IMS::LTI::ToolProvider.new(key,
36
+ secret,
37
+ lti_launch_params)
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,5 @@
1
+ module Omniauth
2
+ module Lti
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ require "omniauth-lti/version"
2
+ require "omniauth-lti/context"
3
+ require "omniauth/lti"
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "omniauth-lti/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "omniauth-lti"
7
+ s.version = Omniauth::Lti::VERSION
8
+ s.authors = ["Xavi Aracil"]
9
+ s.email = ["xavi@laibeth.com"]
10
+ s.homepage = "https://github.com/xaviaracil/omniauth-lti"
11
+ s.summary = %q{OmniAuth strategy for LTI spec}
12
+ s.description = %q{OmniAuth strategy for providing LTI authentication to an OmniAuth application}
13
+
14
+ s.rubyforge_project = "omniauth-lti"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ s.add_dependency 'omniauth'
25
+ s.add_dependency 'ims-lti'
26
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omniauth-lti
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Xavi Aracil
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2013-06-03 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: omniauth
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: ims-lti
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ description: OmniAuth strategy for providing LTI authentication to an OmniAuth application
38
+ email:
39
+ - xavi@laibeth.com
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ extra_rdoc_files: []
45
+
46
+ files:
47
+ - .gitignore
48
+ - Gemfile
49
+ - README.md
50
+ - Rakefile
51
+ - lib/omniauth-lti.rb
52
+ - lib/omniauth-lti/context.rb
53
+ - lib/omniauth-lti/version.rb
54
+ - lib/omniauth/lti.rb
55
+ - lib/omniauth/strategies/lti.rb
56
+ - omniauth-lti.gemspec
57
+ homepage: https://github.com/xaviaracil/omniauth-lti
58
+ licenses: []
59
+
60
+ post_install_message:
61
+ rdoc_options: []
62
+
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: "0"
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
77
+ requirements: []
78
+
79
+ rubyforge_project: omniauth-lti
80
+ rubygems_version: 1.8.24
81
+ signing_key:
82
+ specification_version: 3
83
+ summary: OmniAuth strategy for LTI spec
84
+ test_files: []
85
+