blti_omniauth 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+ gem 'omniauth', '~> 0.2.6'
6
+ gem "oa-oauth", '~> 0.2.6', :require => "omniauth/oauth"
7
+
8
+ # Add dependencies to develop your gem here.
9
+ # Include everything needed to run rake, tests, features, etc.
10
+ group :development do
11
+ gem "shoulda", ">= 0"
12
+ gem "bundler", "~> 1.0.0"
13
+ gem "jeweler", "~> 1.6.4"
14
+ gem "rcov", ">= 0"
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,81 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.2.4)
5
+ faraday (0.6.1)
6
+ addressable (~> 2.2.4)
7
+ multipart-post (~> 1.1.0)
8
+ rack (>= 1.1.0, < 2)
9
+ git (1.2.5)
10
+ jeweler (1.6.4)
11
+ bundler (~> 1.0)
12
+ git (>= 1.2.5)
13
+ rake
14
+ mime-types (1.16)
15
+ multi_json (1.0.3)
16
+ multi_xml (0.2.2)
17
+ multipart-post (1.1.3)
18
+ net-ldap (0.2.2)
19
+ nokogiri (1.4.7)
20
+ oa-basic (0.2.6)
21
+ oa-core (= 0.2.6)
22
+ rest-client (~> 1.6.0)
23
+ oa-core (0.2.6)
24
+ oa-enterprise (0.2.6)
25
+ addressable (= 2.2.4)
26
+ net-ldap (~> 0.2.2)
27
+ nokogiri (~> 1.4.2)
28
+ oa-core (= 0.2.6)
29
+ pyu-ruby-sasl (~> 0.0.3.1)
30
+ rubyntlm (~> 0.1.1)
31
+ oa-more (0.2.6)
32
+ multi_json (~> 1.0.0)
33
+ oa-core (= 0.2.6)
34
+ rest-client (~> 1.6.0)
35
+ oa-oauth (0.2.6)
36
+ faraday (~> 0.6.1)
37
+ multi_json (~> 1.0.0)
38
+ multi_xml (~> 0.2.2)
39
+ oa-core (= 0.2.6)
40
+ oauth (~> 0.4.0)
41
+ oauth2 (~> 0.4.1)
42
+ oa-openid (0.2.6)
43
+ oa-core (= 0.2.6)
44
+ rack-openid (~> 1.3.1)
45
+ ruby-openid-apps-discovery (~> 1.2.0)
46
+ oauth (0.4.5)
47
+ oauth2 (0.4.1)
48
+ faraday (~> 0.6.1)
49
+ multi_json (>= 0.0.5)
50
+ omniauth (0.2.6)
51
+ oa-basic (= 0.2.6)
52
+ oa-core (= 0.2.6)
53
+ oa-enterprise (= 0.2.6)
54
+ oa-more (= 0.2.6)
55
+ oa-oauth (= 0.2.6)
56
+ oa-openid (= 0.2.6)
57
+ pyu-ruby-sasl (0.0.3.3)
58
+ rack (1.3.2)
59
+ rack-openid (1.3.1)
60
+ rack (>= 1.1.0)
61
+ ruby-openid (>= 2.1.8)
62
+ rake (0.9.2)
63
+ rcov (0.9.10)
64
+ rest-client (1.6.6)
65
+ mime-types (>= 1.16)
66
+ ruby-openid (2.1.8)
67
+ ruby-openid-apps-discovery (1.2.0)
68
+ ruby-openid (>= 2.1.7)
69
+ rubyntlm (0.1.1)
70
+ shoulda (2.11.3)
71
+
72
+ PLATFORMS
73
+ ruby
74
+
75
+ DEPENDENCIES
76
+ bundler (~> 1.0.0)
77
+ jeweler (~> 1.6.4)
78
+ oa-oauth (~> 0.2.6)
79
+ omniauth (~> 0.2.6)
80
+ rcov
81
+ shoulda
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Xavi Aracil
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,32 @@
1
+ = blti_omniauth
2
+
3
+ blti_omniauth is a omniauth strategy for Basic LTI (http://imsglobal.org/lti/) consumers.
4
+
5
+ BLTI consumers are authenticated in consumer side (normally a LMS), so request to blti_omniauth are already authenticated.
6
+ The work done is blti_omniauth is the callback phase in omniauth. That is, create a local user with data given by BLTI context.
7
+
8
+ == Usage
9
+
10
+ Add to your Gemfile the lines
11
+
12
+ gem 'blti_omniauth', :git => "http://github.com/xaracil/blti_omniauth.git"
13
+
14
+ If you're using Multiauth (http://github.com/dcu/multiauth), a forked version is required. In your Gemfile replace multiauth's line by
15
+
16
+ gem 'multiauth', :git => "http://github.com/xaracil/multiauth.git"
17
+
18
+ == Contributing to blti_omniauth
19
+
20
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
21
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
22
+ * Fork the project
23
+ * Start a feature/bugfix branch
24
+ * Commit and push until you are happy with your contribution
25
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
26
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
27
+
28
+ == Copyright
29
+
30
+ Copyright (c) 2011 Xavi Aracil. See LICENSE.txt for
31
+ further details.
32
+
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "blti_omniauth"
18
+ gem.homepage = "http://github.com/xaracil/blti_omniauth"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Omniauth strategy for blti consumers}
21
+ gem.description = %Q{Omniauth strategy for blti consumers}
22
+ gem.email = "xaracil@uoc.edu"
23
+ gem.authors = ["Xavi Aracil"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ require 'rcov/rcovtask'
36
+ Rcov::RcovTask.new do |test|
37
+ test.libs << 'test'
38
+ test.pattern = 'test/**/test_*.rb'
39
+ test.verbose = true
40
+ test.rcov_opts << '--exclude "gems/*"'
41
+ end
42
+
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "blti_omniauth #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,65 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{blti_omniauth}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{Xavi Aracil}]
12
+ s.date = %q{2011-08-23}
13
+ s.description = %q{Omniauth strategy for blti consumers}
14
+ s.email = %q{xaracil@uoc.edu}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "LICENSE.txt",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "blti_omniauth.gemspec",
28
+ "lib/blti_omniauth.rb",
29
+ "test/helper.rb",
30
+ "test/test_blti_omniauth.rb"
31
+ ]
32
+ s.homepage = %q{http://github.com/xaracil/blti_omniauth}
33
+ s.licenses = [%q{MIT}]
34
+ s.require_paths = [%q{lib}]
35
+ s.rubygems_version = %q{1.8.8}
36
+ s.summary = %q{Omniauth strategy for blti consumers}
37
+
38
+ if s.respond_to? :specification_version then
39
+ s.specification_version = 3
40
+
41
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
42
+ s.add_runtime_dependency(%q<omniauth>, ["~> 0.2.6"])
43
+ s.add_runtime_dependency(%q<oa-oauth>, ["~> 0.2.6"])
44
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
45
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
46
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
47
+ s.add_development_dependency(%q<rcov>, [">= 0"])
48
+ else
49
+ s.add_dependency(%q<omniauth>, ["~> 0.2.6"])
50
+ s.add_dependency(%q<oa-oauth>, ["~> 0.2.6"])
51
+ s.add_dependency(%q<shoulda>, [">= 0"])
52
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
53
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
54
+ s.add_dependency(%q<rcov>, [">= 0"])
55
+ end
56
+ else
57
+ s.add_dependency(%q<omniauth>, ["~> 0.2.6"])
58
+ s.add_dependency(%q<oa-oauth>, ["~> 0.2.6"])
59
+ s.add_dependency(%q<shoulda>, [">= 0"])
60
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
61
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
62
+ s.add_dependency(%q<rcov>, [">= 0"])
63
+ end
64
+ end
65
+
@@ -0,0 +1,61 @@
1
+ require 'omniauth/core'
2
+ require 'oauth'
3
+ require 'oauth/request_proxy/rack_request'
4
+ require 'base64'
5
+
6
+ module OmniAuth
7
+ module Strategies
8
+ class Blti
9
+ include OmniAuth::Strategy
10
+
11
+ def initialize(app, id, token, options={})
12
+ @key = id
13
+ @secret = token
14
+ super(app, :blti, options)
15
+ end
16
+
17
+ # redirect to OmniAuth's callback (request is already authenticated)
18
+ def request_phase
19
+ #r = Rack::Response.new
20
+ #r.redirect callback_url # TODO falta pasar los parámetros
21
+ #r.finish
22
+ #session[:user_return_to] = full_host
23
+ callback_call
24
+ end
25
+
26
+ def callback_phase
27
+ # create consumer with key and secret
28
+ consumer = ::OAuth::Consumer.new(@key, @secret)
29
+ # create token with token and secret
30
+ token = ::OAuth::Token.new('', '')
31
+
32
+ puts "BLTI: verifying signature"
33
+ if ::OAuth::Signature.verify(request, { :consumer => consumer, :token => token} )
34
+ @uid = Base64.decode64(request.params['user_id'])
35
+ @avatar = Base64.decode64(request.params['user_image'])
36
+ @username = Base64.decode64(request.params['custom_username'])
37
+ @nickname = Base64.decode64(request.params['custom_fullname'])
38
+ puts "BLTI: valid! uid=#{@uid}, avatar=#{@avatar}, username=#{@username}, nickname=#{@nickname}"
39
+ # OmniAuth takes care of the rest
40
+ super
41
+ else
42
+ puts "BLTI: fail!"
43
+ # OmniAuth takes care of the rest
44
+ fail!(:invalid_credentials)
45
+ end
46
+ end
47
+
48
+ # normalize user's data according to http://github.com/intridea/omniauth/wiki/Auth-Hash-Schema
49
+ def auth_hash
50
+ OmniAuth::Utils.deep_merge(super(), {
51
+ 'uid' => @uid,
52
+ 'user_info' => {
53
+ 'name' => @username,
54
+ 'nickname' => @nickname,
55
+ 'image' => @avatar
56
+ }
57
+ })
58
+ end
59
+ end
60
+ end
61
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'test/unit'
11
+ require 'shoulda'
12
+
13
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+ require 'blti_omniauth'
16
+
17
+ class Test::Unit::TestCase
18
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestBltiOmniauth < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: blti_omniauth
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Xavi Aracil
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-08-23 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: omniauth
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: 0.2.6
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: oa-oauth
28
+ requirement: &id002 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.6
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: shoulda
39
+ requirement: &id003 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: "0"
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: bundler
50
+ requirement: &id004 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 1.0.0
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: jeweler
61
+ requirement: &id005 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 1.6.4
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: rcov
72
+ requirement: &id006 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: *id006
81
+ description: Omniauth strategy for blti consumers
82
+ email: xaracil@uoc.edu
83
+ executables: []
84
+
85
+ extensions: []
86
+
87
+ extra_rdoc_files:
88
+ - LICENSE.txt
89
+ - README.rdoc
90
+ files:
91
+ - .document
92
+ - Gemfile
93
+ - Gemfile.lock
94
+ - LICENSE.txt
95
+ - README.rdoc
96
+ - Rakefile
97
+ - VERSION
98
+ - blti_omniauth.gemspec
99
+ - lib/blti_omniauth.rb
100
+ - test/helper.rb
101
+ - test/test_blti_omniauth.rb
102
+ homepage: http://github.com/xaracil/blti_omniauth
103
+ licenses:
104
+ - MIT
105
+ post_install_message:
106
+ rdoc_options: []
107
+
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ hash: 3035692690472734273
116
+ segments:
117
+ - 0
118
+ version: "0"
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: "0"
125
+ requirements: []
126
+
127
+ rubyforge_project:
128
+ rubygems_version: 1.8.8
129
+ signing_key:
130
+ specification_version: 3
131
+ summary: Omniauth strategy for blti consumers
132
+ test_files: []
133
+