omniauth-microsoft_graph 2.0.1 → 2.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d89d349bdaa2e7c2d75edf01ef55baa73fb647ec0ce79a6542ad946e84f6cfe4
4
- data.tar.gz: 7d1f758e047e86b318f8d71007d3ba5735b771a1075726c49b8a2e95bc7cbdff
3
+ metadata.gz: 52fd8e2974f69cc1724772712dcc133fb7ac39b5043348702d8da1cc1e6cd96f
4
+ data.tar.gz: 504e046b7ca25c06306a7526403e1ae9d86f568cfd83983b07b270ca984a7726
5
5
  SHA512:
6
- metadata.gz: afdcf7236c17dc9a213c64a44b7dc8a81e6ee46bd34696ad3889ef9207066eb46b51a8efe5cf88612975356d8d126b24714f0f0bdf8a4e3fad216eeb26b34b8c
7
- data.tar.gz: a6f547877dacd8c7dbfcd1f8299a2fc432de9b1712b2bf74f8ae50326c360b524a790f1b63a1f9803795b51c49ff88ac9e4d2f94572454482dc4972f39334a35
6
+ metadata.gz: 359a084ad05f7d14463bc7a458dacec43d6563c3fc5a37db931dc08bf91dc652db782e1525567c8d2f921a811687e2295844b3b3d5322f4a5a436e3a020aca87
7
+ data.tar.gz: 05d76aefd01bc242ba5763fa6041156960f46835e2ddbd69e807b53a9404be558fe79a349addfcfb2c1a50b5e7e40b4b2cb5ff385439e8754e129115a123d691
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module MicrosoftGraph
3
- VERSION = "2.0.1"
3
+ VERSION = "2.1.0"
4
4
  end
5
5
  end
@@ -6,6 +6,8 @@ module OmniAuth
6
6
  BASE_SCOPE_URL = 'https://graph.microsoft.com/'
7
7
  BASE_SCOPES = %w[offline_access openid email profile].freeze
8
8
  DEFAULT_SCOPE = 'offline_access openid email profile User.Read'.freeze
9
+ YAMMER_PROFILE_URL = 'https://www.yammer.com/api/v1/users/current.json'
10
+ MICROSOFT_GRAPH_PROFILE_URL = 'https://graph.microsoft.com/v1.0/me'
9
11
 
10
12
  option :name, :microsoft_graph
11
13
 
@@ -64,7 +66,7 @@ module OmniAuth
64
66
  end
65
67
 
66
68
  def raw_info
67
- @raw_info ||= access_token.get('https://graph.microsoft.com/v1.0/me').parsed
69
+ @raw_info ||= access_token.get(profile_endpoint).parsed
68
70
  end
69
71
 
70
72
  def callback_url
@@ -73,11 +75,27 @@ module OmniAuth
73
75
 
74
76
  def custom_build_access_token
75
77
  access_token = get_access_token(request)
78
+ # Get the profile(microsoft graph / yammer) endpoint choice based on returned bearer token
79
+ @profile_endpoint = determine_profile_endpoint(request)
76
80
  access_token
77
81
  end
78
82
 
79
83
  alias build_access_token custom_build_access_token
80
84
 
85
+ def profile_endpoint
86
+ @profile_endpoint ||= MICROSOFT_GRAPH_PROFILE_URL
87
+ end
88
+
89
+ def determine_profile_endpoint(request)
90
+ scope = request&.env&.dig('omniauth.params', 'scope')
91
+
92
+ if scope&.include?('yammer')
93
+ YAMMER_PROFILE_URL
94
+ else
95
+ MICROSOFT_GRAPH_PROFILE_URL
96
+ end
97
+ end
98
+
81
99
  private
82
100
 
83
101
  def get_access_token(request)
@@ -457,4 +457,82 @@ describe OmniAuth::Strategies::MicrosoftGraph do
457
457
  end.to raise_error(OAuth2::Error)
458
458
  end
459
459
  end
460
+
461
+ describe 'Yammer profile endpoint support' do
462
+ describe '#profile_endpoint' do
463
+ context 'when no profile endpoint is determined' do
464
+ it 'defaults to Microsoft Graph profile URL' do
465
+ expect(subject.profile_endpoint).to eq('https://graph.microsoft.com/v1.0/me')
466
+ end
467
+ end
468
+
469
+ context 'when profile endpoint is already set' do
470
+ before { subject.instance_variable_set(:@profile_endpoint, 'https://custom.endpoint.com') }
471
+
472
+ it 'returns the previously set endpoint' do
473
+ expect(subject.profile_endpoint).to eq('https://custom.endpoint.com')
474
+ end
475
+ end
476
+ end
477
+
478
+ describe '#determine_profile_endpoint' do
479
+ let(:request) { double('Request', env: request_env) }
480
+
481
+ context 'when scope includes Yammer access_as_user scope' do
482
+ let(:request_env) { { 'omniauth.params' => { 'scope' => 'https://api.yammer.com/access_as_user' } } }
483
+
484
+ it 'returns Yammer profile URL' do
485
+ expect(subject.determine_profile_endpoint(request)).to eq('https://www.yammer.com/api/v1/users/current.json')
486
+ end
487
+ end
488
+
489
+ context 'when scope includes Yammer user_impersonation scope' do
490
+ let(:request_env) { { 'omniauth.params' => { 'scope' => 'openid profile https://api.yammer.com/user_impersonation' } } }
491
+
492
+ it 'returns Yammer profile URL' do
493
+ expect(subject.determine_profile_endpoint(request)).to eq('https://www.yammer.com/api/v1/users/current.json')
494
+ end
495
+ end
496
+
497
+ context 'when scope includes Yammer scope among other scopes' do
498
+ let(:request_env) { { 'omniauth.params' => { 'scope' => 'offline_access openid email profile https://api.yammer.com/access_as_user User.Read' } } }
499
+
500
+ it 'returns Yammer profile URL' do
501
+ expect(subject.determine_profile_endpoint(request)).to eq('https://www.yammer.com/api/v1/users/current.json')
502
+ end
503
+ end
504
+
505
+ context 'when scope includes multiple Yammer scopes' do
506
+ let(:request_env) { { 'omniauth.params' => { 'scope' => 'openid profile https://api.yammer.com/access_as_user https://api.yammer.com/user_impersonation' } } }
507
+
508
+ it 'returns Yammer profile URL' do
509
+ expect(subject.determine_profile_endpoint(request)).to eq('https://www.yammer.com/api/v1/users/current.json')
510
+ end
511
+ end
512
+
513
+ context 'when scope does not include any Yammer scopes' do
514
+ let(:request_env) { { 'omniauth.params' => { 'scope' => 'openid profile User.Read' } } }
515
+
516
+ it 'returns Microsoft Graph profile URL' do
517
+ expect(subject.determine_profile_endpoint(request)).to eq('https://graph.microsoft.com/v1.0/me')
518
+ end
519
+ end
520
+
521
+ context 'when scope is nil' do
522
+ let(:request_env) { { 'omniauth.params' => { 'scope' => nil } } }
523
+
524
+ it 'returns Microsoft Graph profile URL' do
525
+ expect(subject.determine_profile_endpoint(request)).to eq('https://graph.microsoft.com/v1.0/me')
526
+ end
527
+ end
528
+
529
+ context 'when omniauth.params is nil' do
530
+ let(:request_env) { { 'omniauth.params' => nil } }
531
+
532
+ it 'returns Microsoft Graph profile URL' do
533
+ expect(subject.determine_profile_endpoint(request)).to eq('https://graph.microsoft.com/v1.0/me')
534
+ end
535
+ end
536
+ end
537
+ end
460
538
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-microsoft_graph
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Philips
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-06-02 00:00:00.000000000 Z
12
+ date: 2025-07-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jwt