Skip to content

Commit 8f5dc5a

Browse files
committed
ruby-saml v2.x update
1 parent 38dcf19 commit 8f5dc5a

18 files changed

+66
-59
lines changed

Gemfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ source 'https://rubygems.org'
33
# Specify your gem's dependencies in devise_saml_authenticatable.gemspec
44
gemspec
55

6+
gem 'ruby-saml', git: 'https://github.com/SAML-Toolkits/ruby-saml.git', branch: 'v2.x'
7+
68
group :test do
79
gem 'rake'
810
gem 'rspec', '~> 3.0'

app/controllers/devise/saml_sessions_controller.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class Devise::SamlSessionsController < Devise::SessionsController
88

99
def new
1010
idp_entity_id = get_idp_entity_id(params)
11-
auth_request = OneLogin::RubySaml::Authrequest.new
11+
auth_request = ::RubySaml::Authrequest.new
1212
auth_params = { RelayState: relay_state } if relay_state
1313
action = auth_request.create(saml_config(idp_entity_id, request), auth_params || {})
1414
session[:saml_transaction_id] = auth_request.request_id if auth_request.respond_to?(:request_id)
@@ -17,7 +17,7 @@ def new
1717

1818
def metadata
1919
idp_entity_id = params[:idp_entity_id]
20-
meta = OneLogin::RubySaml::Metadata.new
20+
meta = ::RubySaml::Metadata.new
2121
render xml: meta.generate(saml_config(idp_entity_id, request))
2222
end
2323

@@ -27,7 +27,7 @@ def idp_sign_out
2727
session[Devise.saml_session_index_key] = nil
2828

2929
saml_config = saml_config(get_idp_entity_id(params), request)
30-
logout_request = OneLogin::RubySaml::SloLogoutrequest.new(params[:SAMLRequest], settings: saml_config)
30+
logout_request = ::RubySaml::SloLogoutrequest.new(params[:SAMLRequest], settings: saml_config)
3131
redirect_to generate_idp_logout_response(saml_config, logout_request.id), allow_other_host: true
3232
elsif params[:SAMLResponse]
3333
# Currently Devise handles the session invalidation when the request is made.
@@ -64,7 +64,7 @@ def store_info_for_sp_initiated_logout
6464
# Override devise to send user to IdP logout for SLO
6565
def after_sign_out_path_for(_)
6666
idp_entity_id = get_idp_entity_id(params)
67-
logout_request = OneLogin::RubySaml::Logoutrequest.new
67+
logout_request = ::RubySaml::Logoutrequest.new
6868
saml_settings = saml_config(idp_entity_id, request).dup
6969

7070
# Add attributes to saml_settings which will later be used to create the SP
@@ -93,6 +93,6 @@ def generate_idp_logout_response(saml_config, logout_request_id)
9393
params = {}
9494
params[:RelayState] = relay_state if relay_state
9595

96-
OneLogin::RubySaml::SloLogoutresponse.new.create(saml_config, logout_request_id, nil, params)
96+
::RubySaml::SloLogoutresponse.new.create(saml_config, logout_request_id, nil, params)
9797
end
9898
end

devise_saml_authenticatable.gemspec

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ Gem::Specification.new do |gem|
1919
gem.required_ruby_version = ">= 2.6.0"
2020

2121
gem.add_dependency("devise","> 2.0.0")
22-
gem.add_dependency("ruby-saml","~> 1.18")
22+
23+
gem.add_dependency("ruby-saml")
2324
end

lib/devise_saml_authenticatable.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ module Devise
103103
@@allowed_clock_drift_in_seconds
104104

105105
mattr_accessor :saml_config
106-
@@saml_config = OneLogin::RubySaml::Settings.new
106+
@@saml_config = ::RubySaml::Settings.new
107107
def self.saml_configure
108108
yield saml_config
109109
end

lib/devise_saml_authenticatable/default_idp_entity_id_reader.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ module DeviseSamlAuthenticatable
22
class DefaultIdpEntityIdReader
33
def self.entity_id(params)
44
if params[:SAMLRequest]
5-
OneLogin::RubySaml::SloLogoutrequest.new(
5+
::RubySaml::SloLogoutrequest.new(
66
params[:SAMLRequest],
77
settings: Devise.saml_config,
88
allowed_clock_drift: Devise.allowed_clock_drift_in_seconds,
99
).issuer
1010
elsif params[:SAMLResponse]
11-
OneLogin::RubySaml::Response.new(
11+
::RubySaml::Response.new(
1212
params[:SAMLResponse],
1313
settings: Devise.saml_config,
1414
allowed_clock_drift: Devise.allowed_clock_drift_in_seconds,

lib/devise_saml_authenticatable/saml_config.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def file_based_config
1515
idp_config_path = "#{Rails.root}/config/idp.yml"
1616

1717
if File.exist?(idp_config_path)
18-
@file_based_config ||= OneLogin::RubySaml::Settings.new(YAML.load(File.read(idp_config_path))[Rails.env])
18+
@file_based_config ||= ::RubySaml::Settings.new(YAML.load(File.read(idp_config_path))[Rails.env])
1919
end
2020
end
2121

lib/devise_saml_authenticatable/strategy.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class SamlAuthenticatable < Authenticatable
66
include DeviseSamlAuthenticatable::SamlConfig
77
def valid?
88
if params[:SAMLResponse]
9-
OneLogin::RubySaml::Response.new(
9+
::RubySaml::Response.new(
1010
params[:SAMLResponse],
1111
response_options,
1212
)
@@ -35,7 +35,7 @@ def store?
3535

3636
private
3737
def parse_saml_response
38-
@response = OneLogin::RubySaml::Response.new(
38+
@response = ::RubySaml::Response.new(
3939
params[:SAMLResponse],
4040
response_options,
4141
)

spec/controllers/devise/saml_sessions_controller_spec.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def destroy
7777

7878
it 'stores saml_transaction_id in the session' do
7979
do_get
80-
if OneLogin::RubySaml::Authrequest.public_instance_methods.include?(:request_id)
80+
if ::RubySaml::Authrequest.public_instance_methods.include?(:request_id)
8181
expect(session[:saml_transaction_id]).to be_present
8282
end
8383
end
@@ -95,7 +95,7 @@ def destroy
9595

9696
it 'stores saml_transaction_id in the session' do
9797
do_get
98-
if OneLogin::RubySaml::Authrequest.public_instance_methods.include?(:request_id)
98+
if ::RubySaml::Authrequest.public_instance_methods.include?(:request_id)
9999
expect(session[:saml_transaction_id]).to be_present
100100
end
101101
end
@@ -153,7 +153,7 @@ def self.entity_id(params)
153153
get :metadata
154154

155155
# Remove ID that can vary across requests
156-
expected_metadata = OneLogin::RubySaml::Metadata.new.generate(saml_config)
156+
expected_metadata = ::RubySaml::Metadata.new.generate(saml_config)
157157
metadata_pattern = Regexp.escape(expected_metadata).gsub(/ ID='[^']+'/, " ID='[\\w-]+'")
158158
expect(response.body).to match(Regexp.new(metadata_pattern))
159159
end
@@ -176,7 +176,7 @@ def self.entity_id(params)
176176
get :metadata
177177

178178
# Remove ID that can vary across requests
179-
expected_metadata = OneLogin::RubySaml::Metadata.new.generate(saml_config)
179+
expected_metadata = ::RubySaml::Metadata.new.generate(saml_config)
180180
metadata_pattern = Regexp.escape(expected_metadata).gsub(/ ID='[^']+'/, " ID='[\\w-]+'")
181181
expect(response.body).to match(Regexp.new(metadata_pattern))
182182
end
@@ -197,7 +197,7 @@ def all_signed_out?
197197

198198
shared_examples 'not create SP initiated logout request' do
199199
it do
200-
expect(OneLogin::RubySaml::Logoutrequest).not_to receive(:new)
200+
expect(::RubySaml::Logoutrequest).not_to receive(:new)
201201
subject
202202
end
203203
end
@@ -261,7 +261,7 @@ def all_signed_out?
261261
session[Devise.saml_session_index_key] = 'sessionindex'
262262

263263
actual_settings = nil
264-
expect_any_instance_of(OneLogin::RubySaml::Logoutrequest).to receive(:create) do |_, settings|
264+
expect_any_instance_of(::RubySaml::Logoutrequest).to receive(:create) do |_, settings|
265265
actual_settings = settings
266266
'http://localhost:8009/saml/logout'
267267
end
@@ -319,7 +319,7 @@ def self.entity_id(params)
319319
let(:saml_response) { double(:slo_logoutresponse) }
320320
let(:response_url) { 'http://localhost/logout_response' }
321321
before do
322-
allow(OneLogin::RubySaml::SloLogoutresponse).to receive(:new).and_return(saml_response)
322+
allow(::RubySaml::SloLogoutresponse).to receive(:new).and_return(saml_response)
323323
allow(saml_response).to receive(:create).and_return(response_url)
324324
end
325325

@@ -369,7 +369,7 @@ def self.entity_id(params)
369369
end
370370
let(:name_id) { '12312312' }
371371
before do
372-
allow(OneLogin::RubySaml::SloLogoutrequest).to receive(:new).and_return(saml_request)
372+
allow(::RubySaml::SloLogoutrequest).to receive(:new).and_return(saml_request)
373373
session[Devise.saml_session_index_key] = 'sessionindex'
374374
end
375375

spec/devise_saml_authenticatable/default_attribute_map_resolver_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
let(:logger) { instance_double("Logger", info: nil) }
77
let(:rails_root) { Pathname.new("tmp") }
88

9-
let(:saml_response) { instance_double("OneLogin::RubySaml::Response") }
9+
let(:saml_response) { instance_double("::RubySaml::Response") }
1010
let(:file_contents) {
1111
<<YAML
1212
---

spec/devise_saml_authenticatable/default_idp_entity_id_reader_spec.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
let(:params) { {SAMLRequest: "logout request"} }
77
let(:slo_logout_request) { double('slo_logout_request', issuer: 'meow')}
88
before do
9-
allow(OneLogin::RubySaml::SloLogoutrequest).to receive(:new).and_return(slo_logout_request)
9+
allow(::RubySaml::SloLogoutrequest).to receive(:new).and_return(slo_logout_request)
1010
end
1111

12-
it "uses an OneLogin::RubySaml::SloLogoutrequest to get the idp_entity_id" do
13-
expect(OneLogin::RubySaml::SloLogoutrequest).to receive(:new).with("logout request", hash_including)
12+
it "uses an RubySaml::SloLogoutrequest to get the idp_entity_id" do
13+
expect(::RubySaml::SloLogoutrequest).to receive(:new).with("logout request", hash_including)
1414
expect(described_class.entity_id(params)).to eq("meow")
1515
end
1616

@@ -20,7 +20,7 @@
2020
end
2121

2222
it "allows the configured clock drift" do
23-
expect(OneLogin::RubySaml::SloLogoutrequest).to receive(:new).with("logout request", hash_including(allowed_clock_drift: 30))
23+
expect(::RubySaml::SloLogoutrequest).to receive(:new).with("logout request", hash_including(allowed_clock_drift: 30))
2424
expect(described_class.entity_id(params)).to eq("meow")
2525
end
2626
end
@@ -30,11 +30,11 @@
3030
let(:params) { {SAMLResponse: "auth response"} }
3131
let(:response) { double('response', issuers: ['meow'] )}
3232
before do
33-
allow(OneLogin::RubySaml::Response).to receive(:new).and_return(response)
33+
allow(::RubySaml::Response).to receive(:new).and_return(response)
3434
end
3535

36-
it "uses an OneLogin::RubySaml::Response to get the idp_entity_id" do
37-
expect(OneLogin::RubySaml::Response).to receive(:new).with("auth response", hash_including)
36+
it "uses an RubySaml::Response to get the idp_entity_id" do
37+
expect(::RubySaml::Response).to receive(:new).with("auth response", hash_including)
3838
expect(described_class.entity_id(params)).to eq("meow")
3939
end
4040

@@ -44,7 +44,7 @@
4444
end
4545

4646
it "allows the configured clock drift" do
47-
expect(OneLogin::RubySaml::Response).to receive(:new).with("auth response", hash_including(allowed_clock_drift: 30))
47+
expect(::RubySaml::Response).to receive(:new).with("auth response", hash_including(allowed_clock_drift: 30))
4848
expect(described_class.entity_id(params)).to eq("meow")
4949
end
5050
end

0 commit comments

Comments
 (0)