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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52fd8e2974f69cc1724772712dcc133fb7ac39b5043348702d8da1cc1e6cd96f
|
4
|
+
data.tar.gz: 504e046b7ca25c06306a7526403e1ae9d86f568cfd83983b07b270ca984a7726
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 359a084ad05f7d14463bc7a458dacec43d6563c3fc5a37db931dc08bf91dc652db782e1525567c8d2f921a811687e2295844b3b3d5322f4a5a436e3a020aca87
|
7
|
+
data.tar.gz: 05d76aefd01bc242ba5763fa6041156960f46835e2ddbd69e807b53a9404be558fe79a349addfcfb2c1a50b5e7e40b4b2cb5ff385439e8754e129115a123d691
|
@@ -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(
|
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
|
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:
|
12
|
+
date: 2025-07-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: jwt
|