omniauth-microsoft-office365 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84463d49baf7efb41ce48a2c7bb69f941a4dd79e
|
4
|
+
data.tar.gz: be291be2bc42901ff687ce87478ea22f2a5b0f7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc5a8b18a576f647ecdeeebe67630557bb4426c588cc3b31bb8864351df13a1f16a9ba3e7fa054f957f542b4707096ce88993f277869918f0fc079ce4484f9c9
|
7
|
+
data.tar.gz: dc6e1a7de0a9844b3939bbb5cd0b98abc142158dc4bed889d7fc9ac858fcae9f60160b681fd4a6e0ff3a8b3e469c357d3ed5583cc0bc710b51a981598a030117
|
@@ -23,6 +23,7 @@ module OmniAuth
|
|
23
23
|
display_name: raw_info["DisplayName"],
|
24
24
|
first_name: raw_info["DisplayName"].split(", ")[1],
|
25
25
|
last_name: raw_info["DisplayName"].split(", ")[0],
|
26
|
+
image: avatar_file,
|
26
27
|
alias: raw_info["Alias"]
|
27
28
|
}
|
28
29
|
end
|
@@ -36,6 +37,27 @@ module OmniAuth
|
|
36
37
|
def raw_info
|
37
38
|
@raw_info ||= access_token.get("https://outlook.office.com/api/v2.0/me/").parsed
|
38
39
|
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def avatar_file
|
44
|
+
photo = access_token.get("https://outlook.office.com/api/v2.0/me/photo/$value")
|
45
|
+
ext = photo.content_type.sub("image/", "") # "image/jpeg" => "jpeg"
|
46
|
+
|
47
|
+
Tempfile.new(["avatar", ".#{ext}"]).tap do |file|
|
48
|
+
file.binmode
|
49
|
+
file.write(photo.body)
|
50
|
+
file.rewind
|
51
|
+
end
|
52
|
+
|
53
|
+
rescue ::OAuth2::Error => e
|
54
|
+
if e.response.status == 404 # User has no avatar...
|
55
|
+
return nil
|
56
|
+
else
|
57
|
+
raise
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
39
61
|
end
|
40
62
|
end
|
41
63
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
RSpec.describe OmniAuth::Strategies::MicrosoftOffice365 do
|
4
|
-
let(:request)
|
5
|
-
let(:
|
4
|
+
let(:request) { double("Request", params: {}, cookies: {}, env: {}) }
|
5
|
+
let(:access_token) { instance_double(OAuth2::AccessToken) }
|
6
|
+
let(:options) { { } }
|
6
7
|
|
7
8
|
let(:app) do
|
8
9
|
lambda do
|
@@ -11,12 +12,13 @@ RSpec.describe OmniAuth::Strategies::MicrosoftOffice365 do
|
|
11
12
|
end
|
12
13
|
|
13
14
|
let(:strategy) do
|
14
|
-
OmniAuth::Strategies::MicrosoftOffice365.new(app,
|
15
|
+
OmniAuth::Strategies::MicrosoftOffice365.new(app, "appid", "secret", options)
|
15
16
|
end
|
16
17
|
|
17
18
|
before do
|
18
19
|
OmniAuth.config.test_mode = true
|
19
20
|
allow(strategy).to receive(:request).and_return(request)
|
21
|
+
allow(strategy).to receive(:access_token).and_return(access_token)
|
20
22
|
end
|
21
23
|
|
22
24
|
after do
|
@@ -48,9 +50,9 @@ RSpec.describe OmniAuth::Strategies::MicrosoftOffice365 do
|
|
48
50
|
let(:options) do
|
49
51
|
{
|
50
52
|
client_options: {
|
51
|
-
|
52
|
-
|
53
|
-
|
53
|
+
"site" => "https://example.com",
|
54
|
+
"authorize_url" => "https://example.com/authorize",
|
55
|
+
"token_url" => "https://example.com/token",
|
54
56
|
}
|
55
57
|
}
|
56
58
|
end
|
@@ -84,4 +86,70 @@ RSpec.describe OmniAuth::Strategies::MicrosoftOffice365 do
|
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
89
|
+
describe "#info" do
|
90
|
+
let(:profile_response) do
|
91
|
+
instance_double(OAuth2::Response, parsed: {
|
92
|
+
"@odata.context" => "https://outlook.office.com/api/v2.0/$metadata#Me",
|
93
|
+
"@odata.id" => "https://outlook.office.com/api/v2.0/Users('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX@XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX')",
|
94
|
+
"Id" => "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX@XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
|
95
|
+
"EmailAddress" => "luke.skywalker@example.com",
|
96
|
+
"DisplayName" => "Skywalker, Luke",
|
97
|
+
"Alias" => "luke.skywalker",
|
98
|
+
"MailboxGuid" => "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY"
|
99
|
+
})
|
100
|
+
end
|
101
|
+
|
102
|
+
before do
|
103
|
+
expect(access_token).to receive(:get).with("https://outlook.office.com/api/v2.0/me/")
|
104
|
+
.and_return(profile_response)
|
105
|
+
end
|
106
|
+
|
107
|
+
context "when user provided avatar image" do
|
108
|
+
let(:avatar_response) { instance_double(OAuth2::Response, content_type: "image/jpeg", body: "JPEG_STREAM") }
|
109
|
+
|
110
|
+
before do
|
111
|
+
expect(access_token).to receive(:get).with("https://outlook.office.com/api/v2.0/me/photo/$value")
|
112
|
+
.and_return(avatar_response)
|
113
|
+
end
|
114
|
+
|
115
|
+
it "returns a hash containing normalized user data" do
|
116
|
+
expect(strategy.info).to match({
|
117
|
+
alias: "luke.skywalker",
|
118
|
+
display_name: "Skywalker, Luke",
|
119
|
+
email: "luke.skywalker@example.com",
|
120
|
+
first_name: "Luke",
|
121
|
+
last_name: "Skywalker",
|
122
|
+
image: Tempfile,
|
123
|
+
})
|
124
|
+
end
|
125
|
+
|
126
|
+
it "downloads avatar to a local file with appropriate extension" do
|
127
|
+
avatar = strategy.info[:image]
|
128
|
+
expect(avatar.binmode?).to be_truthy
|
129
|
+
expect(avatar.path).to match(/avatar.*\.jpeg\z/)
|
130
|
+
expect(avatar.read).to eq("JPEG_STREAM")
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context "when user didn't provide avatar image" do
|
135
|
+
let(:avatar_response) { instance_double(OAuth2::Response, status: 404, "error=": nil, parsed: {}, body: '') }
|
136
|
+
|
137
|
+
before do
|
138
|
+
expect(access_token).to receive(:get).with("https://outlook.office.com/api/v2.0/me/photo/$value")
|
139
|
+
.and_raise(OAuth2::Error, avatar_response)
|
140
|
+
end
|
141
|
+
|
142
|
+
it "returns a hash containing normalized user data" do
|
143
|
+
expect(strategy.info).to match({
|
144
|
+
alias: "luke.skywalker",
|
145
|
+
display_name: "Skywalker, Luke",
|
146
|
+
email: "luke.skywalker@example.com",
|
147
|
+
first_name: "Luke",
|
148
|
+
last_name: "Skywalker",
|
149
|
+
image: nil,
|
150
|
+
})
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
87
155
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-microsoft-office365
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcin Urbański
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: omniauth
|