omniauth-aai 0.1
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.
- data/.travis.yml +10 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +60 -0
- data/Guardfile +6 -0
- data/README.md +89 -0
- data/Rakefile +7 -0
- data/lib/.DS_Store +0 -0
- data/lib/omniauth-aai.rb +8 -0
- data/lib/omniauth-aai/version.rb +5 -0
- data/lib/omniauth/.DS_Store +0 -0
- data/lib/omniauth/strategies/.DS_Store +0 -0
- data/lib/omniauth/strategies/aai.rb +105 -0
- data/omniauth-aai.gemspec +25 -0
- data/spec/omniauth/strategies/aai_spec.rb +101 -0
- data/spec/spec_helper.rb +11 -0
- metadata +143 -0
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git://github.com/switch-ch/omniauth-shibboleth.git
|
3
|
+
revision: 8da8cbcb4d42e8b810cb5eaed59581e38b15b187
|
4
|
+
specs:
|
5
|
+
omniauth-shibboleth (1.0.6)
|
6
|
+
omniauth (>= 1.0.0)
|
7
|
+
|
8
|
+
PATH
|
9
|
+
remote: .
|
10
|
+
specs:
|
11
|
+
omniauth-aai (0.1)
|
12
|
+
omniauth-shibboleth
|
13
|
+
|
14
|
+
GEM
|
15
|
+
remote: http://rubygems.org/
|
16
|
+
specs:
|
17
|
+
diff-lcs (1.1.3)
|
18
|
+
ffi (1.0.11)
|
19
|
+
guard (1.2.3)
|
20
|
+
listen (>= 0.4.2)
|
21
|
+
thor (>= 0.14.6)
|
22
|
+
guard-rspec (1.1.0)
|
23
|
+
guard (>= 1.1)
|
24
|
+
hashie (1.2.0)
|
25
|
+
listen (0.4.7)
|
26
|
+
rb-fchange (~> 0.0.5)
|
27
|
+
rb-fsevent (~> 0.9.1)
|
28
|
+
rb-inotify (~> 0.8.8)
|
29
|
+
omniauth (1.1.0)
|
30
|
+
hashie (~> 1.2)
|
31
|
+
rack
|
32
|
+
rack (1.4.1)
|
33
|
+
rack-test (0.6.1)
|
34
|
+
rack (>= 1.0)
|
35
|
+
rake (0.9.2.2)
|
36
|
+
rb-fchange (0.0.5)
|
37
|
+
ffi
|
38
|
+
rb-fsevent (0.9.1)
|
39
|
+
rb-inotify (0.8.8)
|
40
|
+
ffi (>= 0.5.0)
|
41
|
+
rspec (2.10.0)
|
42
|
+
rspec-core (~> 2.10.0)
|
43
|
+
rspec-expectations (~> 2.10.0)
|
44
|
+
rspec-mocks (~> 2.10.0)
|
45
|
+
rspec-core (2.10.1)
|
46
|
+
rspec-expectations (2.10.0)
|
47
|
+
diff-lcs (~> 1.1.3)
|
48
|
+
rspec-mocks (2.10.1)
|
49
|
+
thor (0.15.4)
|
50
|
+
|
51
|
+
PLATFORMS
|
52
|
+
ruby
|
53
|
+
|
54
|
+
DEPENDENCIES
|
55
|
+
guard-rspec
|
56
|
+
omniauth-aai!
|
57
|
+
omniauth-shibboleth!
|
58
|
+
rack-test
|
59
|
+
rake
|
60
|
+
rspec (~> 2.8)
|
data/Guardfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# OmniAuth AAI strategy
|
2
|
+
|
3
|
+
OmniAuth Shibboleth AAI strategy is an OmniAuth strategy for authenticating through SWITCHaai.
|
4
|
+
|
5
|
+
- OmniAuth: https://github.com/intridea/omniauth/wiki
|
6
|
+
- Shibboleth: https://wiki.shibboleth.net/
|
7
|
+
- SWITCHaai: http://www.switch.ch/aai/index.html
|
8
|
+
|
9
|
+
Most functionallity is borrwoed from https://github.com/toyokazu/omniauth-shibboleth
|
10
|
+
|
11
|
+
## Getting Started
|
12
|
+
|
13
|
+
### Installation
|
14
|
+
|
15
|
+
Install as a gem via Gemfile or with
|
16
|
+
|
17
|
+
% gem install omniauth-aai
|
18
|
+
|
19
|
+
### Setup SWITCHaai Strategy
|
20
|
+
|
21
|
+
To use Shibboleth SWITCHaai strategy as a middleware in your rails application, add the following file to your rails application initializer directory. (There will be a generator soon)
|
22
|
+
|
23
|
+
|
24
|
+
# config/initializer/omniauth.rb
|
25
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
26
|
+
provider :aai, {}
|
27
|
+
end
|
28
|
+
|
29
|
+
You will get by default all the standard SWITCHaai values, or you can configure it via options:
|
30
|
+
|
31
|
+
# config/initializer/omniauth.rb
|
32
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
33
|
+
provider :aai,{
|
34
|
+
:uid_field => :'persistent-id',
|
35
|
+
:fields => [:name, :email, :swiss_ep_uid],
|
36
|
+
:extra_fields => [:'Shib-Authentication-Instant']# See lib/omniauth/strategies/aai.rb for full list.
|
37
|
+
}
|
38
|
+
|
39
|
+
Fields are provided in the Env as request.env["omniauth.auth"]["info"]["name"] and extra_fields attributes are provided as ['extra']['raw_info']['Shib-Authentication-Instant'].
|
40
|
+
|
41
|
+
### How to authenticate users
|
42
|
+
|
43
|
+
In your application, simply direct users to '/auth/aai' to have them sign in via your organizations's AAI SP and IdP. '/auth/aai' url simply redirect users to '/auth/aai/callback', so thus you must protect '/auth/aai/callback' by SWITCHaai SP.
|
44
|
+
|
45
|
+
SWITCHaai strategy just checks the existence of Shib-Session-ID or Shib-Application-ID.
|
46
|
+
|
47
|
+
### Development Mode
|
48
|
+
|
49
|
+
In development / local mode you can use the following mock (with default SWITCHaai values):
|
50
|
+
|
51
|
+
# config/initializer/omniauth.rb
|
52
|
+
use OmniAuth::Builder do
|
53
|
+
provider :developer, {
|
54
|
+
:uid_field => :'persistent-id',
|
55
|
+
:fields => OmniAuth::Strategies::Aai::DEFAULT_FIELDS,
|
56
|
+
:extra_fields, OmniAuth::Strategies::Aai::DEFAULT_EXTRA_FIELDS
|
57
|
+
} if Rails.env == 'development'
|
58
|
+
end
|
59
|
+
|
60
|
+
### Debug Mode
|
61
|
+
|
62
|
+
When you deploy a new application, you may want to confirm the assumed attributes are correctly provided by SWITCHaai SP. OmniAuth SWITCHaai strategy provides a confirmation option :debug. If you set :debug true, you can see the environment variables provided at the /auth/aai/callback uri.
|
63
|
+
|
64
|
+
# config/initializer/omniauth.rb
|
65
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
66
|
+
provider :aai, { :debug => true }
|
67
|
+
end
|
68
|
+
|
69
|
+
## License (MIT License)
|
70
|
+
|
71
|
+
Copyright (C) SWITCH, Zurich, original copyright (omniauth-shibboleth) 2011 by Toyokazu Akiyama.
|
72
|
+
|
73
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
74
|
+
of this software and associated documentation files (the "Software"), to deal
|
75
|
+
in the Software without restriction, including without limitation the rights
|
76
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
77
|
+
copies of the Software, and to permit persons to whom the Software is
|
78
|
+
furnished to do so, subject to the following conditions:
|
79
|
+
|
80
|
+
The above copyright notice and this permission notice shall be included in
|
81
|
+
all copies or substantial portions of the Software.
|
82
|
+
|
83
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
84
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
85
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
86
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
87
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
88
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
89
|
+
THE SOFTWARE.
|
data/Rakefile
ADDED
data/lib/.DS_Store
ADDED
Binary file
|
data/lib/omniauth-aai.rb
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module OmniAuth
|
2
|
+
module Strategies
|
3
|
+
class Aai < OmniAuth::Strategies::Shibboleth
|
4
|
+
|
5
|
+
# 8 core attributes, which must be available for all users
|
6
|
+
CORE_ATTRIBUTES = {
|
7
|
+
swiss_ep_uid: [:'Shib-SwissEP-UniqueID'],
|
8
|
+
first_name: [:'Shib-InetOrgPerson-givenName'],
|
9
|
+
surname: [:'Shib-Person-surname'],
|
10
|
+
mail: [:'Shib-InetOrgPerson-mail'],
|
11
|
+
homeOrganization: [:'Shib-SwissEP-HomeOrganization'],
|
12
|
+
homeOrganizationType: [:'Shib-SwissEP-HomeOrganizationType'],
|
13
|
+
affiliation: [:'Shib-EP-Affiliation']
|
14
|
+
}
|
15
|
+
|
16
|
+
# 8 or more Shibboleth attributes, set by the Service Provider automatically if a user has a valid session
|
17
|
+
SHIBBOLETH_ATTRIBUTES = {
|
18
|
+
:entitlement => [:'Shib-EP-Entitlement'],
|
19
|
+
:preferredLanguage => [:'Shib-InetOrgPerson-preferredLanguage'],
|
20
|
+
:'Shib-Application-ID' => [],
|
21
|
+
:'Shib-Assertion-01' => [],
|
22
|
+
:'Shib-Assertion-Count' => [],
|
23
|
+
:'Shib-Authentication-Instant' => [],
|
24
|
+
:'Shib-Authentication-Method' => [],
|
25
|
+
:'Shib-AuthnContext-Class' => [],
|
26
|
+
:'Shib-Identity-Provider' => [],
|
27
|
+
:'Shib-Session-ID' => []
|
28
|
+
}
|
29
|
+
|
30
|
+
DEFAULT_EXTRA_FIELDS = (CORE_ATTRIBUTES.keys + SHIBBOLETH_ATTRIBUTES.keys)
|
31
|
+
DEFAULT_FIELDS = [:name, :email, :swiss_ep_uid ]
|
32
|
+
|
33
|
+
# persistent-id is default uid
|
34
|
+
option :uid_field, :'persistent-id'
|
35
|
+
|
36
|
+
option :debug, false
|
37
|
+
|
38
|
+
option :aai_fields, CORE_ATTRIBUTES
|
39
|
+
|
40
|
+
option :aai_extra_fields, SHIBBOLETH_ATTRIBUTES
|
41
|
+
|
42
|
+
option :fields, DEFAULT_FIELDS
|
43
|
+
option :extra_fields, DEFAULT_EXTRA_FIELDS
|
44
|
+
|
45
|
+
# # # # #
|
46
|
+
# Helper Methods
|
47
|
+
# # # # #
|
48
|
+
def aai_attributes
|
49
|
+
options.aai_extra_fields.merge(options.aai_fields)
|
50
|
+
end
|
51
|
+
|
52
|
+
def read_env( attribute_key )
|
53
|
+
([attribute_key] + (aai_attributes[attribute_key] || [])).each do | a |
|
54
|
+
v = request.env[a.to_s]
|
55
|
+
return v unless v.nil? || v.strip == ""
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# # # # #
|
60
|
+
# Rack
|
61
|
+
# # # # #
|
62
|
+
def request_phase
|
63
|
+
[
|
64
|
+
302,
|
65
|
+
{
|
66
|
+
'Location' => script_name + callback_path + query_string,
|
67
|
+
'Content-Type' => 'text/plain'
|
68
|
+
},
|
69
|
+
["You are being redirected to Shibboleth SP/IdP for sign-in."]
|
70
|
+
]
|
71
|
+
end
|
72
|
+
|
73
|
+
def callback_phase
|
74
|
+
super
|
75
|
+
end
|
76
|
+
|
77
|
+
uid do
|
78
|
+
# persistent-id is default uid
|
79
|
+
request.env[options.uid_field.to_s]
|
80
|
+
end
|
81
|
+
|
82
|
+
info do
|
83
|
+
options.fields.inject({}) do |hash, field|
|
84
|
+
case field
|
85
|
+
when :name
|
86
|
+
hash[field] = "#{read_env(:first_name)} #{read_env(:surname)}"
|
87
|
+
when :email
|
88
|
+
hash[:email] = read_env(:mail)
|
89
|
+
else
|
90
|
+
hash[field] = read_env(field.to_s)
|
91
|
+
end
|
92
|
+
hash
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
extra do
|
97
|
+
options.extra_fields.inject({:raw_info => {}}) do |hash, field|
|
98
|
+
hash[:raw_info][field] = read_env(field.to_s)
|
99
|
+
hash
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/omniauth-aai/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.add_dependency 'omniauth-shibboleth'
|
6
|
+
|
7
|
+
gem.add_development_dependency 'rack-test'
|
8
|
+
gem.add_development_dependency 'rake'
|
9
|
+
gem.add_development_dependency 'rspec', '~> 2.8'
|
10
|
+
gem.add_development_dependency 'guard-rspec'
|
11
|
+
|
12
|
+
gem.authors = ["Claudio Beffa"]
|
13
|
+
gem.email = ["claudio@beffa.ch"]
|
14
|
+
gem.description = %q{OmniAuth Shibboleth strategies for SWITCHaai}
|
15
|
+
gem.summary = %q{OmniAuth Shibboleth strategies for SWITCHaai}
|
16
|
+
gem.homepage = "https://github.com/switch-ch/omniauth-aai"
|
17
|
+
|
18
|
+
gem.files = `find . -not \\( -regex ".*\\.git.*" -o -regex "\\./pkg.*" -o -regex "\\./spec.*" \\)`.split("\n").map{ |f| f.gsub(/^.\//, '') }
|
19
|
+
gem.test_files = `find spec/*`.split("\n")
|
20
|
+
gem.name = "omniauth-aai"
|
21
|
+
gem.require_paths = ["lib"]
|
22
|
+
gem.version = OmniAuth::Aai::VERSION
|
23
|
+
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
def make_env(path = '/auth/aai', props = {})
|
4
|
+
{
|
5
|
+
'REQUEST_METHOD' => 'GET',
|
6
|
+
'PATH_INFO' => path,
|
7
|
+
'rack.session' => {},
|
8
|
+
'rack.input' => StringIO.new('test=true')
|
9
|
+
}.merge(props)
|
10
|
+
end
|
11
|
+
|
12
|
+
def failure_path
|
13
|
+
if OmniAuth::VERSION >= "1.0" && OmniAuth::VERSION < "1.1"
|
14
|
+
"/auth/failure?message=no_aai_session"
|
15
|
+
elsif OmniAuth::VERSION >= "1.1"
|
16
|
+
"/auth/failure?message=no_shibboleth_session&strategy=aai"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe OmniAuth::Strategies::Aai do
|
21
|
+
let(:app){ Rack::Builder.new do |b|
|
22
|
+
b.use Rack::Session::Cookie
|
23
|
+
b.use OmniAuth::Strategies::Aai
|
24
|
+
b.run lambda{|env| [200, {}, ['Not Found']]}
|
25
|
+
end.to_app }
|
26
|
+
|
27
|
+
context 'request phase' do
|
28
|
+
before do
|
29
|
+
get '/auth/aai'
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should redirect to callback_url' do
|
33
|
+
last_response.status.should == 302
|
34
|
+
last_response.location.should == '/auth/aai/callback'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'callback phase' do
|
39
|
+
context 'without Shibboleth session' do
|
40
|
+
before do
|
41
|
+
get '/auth/aai/callback'
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should fail to get Shib-Session-ID environment variable' do
|
45
|
+
last_response.status.should == 302
|
46
|
+
last_response.location.should == failure_path
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'with Shibboleth session' do
|
51
|
+
let(:strategy){ OmniAuth::Strategies::Aai.new(app, {}) }
|
52
|
+
|
53
|
+
it 'should set default omniauth.auth fields' do
|
54
|
+
@dummy_id = 'abcdefg'
|
55
|
+
@uid = 'https://aai-logon.vho-switchaai.ch/idp/shibboleth!https://aai-viewer.switch.ch/shibboleth!lYQnHiuZjROvtykBpZHjy1UaZPg='
|
56
|
+
@last_name = 'Nachname'
|
57
|
+
@first_name = 'Vorname'
|
58
|
+
@email = 'test@example.com'
|
59
|
+
@shibboleth_unique_id = '099886@vho-switchaai.ch'
|
60
|
+
strategy.call!(make_env('/auth/aai/callback', 'Shib-Session-ID' => @dummy_id, 'persistent-id' => @uid, 'surname' => @last_name, 'first_name' => @first_name, 'mail' => @email, 'Shib-SwissEP-UniqueID' => @shibboleth_unique_id))
|
61
|
+
strategy.env['omniauth.auth']['uid'].should == @uid
|
62
|
+
strategy.env['omniauth.auth']['info']['name'].should == "#{@first_name} #{@last_name}"
|
63
|
+
strategy.env['omniauth.auth']['info']['email'].should == @email
|
64
|
+
strategy.env['omniauth.auth']['info']['swiss_ep_uid'].should == @shibboleth_unique_id
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'with Shibboleth session and attribute options' do
|
69
|
+
let(:options){ { :uid_field => :uniqueID, :fields => [], :extra_fields => [:"Shib-Authentication-Instant", :homeOrganization] } }
|
70
|
+
let(:app){ lambda{|env| [404, {}, ['Awesome']]}}
|
71
|
+
let(:strategy){ OmniAuth::Strategies::Aai.new(app, options) }
|
72
|
+
|
73
|
+
it 'should set specified omniauth.auth fields' do
|
74
|
+
@dummy_id = 'abcdefg'
|
75
|
+
@uid = 'test'
|
76
|
+
@home = 'Test Corporation'
|
77
|
+
@instant = '2012-07-04T14:08:18.999Z'
|
78
|
+
strategy.call!(make_env('/auth/aai/callback', 'Shib-Session-ID' => @dummy_id, 'uniqueID' => @uid, 'Shib-Authentication-Instant' => @instant, 'homeOrganization' => @home))
|
79
|
+
strategy.env['omniauth.auth']['uid'].should == @uid
|
80
|
+
strategy.env['omniauth.auth']['extra']['raw_info']['Shib-Authentication-Instant'].should == @instant
|
81
|
+
strategy.env['omniauth.auth']['extra']['raw_info']['homeOrganization'].should == @home
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'with debug options' do
|
86
|
+
let(:options){ { :debug => true} }
|
87
|
+
let(:strategy){ OmniAuth::Strategies::Shibboleth.new(app, options) }
|
88
|
+
|
89
|
+
it 'should raise environment variables' do
|
90
|
+
@dummy_id = 'abcdefg'
|
91
|
+
@uid = 'https://aai-logon.vho-switchaai.ch/idp/shibboleth!https://aai-viewer.switch.ch/shibboleth!lYQnHiuZjROvtykBpZHjy1UaZPg='
|
92
|
+
@last_name = 'Nachname'
|
93
|
+
@first_name = 'Vorname'
|
94
|
+
@email = 'test@example.com'
|
95
|
+
env = make_env('/auth/aai/callback', 'Shib-Session-ID' => @dummy_id, 'persistent-id' => @uid, 'surname' => @last_name, 'first_name' => @first_name, 'mail' => @email)
|
96
|
+
response = strategy.call!(env)
|
97
|
+
response[0].should == 200
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: omniauth-aai
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Claudio Beffa
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: omniauth-shibboleth
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rack-test
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '2.8'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.8'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: guard-rspec
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
description: OmniAuth Shibboleth strategies for SWITCHaai
|
95
|
+
email:
|
96
|
+
- claudio@beffa.ch
|
97
|
+
executables: []
|
98
|
+
extensions: []
|
99
|
+
extra_rdoc_files: []
|
100
|
+
files:
|
101
|
+
- .travis.yml
|
102
|
+
- Gemfile
|
103
|
+
- Gemfile.lock
|
104
|
+
- Guardfile
|
105
|
+
- lib/.DS_Store
|
106
|
+
- lib/omniauth/.DS_Store
|
107
|
+
- lib/omniauth/strategies/.DS_Store
|
108
|
+
- lib/omniauth/strategies/aai.rb
|
109
|
+
- lib/omniauth-aai/version.rb
|
110
|
+
- lib/omniauth-aai.rb
|
111
|
+
- omniauth-aai.gemspec
|
112
|
+
- Rakefile
|
113
|
+
- README.md
|
114
|
+
- spec/omniauth/strategies/aai_spec.rb
|
115
|
+
- spec/spec_helper.rb
|
116
|
+
homepage: https://github.com/switch-ch/omniauth-aai
|
117
|
+
licenses: []
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options: []
|
120
|
+
require_paths:
|
121
|
+
- lib
|
122
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ! '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
requirements: []
|
135
|
+
rubyforge_project:
|
136
|
+
rubygems_version: 1.8.24
|
137
|
+
signing_key:
|
138
|
+
specification_version: 3
|
139
|
+
summary: OmniAuth Shibboleth strategies for SWITCHaai
|
140
|
+
test_files:
|
141
|
+
- spec/omniauth/strategies/aai_spec.rb
|
142
|
+
- spec/spec_helper.rb
|
143
|
+
has_rdoc:
|