devise_saml_authenticatable 1.3.1 → 1.6.0
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.
- 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
|