Skip to content

Commit d63f596

Browse files
authored
Merge pull request #13 from opf/fix/boolean-mapping
Allow mapping of boolean values
2 parents c787744 + 46fc0f9 commit d63f596

File tree

5 files changed

+32
-4
lines changed

5 files changed

+32
-4
lines changed

lib/omniauth/strategies/openid_connect/user_info.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ def mapped_attributes
2828
mapping = default_attribute_map.merge(options.attribute_map)
2929
values = user_info.raw_attributes.symbolize_keys
3030
mapping.to_h do |k, possible_values|
31+
# Avoid using filter_map here as we want to include false values
3132
mapped_value = Array(possible_values)
32-
.filter_map { |v| values[v.to_sym] }
33+
.map { |v| values[v.to_sym] }
34+
.reject { |v| v.nil? || v == '' }
3335
.first
3436

3537
[k.to_sym, mapped_value]

omniauth-openid-connect.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
2424
spec.add_dependency 'addressable', '~> 2.5'
2525
spec.add_development_dependency 'bundler', '>= 1.5'
2626
spec.add_development_dependency 'minitest', '~> 5.1'
27-
spec.add_development_dependency 'mocha', '~> 1.11', '>= 1.11.2'
27+
spec.add_development_dependency 'mocha', '~> 2.1.0'
2828
spec.add_development_dependency 'guard', '~> 2.14'
2929
spec.add_development_dependency 'guard-minitest', '~> 2.4'
3030
spec.add_development_dependency 'guard-bundler', '~> 2.1'

test/lib/omniauth/strategies/openid_connect_test.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,30 @@ def test_info_custom_mapping
363363
assert_equal 'bar', info[:login]
364364
end
365365

366+
def test_info_boolean_mapping_false
367+
strategy.options.attribute_map = { admin: 'isAdmin' }
368+
369+
info = strategy.info
370+
371+
assert_equal user_info.name, info[:name]
372+
assert_equal user_info.email, info[:email]
373+
assert_equal false, info[:admin]
374+
end
375+
376+
def test_info_boolean_mapping_true
377+
azure_userinfo = ::OpenIDConnect::ResponseObject::UserInfo.new(
378+
sub: SecureRandom.hex(16),
379+
name: Faker::Name.name,
380+
isAdmin: true
381+
)
382+
strategy.stubs(:user_info).returns(azure_userinfo)
383+
strategy.options.attribute_map = { admin: 'isAdmin' }
384+
385+
info = strategy.info
386+
387+
assert_equal true, info[:admin]
388+
end
389+
366390
def test_info_mail_unique_mapping
367391
azure_userinfo = ::OpenIDConnect::ResponseObject::UserInfo.new(
368392
sub: SecureRandom.hex(16),

test/strategy_test_case.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
class StrategyTestCase < MiniTest::Test
1+
class StrategyTestCase < Minitest::Test
22
class DummyApp
33
def call(env); end
44
end
@@ -28,7 +28,8 @@ def user_info
2828
phone_number: Faker::PhoneNumber.phone_number,
2929
website: Faker::Internet.url,
3030
# custom claim
31-
foobar: 'bar'
31+
foobar: 'bar',
32+
isAdmin: false
3233
)
3334
end
3435

test/test_helper.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
lib = File.expand_path('../../lib', __FILE__)
22
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
33
require 'simplecov'
4+
require 'minitest/assertions'
45
require 'minitest/autorun'
56
require 'mocha/minitest'
67
require 'faker'

0 commit comments

Comments
 (0)