Skip to content

Commit

Permalink
Merge pull request #13 from opf/fix/boolean-mapping
Browse files Browse the repository at this point in the history
Allow mapping of boolean values
  • Loading branch information
machisuji authored Nov 6, 2023
2 parents c787744 + 46fc0f9 commit d63f596
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 4 deletions.
4 changes: 3 additions & 1 deletion lib/omniauth/strategies/openid_connect/user_info.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ def mapped_attributes
mapping = default_attribute_map.merge(options.attribute_map)
values = user_info.raw_attributes.symbolize_keys
mapping.to_h do |k, possible_values|
# Avoid using filter_map here as we want to include false values
mapped_value = Array(possible_values)
.filter_map { |v| values[v.to_sym] }
.map { |v| values[v.to_sym] }
.reject { |v| v.nil? || v == '' }
.first

[k.to_sym, mapped_value]
Expand Down
2 changes: 1 addition & 1 deletion omniauth-openid-connect.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
spec.add_dependency 'addressable', '~> 2.5'
spec.add_development_dependency 'bundler', '>= 1.5'
spec.add_development_dependency 'minitest', '~> 5.1'
spec.add_development_dependency 'mocha', '~> 1.11', '>= 1.11.2'
spec.add_development_dependency 'mocha', '~> 2.1.0'
spec.add_development_dependency 'guard', '~> 2.14'
spec.add_development_dependency 'guard-minitest', '~> 2.4'
spec.add_development_dependency 'guard-bundler', '~> 2.1'
Expand Down
24 changes: 24 additions & 0 deletions test/lib/omniauth/strategies/openid_connect_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,30 @@ def test_info_custom_mapping
assert_equal 'bar', info[:login]
end

def test_info_boolean_mapping_false
strategy.options.attribute_map = { admin: 'isAdmin' }

info = strategy.info

assert_equal user_info.name, info[:name]
assert_equal user_info.email, info[:email]
assert_equal false, info[:admin]
end

def test_info_boolean_mapping_true
azure_userinfo = ::OpenIDConnect::ResponseObject::UserInfo.new(
sub: SecureRandom.hex(16),
name: Faker::Name.name,
isAdmin: true
)
strategy.stubs(:user_info).returns(azure_userinfo)
strategy.options.attribute_map = { admin: 'isAdmin' }

info = strategy.info

assert_equal true, info[:admin]
end

def test_info_mail_unique_mapping
azure_userinfo = ::OpenIDConnect::ResponseObject::UserInfo.new(
sub: SecureRandom.hex(16),
Expand Down
5 changes: 3 additions & 2 deletions test/strategy_test_case.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
class StrategyTestCase < MiniTest::Test
class StrategyTestCase < Minitest::Test
class DummyApp
def call(env); end
end
Expand Down Expand Up @@ -28,7 +28,8 @@ def user_info
phone_number: Faker::PhoneNumber.phone_number,
website: Faker::Internet.url,
# custom claim
foobar: 'bar'
foobar: 'bar',
isAdmin: false
)
end

Expand Down
1 change: 1 addition & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
lib = File.expand_path('../../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'simplecov'
require 'minitest/assertions'
require 'minitest/autorun'
require 'mocha/minitest'
require 'faker'
Expand Down

0 comments on commit d63f596

Please sign in to comment.