lifen 0.2.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -1
- data/README.md +11 -11
- data/lib/lifen.rb +7 -4
- data/lib/lifen/app_authenticated_client.rb +15 -27
- data/lib/lifen/client.rb +44 -0
- data/lib/lifen/configuration.rb +1 -1
- data/lib/lifen/error.rb +1 -0
- data/lib/lifen/flow.rb +41 -44
- data/lib/lifen/flows.rb +4 -8
- data/lib/lifen/status.rb +5 -3
- data/lib/lifen/token.rb +44 -0
- data/lib/lifen/user.rb +34 -23
- data/lib/lifen/user_authenticated_client.rb +17 -27
- data/lib/lifen/version.rb +1 -1
- data/lifen.gemspec +1 -0
- data/spec/cassettes/flows/attach_users/invalid_flow_uuid.yml +11 -13
- data/spec/cassettes/flows/attach_users/invalid_user_uuid.yml +12 -14
- data/spec/cassettes/flows/attach_users/valid.yml +14 -16
- data/spec/cassettes/flows/create.yml +13 -15
- data/spec/cassettes/flows/create_with_users.yml +12 -13
- data/spec/cassettes/flows/detach_users/valid.yml +14 -16
- data/spec/cassettes/flows/internal_error.yml +4 -2
- data/spec/cassettes/flows/internal_error_without_trace_id.yml +4 -2
- data/spec/cassettes/flows/invalid_token.yml +18 -14
- data/spec/cassettes/flows/valid_token.yml +14 -17
- data/spec/cassettes/messages/valid_message.yml +13 -15
- data/spec/cassettes/users/create/existing_user.yml +11 -11
- data/spec/cassettes/users/create/invalid_token.yml +16 -10
- data/spec/cassettes/users/create/missing_fields.yml +19 -14
- data/spec/cassettes/users/create/valid_attributes.yml +12 -12
- data/spec/cassettes/users/{refresh_unread_messages → status/refresh}/invalid_token.yml +16 -12
- data/spec/cassettes/users/{refresh_unread_messages → status/refresh}/valid_token.yml +10 -12
- data/spec/cassettes/users/token/refresh/invalid_user_uuid.yml +40 -0
- data/spec/cassettes/users/{refresh/invalid_user_uuid.yml → token/refresh/valid_user_uuid.yml} +16 -15
- data/spec/flows_spec.rb +43 -25
- data/spec/messages_spec.rb +10 -5
- data/spec/spec_helper.rb +1 -1
- data/spec/users_spec.rb +46 -26
- metadata +25 -13
- data/lib/lifen/authentication.rb +0 -29
- data/spec/cassettes/flows/detach_users/valid_again.yml +0 -57
- data/spec/cassettes/users/refresh/valid_user_uuid.yml +0 -54
data/spec/users_spec.rb
CHANGED
@@ -2,15 +2,20 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Lifen::User do
|
4
4
|
|
5
|
+
let(:valid_token_value) { "valid_token" }
|
6
|
+
|
7
|
+
let(:invalid_token) { Lifen::Token.new(value: "invalid_token", expires_at: Time.now.to_i + 60) }
|
8
|
+
let(:valid_token) { Lifen::Token.new(value: valid_token_value, expires_at: Time.now.to_i + 60) }
|
9
|
+
|
5
10
|
describe ':create' do
|
6
11
|
context 'missing field' do
|
7
12
|
|
8
|
-
let(:user) { Lifen::User.new() }
|
13
|
+
let(:user) { Lifen::User.new(first_name: "Marc") }
|
9
14
|
|
10
15
|
it 'raises an error' do
|
11
16
|
expect{
|
12
17
|
VCR.use_cassette "users/create/missing_fields" do
|
13
|
-
user.create
|
18
|
+
user.create
|
14
19
|
end
|
15
20
|
}.to raise_error(Lifen::Error)
|
16
21
|
end
|
@@ -22,42 +27,41 @@ describe Lifen::User do
|
|
22
27
|
|
23
28
|
before do
|
24
29
|
Lifen.configure do |config|
|
25
|
-
config.
|
30
|
+
config.application_access_token = "invalid-secret-key"
|
26
31
|
end
|
27
32
|
end
|
28
33
|
|
29
34
|
it 'raises an error' do
|
30
35
|
expect{
|
31
36
|
VCR.use_cassette "users/create/invalid_token" do
|
32
|
-
user.create
|
37
|
+
user.create
|
33
38
|
end
|
34
39
|
}.to raise_error(Lifen::InvalidSecretTokenError)
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
38
43
|
context 'exisiting user' do
|
39
|
-
let(:user) { Lifen::User.new(email: "existing-user@domain.tld") }
|
44
|
+
let(:user) { Lifen::User.new(email: "existing-user@domain.tld", first_name: "Existing", last_name: "User") }
|
40
45
|
|
41
46
|
it 'creates the user' do
|
42
47
|
|
43
48
|
expect{
|
44
49
|
VCR.use_cassette "users/create/existing_user" do
|
45
|
-
user.create
|
50
|
+
user.create
|
46
51
|
end
|
47
52
|
}.to raise_error(Lifen::UserAlreadyExistingError)
|
48
53
|
end
|
49
54
|
end
|
50
55
|
|
51
56
|
context 'valid attributes' do
|
52
|
-
let(:user) { Lifen::User.new(email: "valid-email-spec@domain.tld") }
|
57
|
+
let(:user) { Lifen::User.new(email: "valid-email-spec@domain.tld", first_name: "Valid", last_name: "User") }
|
53
58
|
|
54
59
|
it 'creates the user' do
|
55
60
|
|
56
61
|
VCR.use_cassette "users/create/valid_attributes" do
|
57
|
-
user.create
|
62
|
+
user.create
|
58
63
|
end
|
59
64
|
|
60
|
-
expect(user.token).to_not be_nil
|
61
65
|
expect(user.uuid).to_not be_nil
|
62
66
|
end
|
63
67
|
end
|
@@ -65,7 +69,7 @@ describe Lifen::User do
|
|
65
69
|
end
|
66
70
|
|
67
71
|
|
68
|
-
describe ':
|
72
|
+
describe ':token.refresh' do
|
69
73
|
|
70
74
|
context 'invalid user uuid' do
|
71
75
|
|
@@ -73,8 +77,8 @@ describe Lifen::User do
|
|
73
77
|
|
74
78
|
it 'raises an error' do
|
75
79
|
expect{
|
76
|
-
VCR.use_cassette "users/refresh/invalid_user_uuid" do
|
77
|
-
user.
|
80
|
+
VCR.use_cassette "users/token/refresh/invalid_user_uuid" do
|
81
|
+
user.token.refresh
|
78
82
|
end
|
79
83
|
}.to raise_error(Lifen::Error)
|
80
84
|
end
|
@@ -82,33 +86,48 @@ describe Lifen::User do
|
|
82
86
|
|
83
87
|
context 'valid user uuid' do
|
84
88
|
|
85
|
-
let(:user) { Lifen::User.new(uuid: "
|
89
|
+
let(:user) { Lifen::User.new(uuid: "11e6be14-8267-25ee-a3bd-0242ac110002") }
|
86
90
|
|
87
91
|
it 'raises an error' do
|
88
92
|
|
89
|
-
|
93
|
+
previous_token_value = user.token.value
|
94
|
+
|
95
|
+
VCR.use_cassette "users/token/refresh/valid_user_uuid" do
|
96
|
+
user.token.refresh
|
97
|
+
end
|
98
|
+
|
99
|
+
expect(user.token.value).to_not be_nil
|
100
|
+
expect(user.token.value).to_not eq previous_token_value
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe 'expired token' do
|
105
|
+
|
106
|
+
let(:expired_token) { Lifen::Token.new(value: "valid_token", expires_at: Time.now.to_i - 60) }
|
107
|
+
let(:user) { Lifen::User.new(token: expired_token) }
|
90
108
|
|
91
|
-
|
92
|
-
|
109
|
+
|
110
|
+
it 'refreshs the token' do
|
111
|
+
expect(expired_token).to receive(:refresh) do
|
112
|
+
expired_token.expires_at = Time.now.to_i + 60
|
93
113
|
end
|
94
114
|
|
95
|
-
|
96
|
-
expect(user.token).to_not eq previous_token
|
115
|
+
expired_token.refresh_once_if_needed
|
97
116
|
end
|
117
|
+
|
98
118
|
end
|
99
119
|
|
100
120
|
end
|
101
121
|
|
102
|
-
describe ':
|
122
|
+
describe ':status.refresh' do
|
103
123
|
|
104
124
|
context 'invalid token' do
|
105
|
-
|
106
|
-
let(:user) { Lifen::User.new(token: "invalid_token") }
|
125
|
+
let(:user) { Lifen::User.new(token: invalid_token) }
|
107
126
|
|
108
127
|
it 'raises an error' do
|
109
128
|
expect{
|
110
|
-
VCR.use_cassette "users/
|
111
|
-
user.
|
129
|
+
VCR.use_cassette "users/status/refresh/invalid_token" do
|
130
|
+
user.status.refresh
|
112
131
|
end
|
113
132
|
}.to raise_error(Lifen::Error)
|
114
133
|
end
|
@@ -116,11 +135,12 @@ describe Lifen::User do
|
|
116
135
|
|
117
136
|
context 'valid token' do
|
118
137
|
|
119
|
-
let(:
|
138
|
+
# let(:valid_token_value) { "REPLACE_ME" }
|
139
|
+
let(:user) { Lifen::User.new(token: valid_token) }
|
120
140
|
|
121
141
|
it 'raises an error' do
|
122
|
-
VCR.use_cassette "users/
|
123
|
-
user.
|
142
|
+
VCR.use_cassette "users/status/refresh/valid_token" do
|
143
|
+
user.status.refresh
|
124
144
|
end
|
125
145
|
|
126
146
|
expect(user.unread_messages).to eq 2
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lifen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Etienne Depaulis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: inflecto
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: faraday
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -139,7 +153,6 @@ files:
|
|
139
153
|
- Rakefile
|
140
154
|
- lib/lifen.rb
|
141
155
|
- lib/lifen/app_authenticated_client.rb
|
142
|
-
- lib/lifen/authentication.rb
|
143
156
|
- lib/lifen/base.rb
|
144
157
|
- lib/lifen/client.rb
|
145
158
|
- lib/lifen/configuration.rb
|
@@ -148,6 +161,7 @@ files:
|
|
148
161
|
- lib/lifen/flows.rb
|
149
162
|
- lib/lifen/message.rb
|
150
163
|
- lib/lifen/status.rb
|
164
|
+
- lib/lifen/token.rb
|
151
165
|
- lib/lifen/user.rb
|
152
166
|
- lib/lifen/user_authenticated_client.rb
|
153
167
|
- lib/lifen/version.rb
|
@@ -158,7 +172,6 @@ files:
|
|
158
172
|
- spec/cassettes/flows/create.yml
|
159
173
|
- spec/cassettes/flows/create_with_users.yml
|
160
174
|
- spec/cassettes/flows/detach_users/valid.yml
|
161
|
-
- spec/cassettes/flows/detach_users/valid_again.yml
|
162
175
|
- spec/cassettes/flows/internal_error.yml
|
163
176
|
- spec/cassettes/flows/internal_error_without_trace_id.yml
|
164
177
|
- spec/cassettes/flows/invalid_token.yml
|
@@ -168,10 +181,10 @@ files:
|
|
168
181
|
- spec/cassettes/users/create/invalid_token.yml
|
169
182
|
- spec/cassettes/users/create/missing_fields.yml
|
170
183
|
- spec/cassettes/users/create/valid_attributes.yml
|
171
|
-
- spec/cassettes/users/refresh/
|
172
|
-
- spec/cassettes/users/refresh/
|
173
|
-
- spec/cassettes/users/
|
174
|
-
- spec/cassettes/users/
|
184
|
+
- spec/cassettes/users/status/refresh/invalid_token.yml
|
185
|
+
- spec/cassettes/users/status/refresh/valid_token.yml
|
186
|
+
- spec/cassettes/users/token/refresh/invalid_user_uuid.yml
|
187
|
+
- spec/cassettes/users/token/refresh/valid_user_uuid.yml
|
175
188
|
- spec/flows_spec.rb
|
176
189
|
- spec/messages_spec.rb
|
177
190
|
- spec/spec_helper.rb
|
@@ -207,7 +220,6 @@ test_files:
|
|
207
220
|
- spec/cassettes/flows/create.yml
|
208
221
|
- spec/cassettes/flows/create_with_users.yml
|
209
222
|
- spec/cassettes/flows/detach_users/valid.yml
|
210
|
-
- spec/cassettes/flows/detach_users/valid_again.yml
|
211
223
|
- spec/cassettes/flows/internal_error.yml
|
212
224
|
- spec/cassettes/flows/internal_error_without_trace_id.yml
|
213
225
|
- spec/cassettes/flows/invalid_token.yml
|
@@ -217,10 +229,10 @@ test_files:
|
|
217
229
|
- spec/cassettes/users/create/invalid_token.yml
|
218
230
|
- spec/cassettes/users/create/missing_fields.yml
|
219
231
|
- spec/cassettes/users/create/valid_attributes.yml
|
220
|
-
- spec/cassettes/users/refresh/
|
221
|
-
- spec/cassettes/users/refresh/
|
222
|
-
- spec/cassettes/users/
|
223
|
-
- spec/cassettes/users/
|
232
|
+
- spec/cassettes/users/status/refresh/invalid_token.yml
|
233
|
+
- spec/cassettes/users/status/refresh/valid_token.yml
|
234
|
+
- spec/cassettes/users/token/refresh/invalid_user_uuid.yml
|
235
|
+
- spec/cassettes/users/token/refresh/valid_user_uuid.yml
|
224
236
|
- spec/flows_spec.rb
|
225
237
|
- spec/messages_spec.rb
|
226
238
|
- spec/spec_helper.rb
|
data/lib/lifen/authentication.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
module Lifen
|
2
|
-
class Authentication < Base
|
3
|
-
|
4
|
-
attribute :user, Lifen::User
|
5
|
-
|
6
|
-
attribute :uuid, String
|
7
|
-
attribute :token, String
|
8
|
-
|
9
|
-
def register!
|
10
|
-
json = client.post("authentication/api/register/third_party", {emailAddress: user.email, lastName: user.last_name, firstName: user.first_name})
|
11
|
-
|
12
|
-
self.token = json["token"]
|
13
|
-
self.uuid = json["accountUuid"]
|
14
|
-
end
|
15
|
-
|
16
|
-
def refresh_token
|
17
|
-
json = client.post("authentication/api/authenticate/third_party", {accountUuid: user.uuid})
|
18
|
-
|
19
|
-
self.token = json.first["token"]
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def client
|
25
|
-
@client ||= AppAuthenticatedClient.new
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: post
|
5
|
-
uri: https://develop.lifen.fr/central/api/chats/11e65eca-4af7-d795-bf1a-0242ac110002/detach_users?rel=activeUsers
|
6
|
-
body:
|
7
|
-
encoding: UTF-8
|
8
|
-
string: '["25588996-4ff1-2dbb-9643-eabb809fa654"]'
|
9
|
-
headers:
|
10
|
-
User-Agent:
|
11
|
-
- Faraday v0.9.2
|
12
|
-
X-Auth-Token:
|
13
|
-
- valid_token
|
14
|
-
Content-Type:
|
15
|
-
- application/json
|
16
|
-
Accept-Encoding:
|
17
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
-
Accept:
|
19
|
-
- "*/*"
|
20
|
-
response:
|
21
|
-
status:
|
22
|
-
code: 200
|
23
|
-
message: OK
|
24
|
-
headers:
|
25
|
-
Server:
|
26
|
-
- Apache-Coyote/1.1
|
27
|
-
X-B3-Sampled:
|
28
|
-
- '1'
|
29
|
-
X-B3-Spanid:
|
30
|
-
- 65008d9ee1e9b85c
|
31
|
-
X-B3-Traceid:
|
32
|
-
- 65008d9ee1e9b85c
|
33
|
-
X-Content-Type-Options:
|
34
|
-
- nosniff
|
35
|
-
X-Xss-Protection:
|
36
|
-
- 1; mode=block
|
37
|
-
Cache-Control:
|
38
|
-
- no-cache, no-store, max-age=0, must-revalidate
|
39
|
-
Pragma:
|
40
|
-
- no-cache
|
41
|
-
Expires:
|
42
|
-
- '0'
|
43
|
-
Content-Type:
|
44
|
-
- application/hal+json;charset=UTF-8
|
45
|
-
Transfer-Encoding:
|
46
|
-
- chunked
|
47
|
-
Date:
|
48
|
-
- Wed, 10 Aug 2016 07:37:16 GMT
|
49
|
-
Connection:
|
50
|
-
- close
|
51
|
-
body:
|
52
|
-
encoding: UTF-8
|
53
|
-
string: '{"uuid":"11e65eca-4af7-d795-bf1a-0242ac110002","version":0,"title":"Rspec
|
54
|
-
Flow","activeUsers":[],"type":"regular"}'
|
55
|
-
http_version:
|
56
|
-
recorded_at: Wed, 10 Aug 2016 07:37:16 GMT
|
57
|
-
recorded_with: VCR 3.0.3
|
@@ -1,54 +0,0 @@
|
|
1
|
-
---
|
2
|
-
http_interactions:
|
3
|
-
- request:
|
4
|
-
method: post
|
5
|
-
uri: https://develop.lifen.fr/authentication/api/authenticate/third_party
|
6
|
-
body:
|
7
|
-
encoding: UTF-8
|
8
|
-
string: '{"accountUuid":"valid_uuid"}'
|
9
|
-
headers:
|
10
|
-
User-Agent:
|
11
|
-
- Faraday v0.9.2
|
12
|
-
Secret-Key:
|
13
|
-
- valid_secret_key
|
14
|
-
Content-Type:
|
15
|
-
- application/json
|
16
|
-
Accept-Encoding:
|
17
|
-
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
-
Accept:
|
19
|
-
- "*/*"
|
20
|
-
response:
|
21
|
-
status:
|
22
|
-
code: 200
|
23
|
-
message: OK
|
24
|
-
headers:
|
25
|
-
Server:
|
26
|
-
- Apache-Coyote/1.1
|
27
|
-
X-B3-Sampled:
|
28
|
-
- '1'
|
29
|
-
X-B3-Spanid:
|
30
|
-
- 510282ea864e9c04
|
31
|
-
X-B3-Traceid:
|
32
|
-
- 510282ea864e9c04
|
33
|
-
X-Content-Type-Options:
|
34
|
-
- nosniff
|
35
|
-
X-Xss-Protection:
|
36
|
-
- 1; mode=block
|
37
|
-
Cache-Control:
|
38
|
-
- no-cache, no-store, max-age=0, must-revalidate
|
39
|
-
Pragma:
|
40
|
-
- no-cache
|
41
|
-
Expires:
|
42
|
-
- '0'
|
43
|
-
Content-Type:
|
44
|
-
- application/hal+json;charset=UTF-8
|
45
|
-
Transfer-Encoding:
|
46
|
-
- chunked
|
47
|
-
Date:
|
48
|
-
- Wed, 07 Sep 2016 12:46:43 GMT
|
49
|
-
body:
|
50
|
-
encoding: UTF-8
|
51
|
-
string: '[{"uuid":"valid_uuid","version":0,"token":"2VHHqKwuYeTsi+N35FAyjhKK3LCVsXbZXqwYpJtCvgRXAYW5/JJxCtHD0O7or9ej/YGYg31tHQhbUiTH+4sCSUzPLkaqw0DSAzgAD1+mSOH9k6C4TggCEieUJqpzXR2ipJ2nt36eOgda8GuqXhvQKpkh5Y8lDbJZEN0G6rj+tTIHim+577ypcoJbSTgTGDnx9DtwkwK3iPZhZOPgh3VIUXcsCjV0LV3u","role":"THIRD_PARTY","profilePicUrl":"","firstName":"N/A","lastName":"N/A","locale":"fr","registered":true,"activated":true,"informed":false,"email":"valid-email-spec@domain.tld","default":true}]'
|
52
|
-
http_version:
|
53
|
-
recorded_at: Wed, 07 Sep 2016 12:46:40 GMT
|
54
|
-
recorded_with: VCR 3.0.3
|