devise_saml_authenticatable 1.3.1 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +0 -2
- data/.travis.yml +37 -22
- data/Gemfile +2 -10
- data/README.md +127 -44
- data/app/controllers/devise/saml_sessions_controller.rb +38 -7
- data/devise_saml_authenticatable.gemspec +2 -1
- data/lib/devise_saml_authenticatable.rb +70 -0
- data/lib/devise_saml_authenticatable/default_attribute_map_resolver.rb +26 -0
- data/lib/devise_saml_authenticatable/default_idp_entity_id_reader.rb +10 -2
- data/lib/devise_saml_authenticatable/exception.rb +1 -1
- data/lib/devise_saml_authenticatable/model.rb +20 -32
- data/lib/devise_saml_authenticatable/routes.rb +17 -6
- data/lib/devise_saml_authenticatable/saml_mapped_attributes.rb +38 -0
- data/lib/devise_saml_authenticatable/saml_response.rb +16 -0
- data/lib/devise_saml_authenticatable/strategy.rb +10 -2
- data/lib/devise_saml_authenticatable/version.rb +1 -1
- data/spec/controllers/devise/saml_sessions_controller_spec.rb +118 -11
- data/spec/devise_saml_authenticatable/default_attribute_map_resolver_spec.rb +58 -0
- data/spec/devise_saml_authenticatable/default_idp_entity_id_reader_spec.rb +34 -4
- data/spec/devise_saml_authenticatable/model_spec.rb +199 -5
- data/spec/devise_saml_authenticatable/saml_mapped_attributes_spec.rb +50 -0
- data/spec/devise_saml_authenticatable/strategy_spec.rb +18 -0
- data/spec/features/saml_authentication_spec.rb +45 -21
- data/spec/rails_helper.rb +6 -2
- data/spec/routes/routes_spec.rb +102 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/support/Gemfile.rails4 +24 -6
- data/spec/support/Gemfile.rails5 +25 -0
- data/spec/support/Gemfile.rails5.1 +25 -0
- data/spec/support/Gemfile.rails5.2 +25 -0
- data/spec/support/attribute-map.yml +12 -0
- data/spec/support/attribute_map_resolver.rb.erb +14 -0
- data/spec/support/idp_settings_adapter.rb.erb +5 -5
- data/spec/support/idp_template.rb +8 -1
- data/spec/support/rails_app.rb +110 -16
- data/spec/support/saml_idp_controller.rb.erb +22 -10
- data/spec/support/sp_template.rb +52 -21
- metadata +26 -10
- data/spec/support/Gemfile.ruby-saml-1.3 +0 -23
@@ -17,10 +17,10 @@ class SamlIdpController < SamlIdp::IdpController
|
|
17
17
|
|
18
18
|
def idp_make_saml_response(_)
|
19
19
|
attributes = {
|
20
|
-
|
20
|
+
name_attribute_key => "A User",
|
21
21
|
}
|
22
22
|
if include_subject_in_attributes
|
23
|
-
attributes[
|
23
|
+
attributes[email_address_attribute_key] = "you@example.com"
|
24
24
|
end
|
25
25
|
encode_SAMLResponse("you@example.com", attributes: attributes)
|
26
26
|
end
|
@@ -29,14 +29,21 @@ class SamlIdpController < SamlIdp::IdpController
|
|
29
29
|
|
30
30
|
def session_index
|
31
31
|
Rails.cache.fetch('session_key') {
|
32
|
-
|
32
|
+
SecureRandom.uuid
|
33
33
|
}
|
34
34
|
end
|
35
35
|
|
36
|
+
def email_address_attribute_key
|
37
|
+
"<%= @email_address_attribute_key %>"
|
38
|
+
end
|
39
|
+
|
40
|
+
def name_attribute_key
|
41
|
+
"<%= @name_attribute_key %>"
|
42
|
+
end
|
36
43
|
|
37
44
|
def encode_SAMLResponse(nameID, opts = {})
|
38
45
|
now = Time.now.utc
|
39
|
-
response_id =
|
46
|
+
response_id = SecureRandom.uuid
|
40
47
|
audience_uri = opts[:audience_uri] || "#{saml_acs_url[/^(.*?\/\/.*?\/)/, 1]}saml/metadata"
|
41
48
|
issuer_uri = opts[:issuer_uri] || (defined?(request) && request.url) || "http://example.com"
|
42
49
|
|
@@ -50,7 +57,7 @@ class SamlIdpController < SamlIdp::IdpController
|
|
50
57
|
attribute_statement = ""
|
51
58
|
end
|
52
59
|
|
53
|
-
assertion = %[<Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_#{session_index}" IssueInstant="#{now.iso8601}" Version="2.0"><Issuer>#{issuer_uri}</Issuer><Subject><NameID Format="urn:oasis:names:tc:SAML:
|
60
|
+
assertion = %[<Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_#{session_index}" IssueInstant="#{now.iso8601}" Version="2.0"><Issuer>#{issuer_uri}</Issuer><Subject><NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">#{nameID}</NameID><SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><SubjectConfirmationData InResponseTo="#{@saml_request_id}" NotOnOrAfter="#{(now+3*60).iso8601}" Recipient="#{@saml_acs_url}"></SubjectConfirmationData></SubjectConfirmation></Subject><Conditions NotBefore="#{(now-5).iso8601}" NotOnOrAfter="#{(now+60*60).iso8601}"><AudienceRestriction><Audience>#{audience_uri}</Audience></AudienceRestriction></Conditions>#{attribute_statement}<AuthnStatement AuthnInstant="#{now.iso8601}" SessionIndex="_#{session_index}"><AuthnContext><AuthnContextClassRef>urn:federation:authentication:windows</AuthnContextClassRef></AuthnContext></AuthnStatement></Assertion>]
|
54
61
|
|
55
62
|
digest_value = Base64.encode64(algorithm.digest(assertion)).gsub(/\n/, '')
|
56
63
|
|
@@ -72,8 +79,13 @@ class SamlIdpController < SamlIdp::IdpController
|
|
72
79
|
end
|
73
80
|
|
74
81
|
# == SLO functionality, see https://github.com/lawrencepit/ruby-saml-idp/pull/10
|
82
|
+
<% if Rails::VERSION::MAJOR < 5 %>
|
75
83
|
skip_before_filter :validate_saml_request, :only => [:logout, :sp_sign_out]
|
76
84
|
before_filter :validate_saml_slo_request, :only => [:logout]
|
85
|
+
<% else %>
|
86
|
+
skip_before_action :validate_saml_request, :only => [:logout, :sp_sign_out]
|
87
|
+
before_action :validate_saml_slo_request, :only => [:logout]
|
88
|
+
<% end %>
|
77
89
|
|
78
90
|
public
|
79
91
|
|
@@ -110,7 +122,7 @@ class SamlIdpController < SamlIdp::IdpController
|
|
110
122
|
def idp_make_saml_slo_response(person)
|
111
123
|
attributes = {}
|
112
124
|
if include_subject_in_attributes
|
113
|
-
attributes[
|
125
|
+
attributes[email_address_attribute_key] = "you@example.com"
|
114
126
|
end
|
115
127
|
encode_SAML_SLO_Response("you@example.com", attributes: attributes)
|
116
128
|
end
|
@@ -139,11 +151,11 @@ class SamlIdpController < SamlIdp::IdpController
|
|
139
151
|
|
140
152
|
def encode_SAML_SLO_Response(nameID, opts = {})
|
141
153
|
now = Time.now.utc
|
142
|
-
response_id =
|
154
|
+
response_id = SecureRandom.uuid
|
143
155
|
audience_uri = opts[:audience_uri] || (@saml_slo_acs_url && @saml_slo_acs_url[/^(.*?\/\/.*?\/)/, 1])
|
144
156
|
issuer_uri = opts[:issuer_uri] || (defined?(request) && request.url.split("?")[0]) || "http://example.com"
|
145
157
|
|
146
|
-
assertion = %[<Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_#{session_index}" IssueInstant="#{now.iso8601}" Version="2.0"><Issuer2>#{issuer_uri}</Issuer2><Subject><NameID Format="urn:oasis:names:tc:SAML:
|
158
|
+
assertion = %[<Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_#{session_index}" IssueInstant="#{now.iso8601}" Version="2.0"><Issuer2>#{issuer_uri}</Issuer2><Subject><NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">#{nameID}</NameID><SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><SubjectConfirmationData InResponseTo="#{@saml_slo_request_id}" NotOnOrAfter="#{(now+3*60).iso8601}" Recipient="#{@saml_slo_acs_url}"></SubjectConfirmationData></SubjectConfirmation></Subject><Conditions NotBefore="#{(now-5).iso8601}" NotOnOrAfter="#{(now+60*60).iso8601}"><AudienceRestriction><Audience>#{audience_uri}</Audience></AudienceRestriction></Conditions><AttributeStatement><Attribute Name="#{email_address_attribute_key}"><AttributeValue>#{nameID}</AttributeValue></Attribute></AttributeStatement><AuthnStatement AuthnInstant="#{now.iso8601}" SessionIndex="_#{session_index}"><AuthnContext><AuthnContextClassRef>urn:federation:authentication:windows</AuthnContextClassRef></AuthnContext></AuthnStatement></Assertion>]
|
147
159
|
|
148
160
|
digest_value = Base64.encode64(algorithm.digest(assertion)).gsub(/\n/, '')
|
149
161
|
|
@@ -175,7 +187,7 @@ class SamlIdpController < SamlIdp::IdpController
|
|
175
187
|
|
176
188
|
def encode_SAML_SLO_Request(nameID, opts = {})
|
177
189
|
now = Time.now.utc
|
178
|
-
response_id =
|
190
|
+
response_id = SecureRandom.uuid
|
179
191
|
issuer_uri = opts[:issuer_uri] || (defined?(request) && request.url.split("?")[0]) || "http://example.com"
|
180
192
|
xml = %[<samlp:LogoutRequest
|
181
193
|
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
|
@@ -184,7 +196,7 @@ class SamlIdpController < SamlIdp::IdpController
|
|
184
196
|
Destination="#{destination(@saml_slo_acs_url)}"
|
185
197
|
IssueInstant="#{now.iso8601}">
|
186
198
|
<saml:Issuer >#{issuer_uri}</saml:Issuer>
|
187
|
-
<saml:NameID Format="urn:oasis:names:tc:SAML:
|
199
|
+
<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">#{nameID}</saml:NameID>
|
188
200
|
<samlp:SessionIndex>_#{session_index}</samlp:SessionIndex>
|
189
201
|
</samlp:LogoutRequest>]
|
190
202
|
|
data/spec/support/sp_template.rb
CHANGED
@@ -2,13 +2,18 @@
|
|
2
2
|
|
3
3
|
require "onelogin/ruby-saml/version"
|
4
4
|
|
5
|
+
attribute_map_resolver = ENV.fetch("ATTRIBUTE_MAP_RESOLVER", "nil")
|
5
6
|
saml_session_index_key = ENV.fetch('SAML_SESSION_INDEX_KEY', ":session_index")
|
6
7
|
use_subject_to_authenticate = ENV.fetch('USE_SUBJECT_TO_AUTHENTICATE')
|
7
8
|
idp_settings_adapter = ENV.fetch('IDP_SETTINGS_ADAPTER', "nil")
|
8
9
|
idp_entity_id_reader = ENV.fetch('IDP_ENTITY_ID_READER', "DeviseSamlAuthenticatable::DefaultIdpEntityIdReader")
|
9
10
|
saml_failed_callback = ENV.fetch('SAML_FAILED_CALLBACK', "nil")
|
10
11
|
|
11
|
-
|
12
|
+
if Rails::VERSION::MAJOR < 5 || (Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR < 2)
|
13
|
+
gsub_file 'config/secrets.yml', /secret_key_base:.*$/, 'secret_key_base: "8b5889df1fcf03f76c7d66da02d8776bcc85b06bed7d9c592f076d9c8a5455ee6d4beae45986c3c030b40208db5e612f2a6ef8283036a352e3fae83c5eda36be"'
|
14
|
+
end
|
15
|
+
|
16
|
+
gem 'devise_saml_authenticatable', path: File.expand_path("../../..", __FILE__)
|
12
17
|
gem 'ruby-saml', OneLogin::RubySaml::VERSION
|
13
18
|
gem 'thin'
|
14
19
|
|
@@ -17,17 +22,27 @@ insert_into_file('Gemfile', after: /\z/) {
|
|
17
22
|
# Lock down versions of gems for older versions of Ruby
|
18
23
|
if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new("2.1")
|
19
24
|
gem 'devise', '~> 3.5'
|
25
|
+
gem 'nokogiri', '~> 1.6.8'
|
26
|
+
elsif Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new("2.4")
|
27
|
+
gem 'responders', '~> 2.4'
|
20
28
|
end
|
21
29
|
GEMFILE
|
22
30
|
}
|
31
|
+
if Rails::VERSION::MAJOR < 6
|
32
|
+
# sqlite3 is hard-coded in Rails < 6 to v1.3.x
|
33
|
+
gsub_file 'Gemfile', /^gem 'sqlite3'.*$/, "gem 'sqlite3', '~> 1.3.6'"
|
34
|
+
end
|
23
35
|
|
36
|
+
template File.expand_path('../attribute_map_resolver.rb.erb', __FILE__), 'app/lib/attribute_map_resolver.rb'
|
24
37
|
template File.expand_path('../idp_settings_adapter.rb.erb', __FILE__), 'app/lib/idp_settings_adapter.rb'
|
25
38
|
|
26
|
-
|
39
|
+
if attribute_map_resolver == "nil"
|
40
|
+
create_file 'config/attribute-map.yml', <<-ATTRIBUTES
|
27
41
|
---
|
28
42
|
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress": email
|
29
43
|
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name": name
|
30
|
-
ATTRIBUTES
|
44
|
+
ATTRIBUTES
|
45
|
+
end
|
31
46
|
|
32
47
|
create_file('app/lib/our_saml_failed_callback_handler.rb', <<-CALLBACKHANDLER)
|
33
48
|
|
@@ -56,28 +71,17 @@ end
|
|
56
71
|
READER
|
57
72
|
|
58
73
|
after_bundle do
|
59
|
-
generate :controller, 'home', 'index'
|
60
|
-
insert_into_file('app/controllers/home_controller.rb', after: "class HomeController < ApplicationController\n") {
|
61
|
-
<<-AUTHENTICATE
|
62
|
-
before_action :authenticate_user!
|
63
|
-
AUTHENTICATE
|
64
|
-
}
|
65
|
-
insert_into_file('app/views/home/index.html.erb', after: /\z/) {
|
66
|
-
<<-HOME
|
67
|
-
<%= current_user.email %> <%= current_user.name %>
|
68
|
-
<%= form_tag destroy_user_session_path, method: :delete do %>
|
69
|
-
<%= submit_tag "Log out" %>
|
70
|
-
<% end %>
|
71
|
-
HOME
|
72
|
-
}
|
73
|
-
route "root to: 'home#index'"
|
74
|
-
|
75
74
|
# Configure for our SAML IdP
|
76
75
|
generate 'devise:install'
|
77
76
|
gsub_file 'config/initializers/devise.rb', /^end$/, <<-CONFIG
|
77
|
+
config.secret_key = 'adc7cd73792f5d20055a0ac749ce8cdddb2e0f0d3ea7fe7855eec3d0f81833b9a4ac31d12e05f232d40ae86ca492826a6fc5a65228c6e16752815316e2d5b38d'
|
78
|
+
|
78
79
|
config.saml_default_user_key = :email
|
79
80
|
config.saml_session_index_key = #{saml_session_index_key}
|
80
81
|
|
82
|
+
if #{attribute_map_resolver}
|
83
|
+
config.saml_attribute_map_resolver = #{attribute_map_resolver}
|
84
|
+
end
|
81
85
|
config.saml_use_subject = #{use_subject_to_authenticate}
|
82
86
|
config.saml_create_user = true
|
83
87
|
config.saml_update_user = true
|
@@ -91,11 +95,33 @@ after_bundle do
|
|
91
95
|
settings.idp_slo_target_url = "http://localhost:8009/saml/logout"
|
92
96
|
settings.idp_sso_target_url = "http://localhost:8009/saml/auth"
|
93
97
|
settings.idp_cert_fingerprint = "9E:65:2E:03:06:8D:80:F2:86:C7:6C:77:A1:D9:14:97:0A:4D:F4:4D"
|
98
|
+
settings.name_identifier_format = "urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
|
94
99
|
end
|
95
100
|
end
|
96
101
|
CONFIG
|
97
102
|
|
98
|
-
generate :
|
103
|
+
generate :controller, 'home', 'index'
|
104
|
+
insert_into_file('app/controllers/home_controller.rb', after: "class HomeController < ApplicationController\n") {
|
105
|
+
<<-AUTHENTICATE
|
106
|
+
before_action :authenticate_user!
|
107
|
+
AUTHENTICATE
|
108
|
+
}
|
109
|
+
insert_into_file('app/views/home/index.html.erb', after: /\z/) {
|
110
|
+
<<-HOME
|
111
|
+
<%= current_user.email %> <%= current_user.name %>
|
112
|
+
<%= form_tag destroy_user_session_path(entity_id: "http://localhost:8020/saml/metadata"), method: :delete do %>
|
113
|
+
<%= submit_tag "Log out" %>
|
114
|
+
<% end %>
|
115
|
+
HOME
|
116
|
+
}
|
117
|
+
route "root to: 'home#index'"
|
118
|
+
|
119
|
+
if Rails::VERSION::MAJOR < 6
|
120
|
+
generate :devise, "user", "email:string", "name:string", "session_index:string"
|
121
|
+
else
|
122
|
+
# devise seems to add `email` by default in Rails 6
|
123
|
+
generate :devise, "user", "name:string", "session_index:string"
|
124
|
+
end
|
99
125
|
gsub_file 'app/models/user.rb', /database_authenticatable.*\n.*/, 'saml_authenticatable'
|
100
126
|
route "resources :users, only: [:create]"
|
101
127
|
create_file('app/controllers/users_controller.rb', <<-USERS)
|
@@ -103,13 +129,18 @@ class UsersController < ApplicationController
|
|
103
129
|
skip_before_action :verify_authenticity_token
|
104
130
|
def create
|
105
131
|
User.create!(email: params[:email])
|
106
|
-
|
132
|
+
head 201
|
107
133
|
end
|
108
134
|
end
|
109
135
|
USERS
|
110
136
|
|
111
137
|
rake "db:create"
|
112
138
|
rake "db:migrate"
|
139
|
+
rake "db:create", env: "production"
|
140
|
+
rake "db:migrate", env: "production"
|
141
|
+
|
142
|
+
# Remove any specs so that future RSpec runs don't try to also run these
|
143
|
+
run 'rm -rf spec'
|
113
144
|
end
|
114
145
|
|
115
146
|
create_file 'public/stylesheets/application.css', ''
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_saml_authenticatable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josef Sauter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: devise
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.7'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.7'
|
41
41
|
description: SAML Authentication for devise
|
42
42
|
email:
|
43
43
|
- Josef.Sauter@gmail.com
|
@@ -55,25 +55,35 @@ files:
|
|
55
55
|
- app/controllers/devise/saml_sessions_controller.rb
|
56
56
|
- devise_saml_authenticatable.gemspec
|
57
57
|
- lib/devise_saml_authenticatable.rb
|
58
|
+
- lib/devise_saml_authenticatable/default_attribute_map_resolver.rb
|
58
59
|
- lib/devise_saml_authenticatable/default_idp_entity_id_reader.rb
|
59
60
|
- lib/devise_saml_authenticatable/exception.rb
|
60
61
|
- lib/devise_saml_authenticatable/logger.rb
|
61
62
|
- lib/devise_saml_authenticatable/model.rb
|
62
63
|
- lib/devise_saml_authenticatable/routes.rb
|
63
64
|
- lib/devise_saml_authenticatable/saml_config.rb
|
65
|
+
- lib/devise_saml_authenticatable/saml_mapped_attributes.rb
|
66
|
+
- lib/devise_saml_authenticatable/saml_response.rb
|
64
67
|
- lib/devise_saml_authenticatable/strategy.rb
|
65
68
|
- lib/devise_saml_authenticatable/version.rb
|
66
69
|
- rails/init.rb
|
67
70
|
- spec/controllers/devise/saml_sessions_controller_spec.rb
|
71
|
+
- spec/devise_saml_authenticatable/default_attribute_map_resolver_spec.rb
|
68
72
|
- spec/devise_saml_authenticatable/default_idp_entity_id_reader_spec.rb
|
69
73
|
- spec/devise_saml_authenticatable/model_spec.rb
|
70
74
|
- spec/devise_saml_authenticatable/saml_config_spec.rb
|
75
|
+
- spec/devise_saml_authenticatable/saml_mapped_attributes_spec.rb
|
71
76
|
- spec/devise_saml_authenticatable/strategy_spec.rb
|
72
77
|
- spec/features/saml_authentication_spec.rb
|
73
78
|
- spec/rails_helper.rb
|
79
|
+
- spec/routes/routes_spec.rb
|
74
80
|
- spec/spec_helper.rb
|
75
81
|
- spec/support/Gemfile.rails4
|
76
|
-
- spec/support/Gemfile.
|
82
|
+
- spec/support/Gemfile.rails5
|
83
|
+
- spec/support/Gemfile.rails5.1
|
84
|
+
- spec/support/Gemfile.rails5.2
|
85
|
+
- spec/support/attribute-map.yml
|
86
|
+
- spec/support/attribute_map_resolver.rb.erb
|
77
87
|
- spec/support/idp_settings_adapter.rb.erb
|
78
88
|
- spec/support/idp_template.rb
|
79
89
|
- spec/support/rails_app.rb
|
@@ -82,7 +92,8 @@ files:
|
|
82
92
|
- spec/support/saml_idp_controller.rb.erb
|
83
93
|
- spec/support/sp_template.rb
|
84
94
|
homepage: ''
|
85
|
-
licenses:
|
95
|
+
licenses:
|
96
|
+
- MIT
|
86
97
|
metadata: {}
|
87
98
|
post_install_message:
|
88
99
|
rdoc_options: []
|
@@ -99,22 +110,28 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
110
|
- !ruby/object:Gem::Version
|
100
111
|
version: '0'
|
101
112
|
requirements: []
|
102
|
-
|
103
|
-
rubygems_version: 2.4.6
|
113
|
+
rubygems_version: 3.0.6
|
104
114
|
signing_key:
|
105
115
|
specification_version: 4
|
106
116
|
summary: SAML Authentication for devise
|
107
117
|
test_files:
|
108
118
|
- spec/controllers/devise/saml_sessions_controller_spec.rb
|
119
|
+
- spec/devise_saml_authenticatable/default_attribute_map_resolver_spec.rb
|
109
120
|
- spec/devise_saml_authenticatable/default_idp_entity_id_reader_spec.rb
|
110
121
|
- spec/devise_saml_authenticatable/model_spec.rb
|
111
122
|
- spec/devise_saml_authenticatable/saml_config_spec.rb
|
123
|
+
- spec/devise_saml_authenticatable/saml_mapped_attributes_spec.rb
|
112
124
|
- spec/devise_saml_authenticatable/strategy_spec.rb
|
113
125
|
- spec/features/saml_authentication_spec.rb
|
114
126
|
- spec/rails_helper.rb
|
127
|
+
- spec/routes/routes_spec.rb
|
115
128
|
- spec/spec_helper.rb
|
116
129
|
- spec/support/Gemfile.rails4
|
117
|
-
- spec/support/Gemfile.
|
130
|
+
- spec/support/Gemfile.rails5
|
131
|
+
- spec/support/Gemfile.rails5.1
|
132
|
+
- spec/support/Gemfile.rails5.2
|
133
|
+
- spec/support/attribute-map.yml
|
134
|
+
- spec/support/attribute_map_resolver.rb.erb
|
118
135
|
- spec/support/idp_settings_adapter.rb.erb
|
119
136
|
- spec/support/idp_template.rb
|
120
137
|
- spec/support/rails_app.rb
|
@@ -122,4 +139,3 @@ test_files:
|
|
122
139
|
- spec/support/saml_idp-saml_slo_post.html.erb
|
123
140
|
- spec/support/saml_idp_controller.rb.erb
|
124
141
|
- spec/support/sp_template.rb
|
125
|
-
has_rdoc:
|
@@ -1,23 +0,0 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in devise_saml_authenticatable.gemspec
|
4
|
-
gemspec path: '../..'
|
5
|
-
|
6
|
-
group :test do
|
7
|
-
gem 'rake'
|
8
|
-
gem 'rspec', '~> 3.0'
|
9
|
-
gem 'rails', '~> 5.0'
|
10
|
-
gem 'rspec-rails'
|
11
|
-
gem 'ruby-saml', '~> 1.3.0'
|
12
|
-
gem 'sqlite3'
|
13
|
-
gem 'capybara'
|
14
|
-
gem 'poltergeist'
|
15
|
-
|
16
|
-
# Lock down versions of gems for older versions of Ruby
|
17
|
-
if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new("2.0")
|
18
|
-
gem 'mime-types', '~> 2.99'
|
19
|
-
end
|
20
|
-
if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new("2.1")
|
21
|
-
gem 'devise', '~> 3.5'
|
22
|
-
end
|
23
|
-
end
|