sso 0.1.0.beta2 → 0.1.1
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 +4 -4
- data/lib/sso/benchmarking.rb +1 -0
- data/lib/sso/client/authentications/passport.rb +21 -13
- data/lib/sso/client/passport_verifier.rb +2 -2
- data/lib/sso/server.rb +0 -1
- data/lib/sso/server/configuration.rb +5 -3
- data/lib/sso/server/middleware/passport_destruction.rb +1 -1
- data/lib/sso/server/middleware/passport_exchange.rb +2 -2
- data/lib/sso/server/passport.rb +2 -2
- data/lib/sso/server/warden/hooks/before_logout.rb +2 -0
- data/spec/dummy/config/initializers/warden.rb +0 -1
- data/spec/lib/sso/client/warden/hooks/after_fetch_spec.rb +16 -0
- data/spec/lib/sso/client/warden/strategies/passport_spec.rb +81 -0
- data/spec/lib/sso/server/configuration_spec.rb +156 -0
- data/spec/lib/sso/server/warden/hooks/before_logout_spec.rb +43 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/sso/test/helpers.rb +7 -0
- metadata +9 -4
- data/lib/sso/server/geolocations.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3427c7a74fc824e4a590aae4dedb206cd0c3f89c
|
4
|
+
data.tar.gz: 13355ce7e47c5088774fc5608b453dee91578136
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 976e470dbb0a78ac0184a6a5d4381af04008cf158516d4b9106b08ad3eb2865257e6da196ba4affdd4e2318e50bb1f4aeed67e5b8fd6c47c4b2a8bfe1c96b5ff
|
7
|
+
data.tar.gz: c4cf08a461736d1df4ff3ff88a69fa6c424354cfe1739d6e561839b3f7f9798484cc75b86e20e48f0d7556441e4bb71757c033efd0deb0dbafcdb7868392fd18
|
data/lib/sso/benchmarking.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module SSO
|
2
2
|
module Client
|
3
3
|
module Authentications
|
4
|
+
# Logic to authenticate a Passport provided by an outsider app to an insider app.
|
4
5
|
class Passport
|
5
6
|
include ::SSO::Logging
|
6
7
|
include ::SSO::Benchmarking
|
@@ -12,11 +13,11 @@ module SSO
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def authenticate
|
15
|
-
debug {
|
16
|
+
debug { 'Performing authentication...' }
|
16
17
|
result = authenticate!
|
17
18
|
|
18
19
|
if result.success?
|
19
|
-
debug {
|
20
|
+
debug { 'Authentication succeeded.' }
|
20
21
|
return result
|
21
22
|
end
|
22
23
|
|
@@ -65,7 +66,18 @@ module SSO
|
|
65
66
|
end
|
66
67
|
|
67
68
|
def verifier
|
68
|
-
::SSO::Client::PassportVerifier.new
|
69
|
+
::SSO::Client::PassportVerifier.new verifier_options
|
70
|
+
end
|
71
|
+
|
72
|
+
def verifier_options
|
73
|
+
{
|
74
|
+
passport_id: passport_id,
|
75
|
+
passport_state: 'refresh',
|
76
|
+
passport_secret: chip_passport_secret,
|
77
|
+
user_ip: ip,
|
78
|
+
user_agent: agent,
|
79
|
+
device_id: device_id,
|
80
|
+
}
|
69
81
|
end
|
70
82
|
|
71
83
|
def verification
|
@@ -78,7 +90,7 @@ module SSO
|
|
78
90
|
end
|
79
91
|
|
80
92
|
def signature_request
|
81
|
-
debug { "Verifying signature of #{request.request_method.inspect} #{request.path.inspect} #{request.params.inspect}"}
|
93
|
+
debug { "Verifying signature of #{request.request_method.inspect} #{request.path.inspect} #{request.params.inspect}" }
|
82
94
|
::Signature::Request.new request.request_method, request.path, request.params
|
83
95
|
end
|
84
96
|
|
@@ -93,7 +105,7 @@ module SSO
|
|
93
105
|
end
|
94
106
|
|
95
107
|
def chip_decryption
|
96
|
-
debug { "Validating chip decryptability of raw chip #{chip.inspect}"}
|
108
|
+
debug { "Validating chip decryptability of raw chip #{chip.inspect}" }
|
97
109
|
yield Operations.failure(:missing_chip, object: params) if chip.blank?
|
98
110
|
yield Operations.failure(:missing_chip_key) unless chip_key
|
99
111
|
yield Operations.failure(:missing_chip_iv) unless chip_iv
|
@@ -115,7 +127,7 @@ module SSO
|
|
115
127
|
decipher.key = chip_key
|
116
128
|
decipher.iv = chip_iv
|
117
129
|
plaintext = decipher.update(chip_ciphertext) + decipher.final
|
118
|
-
logger.debug { "Decryptied chip plaintext #{plaintext.inspect} using key #{chip_key.inspect} and iv #{chip_iv.inspect} and ciphertext #{chip_ciphertext.inspect}"}
|
130
|
+
logger.debug { "Decryptied chip plaintext #{plaintext.inspect} using key #{chip_key.inspect} and iv #{chip_iv.inspect} and ciphertext #{chip_ciphertext.inspect}" }
|
119
131
|
plaintext
|
120
132
|
end
|
121
133
|
end
|
@@ -130,12 +142,12 @@ module SSO
|
|
130
142
|
|
131
143
|
def chip_belongs_to_passport?
|
132
144
|
unless passport_id
|
133
|
-
debug {
|
145
|
+
debug { 'Unknown passport_id' }
|
134
146
|
return false
|
135
147
|
end
|
136
148
|
|
137
149
|
unless chip_passport_id
|
138
|
-
debug {
|
150
|
+
debug { 'Unknown passport_id' }
|
139
151
|
return false
|
140
152
|
end
|
141
153
|
|
@@ -180,15 +192,11 @@ module SSO
|
|
180
192
|
params['passport_chip']
|
181
193
|
end
|
182
194
|
|
183
|
-
#def warden
|
184
|
-
# request.env['warden']
|
185
|
-
#end
|
186
|
-
|
187
195
|
def chip_digest
|
188
196
|
::OpenSSL::Cipher::AES256.new :CBC
|
189
197
|
end
|
190
198
|
|
191
|
-
# TODO Use ActionDispatch
|
199
|
+
# TODO: Use ActionDispatch::Request#remote_ip
|
192
200
|
def ip
|
193
201
|
request.ip
|
194
202
|
end
|
@@ -15,7 +15,7 @@ module SSO
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def call
|
18
|
-
|
18
|
+
fetch_response { |failure| return failure }
|
19
19
|
interpret_response
|
20
20
|
|
21
21
|
rescue JSON::ParserError
|
@@ -25,7 +25,7 @@ module SSO
|
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
-
def
|
28
|
+
def fetch_response
|
29
29
|
yield Operations.failure(:server_unreachable, object: response) unless response.code == 200
|
30
30
|
yield Operations.failure(:server_response_not_parseable, object: response) unless parsed_response
|
31
31
|
yield Operations.failure(:server_response_missing_success_flag, object: response) unless response_has_success_flag?
|
data/lib/sso/server.rb
CHANGED
@@ -57,7 +57,10 @@ module SSO
|
|
57
57
|
def environment
|
58
58
|
@environment ||= default_environment
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
|
+
def environment=(new_environment)
|
62
|
+
@environment = new_environment.to_s
|
63
|
+
end
|
61
64
|
|
62
65
|
private
|
63
66
|
|
@@ -92,14 +95,13 @@ module SSO
|
|
92
95
|
end
|
93
96
|
|
94
97
|
def default_human_readable_location_for_ip
|
95
|
-
proc do
|
98
|
+
proc do |ip|
|
96
99
|
'Unknown'
|
97
100
|
end
|
98
101
|
end
|
99
102
|
|
100
103
|
def default_session_backend
|
101
104
|
fail('You need to configure session_backend, see SSO::Configuration for more info.') unless %w(developmen test).include?(environment)
|
102
|
-
# Moneta.new :Memory
|
103
105
|
end
|
104
106
|
|
105
107
|
def default_passport_verification_timeout_ms
|
@@ -23,7 +23,7 @@ module SSO
|
|
23
23
|
payload = { success: true, code: revocation.code }
|
24
24
|
debug { "Revoked Passport with ID #{passport_id.inspect}" }
|
25
25
|
|
26
|
-
|
26
|
+
[200, { 'Content-Type' => 'application/json' }, [payload.to_json]]
|
27
27
|
end
|
28
28
|
|
29
29
|
def json_code(code)
|
@@ -46,9 +46,9 @@ module SSO
|
|
46
46
|
passport.create_chip!
|
47
47
|
|
48
48
|
payload = { success: true, code: :here_is_your_passport, passport: passport.export }
|
49
|
-
debug { "Created Passport #{passport.id}, sending it including user #{passport.user.inspect}}"}
|
49
|
+
debug { "Created Passport #{passport.id}, sending it including user #{passport.user.inspect}}" }
|
50
50
|
|
51
|
-
|
51
|
+
[200, { 'Content-Type' => 'application/json' }, [payload.to_json]]
|
52
52
|
end
|
53
53
|
|
54
54
|
def json_code(code)
|
data/lib/sso/server/passport.rb
CHANGED
@@ -54,7 +54,7 @@ module SSO
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def load_user!
|
57
|
-
@user = SSO.config.find_user_for_passport.call passport:
|
57
|
+
@user = SSO.config.find_user_for_passport.call passport: reload
|
58
58
|
end
|
59
59
|
|
60
60
|
def create_chip!
|
@@ -113,7 +113,7 @@ module SSO
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def update_location
|
116
|
-
location_name = ::SSO
|
116
|
+
location_name = ::SSO.config.human_readable_location_for_ip.call(ip)
|
117
117
|
debug { "Updating geolocation for #{ip} which is #{location_name}" }
|
118
118
|
self.location = location_name
|
119
119
|
end
|
@@ -16,6 +16,7 @@ module SSO
|
|
16
16
|
new(user: user, warden: warden, options: options).call
|
17
17
|
rescue => exception
|
18
18
|
::SSO.config.exception_handler.call exception
|
19
|
+
nil
|
19
20
|
end
|
20
21
|
end
|
21
22
|
end
|
@@ -30,6 +31,7 @@ module SSO
|
|
30
31
|
|
31
32
|
error { 'Could not revoke the Passports.' } if revoking.failure?
|
32
33
|
debug { 'Finished.' }
|
34
|
+
nil
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
@@ -29,6 +29,22 @@ RSpec.describe SSO::Client::Warden::Hooks::AfterFetch, type: :request, db: true
|
|
29
29
|
allow(server_user).to receive(:tags).and_return %w(wears_glasses is_working_from_home never_gives_up)
|
30
30
|
end
|
31
31
|
|
32
|
+
context 'invalid passport' do
|
33
|
+
let(:passport_secret) { SecureRandom.uuid }
|
34
|
+
|
35
|
+
it 'does not verify the passport' do
|
36
|
+
expect(client_passport).to_not be_verified
|
37
|
+
hook.call
|
38
|
+
expect(client_passport).to_not be_verified
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'does not modify the passport' do
|
42
|
+
expect(client_passport).to_not be_modified
|
43
|
+
hook.call
|
44
|
+
expect(client_passport).to_not be_modified
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
32
48
|
context 'user does not change' do
|
33
49
|
it 'verifies the passport' do
|
34
50
|
expect(client_passport).to_not be_verified
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe SSO::Client::Warden::Strategies::Passport do
|
4
|
+
|
5
|
+
let(:env) { env_with_params }
|
6
|
+
let(:strategy) { described_class.new env }
|
7
|
+
|
8
|
+
describe '#valid?' do
|
9
|
+
context 'with :auth_version and :state' do
|
10
|
+
let(:env) { env_with_params '/', auth_version: '4.2', state: 'abc' }
|
11
|
+
|
12
|
+
it 'is true' do
|
13
|
+
expect(strategy).to be_valid
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'blank :auth_version' do
|
18
|
+
let(:env) { env_with_params '/', auth_version: '', state: 'abc' }
|
19
|
+
|
20
|
+
it 'is false' do
|
21
|
+
expect(strategy).not_to be_valid
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'blank :state' do
|
26
|
+
let(:env) { env_with_params '/', auth_version: '5.5', state: '' }
|
27
|
+
|
28
|
+
it 'is false' do
|
29
|
+
expect(strategy).not_to be_valid
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'nil :auth_version' do
|
34
|
+
let(:env) { env_with_params '/', state: 'xzy' }
|
35
|
+
|
36
|
+
it 'is false' do
|
37
|
+
expect(strategy).not_to be_valid
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#authenticate!' do
|
43
|
+
|
44
|
+
context 'invalid passport' do
|
45
|
+
it 'is a custom response' do
|
46
|
+
expect(strategy.authenticate!).to eq :custom
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'fails' do
|
51
|
+
expect(strategy).to receive(:custom!) do |rack_array|
|
52
|
+
expect(rack_array.size).to eq 3
|
53
|
+
expect(rack_array[0]).to eq 200
|
54
|
+
expect(rack_array[1]).to eq 'Content-Type' => 'application/json'
|
55
|
+
expect(rack_array[2]).to eq ['{"success":true,"code":"passport_verification_failed"}']
|
56
|
+
end
|
57
|
+
strategy.authenticate!
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'valid passport' do
|
61
|
+
let(:operation) { Operations.success :some_code, object: :authentication_object }
|
62
|
+
let(:authentication) { double :authentication, authenticate: operation }
|
63
|
+
|
64
|
+
before do
|
65
|
+
allow(::SSO::Client::Authentications::Passport).to receive(:new).and_return authentication
|
66
|
+
allow(authentication).to receive(:success?).and_return true
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'is a success response' do
|
70
|
+
expect(strategy.authenticate!).to eq :success
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'succeeds' do
|
74
|
+
expect(strategy).to receive(:success!).with :authentication_object
|
75
|
+
strategy.authenticate!
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe SSO::Configuration do
|
4
|
+
|
5
|
+
let(:config) { described_class.new }
|
6
|
+
|
7
|
+
describe '#human_readable_location_for_ip' do
|
8
|
+
let(:lookup) { SSO.config.human_readable_location_for_ip }
|
9
|
+
|
10
|
+
context 'default' do
|
11
|
+
it 'is a proc' do
|
12
|
+
expect(lookup).to be_instance_of Proc
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'is a String' do
|
16
|
+
expect(lookup.call('198.51.100.88')).to eq 'Unknown'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'customized' do
|
21
|
+
before do
|
22
|
+
SSO.config.human_readable_location_for_ip = proc { |ip| "Location of #{ip}" }
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'is a custom String' do
|
26
|
+
expect(lookup.call('198.51.100.89')).to eq 'Location of 198.51.100.89'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#environment' do
|
32
|
+
context 'with Rails' do
|
33
|
+
it 'is the Rails environment' do
|
34
|
+
expect(config.environment).to be ::Rails.env
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'without Rails' do
|
39
|
+
before do
|
40
|
+
hide_const 'Rails'
|
41
|
+
stub_const 'ENV', 'RACK_ENV' => 'rackish'
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'is the RACK_ENV' do
|
45
|
+
expect(config.environment).to eq 'rackish'
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'without RACK_ENV' do
|
49
|
+
before do
|
50
|
+
stub_const 'ENV', {}
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'is unknown' do
|
54
|
+
expect(config.environment).to eq 'unknown'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'test environment' do
|
61
|
+
|
62
|
+
describe '#logger' do
|
63
|
+
context 'with Rails' do
|
64
|
+
it 'is the Rails logger' do
|
65
|
+
expect(config.logger).to be ::Rails.logger
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'is on the Rails logger level' do
|
69
|
+
expect(config.logger.level).to be ::Rails.logger.level
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'without Rails' do
|
74
|
+
before do
|
75
|
+
hide_const 'Rails'
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'is a Logger' do
|
79
|
+
expect(config.logger).to be_instance_of ::Logger
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'is on UNKNOWN level' do
|
83
|
+
expect(config.logger.level).to eq ::Logger::UNKNOWN
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'development environment' do
|
91
|
+
before do
|
92
|
+
config.environment = :development
|
93
|
+
end
|
94
|
+
|
95
|
+
describe '#logger' do
|
96
|
+
context 'with Rails' do
|
97
|
+
it 'is the Rails logger' do
|
98
|
+
expect(config.logger).to be ::Rails.logger
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'is on the Rails logger level' do
|
102
|
+
expect(config.logger.level).to be ::Rails.logger.level
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context 'without Rails' do
|
107
|
+
before do
|
108
|
+
hide_const 'Rails'
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'is a Logger' do
|
112
|
+
expect(config.logger).to be_instance_of ::Logger
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'is on DEBUG level' do
|
116
|
+
expect(config.logger.level).to eq ::Logger::DEBUG
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
context 'production environment' do
|
124
|
+
before do
|
125
|
+
config.environment = :production
|
126
|
+
end
|
127
|
+
|
128
|
+
describe '#logger' do
|
129
|
+
context 'with Rails' do
|
130
|
+
it 'is the Rails logger' do
|
131
|
+
expect(config.logger).to be ::Rails.logger
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'is on the Rails logger level' do
|
135
|
+
expect(config.logger.level).to be ::Rails.logger.level
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
context 'without Rails' do
|
140
|
+
before do
|
141
|
+
hide_const 'Rails'
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'is a Logger' do
|
145
|
+
expect(config.logger).to be_instance_of ::Logger
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'is on WARN level' do
|
149
|
+
expect(config.logger.level).to eq ::Logger::WARN
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe SSO::Server::Warden::Hooks::BeforeLogout do
|
4
|
+
|
5
|
+
let(:proc) { described_class.to_proc }
|
6
|
+
let(:calling) { proc.call(user, warden, options) }
|
7
|
+
let(:user) { double :user }
|
8
|
+
let(:request) { double :request, params: params.stringify_keys }
|
9
|
+
let(:params) { { passport_id: passport.id } }
|
10
|
+
let(:warden) { double :warden, request: request }
|
11
|
+
let(:options) { double :options }
|
12
|
+
let(:passport) { create :passport }
|
13
|
+
|
14
|
+
before do
|
15
|
+
Timecop.freeze
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.to_proc' do
|
19
|
+
it 'is a proc' do
|
20
|
+
expect(proc).to be_instance_of Proc
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#call' do
|
25
|
+
it 'accepts the three warden arguments and returns nothing' do
|
26
|
+
expect(calling).to be_nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'revokes the passport' do
|
30
|
+
calling
|
31
|
+
passport.reload
|
32
|
+
expect(passport.revoked_at.to_i).to eq Time.now.to_i
|
33
|
+
expect(passport.revoke_reason).to eq 'logout'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'survives an exception' do
|
37
|
+
allow(described_class).to receive(:new).and_raise NoMethodError, 'I am a problem'
|
38
|
+
expect(::SSO.config.logger).to receive(:error)
|
39
|
+
expect(calling).to be_nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,6 +4,13 @@ module SSO
|
|
4
4
|
module Test
|
5
5
|
module Helpers
|
6
6
|
|
7
|
+
# Inspired by Warden::Spec::Helpers
|
8
|
+
def env_with_params(path = "/", params = {}, env = {})
|
9
|
+
method = params.delete(:method) || "GET"
|
10
|
+
env = { 'HTTP_VERSION' => '1.1', 'REQUEST_METHOD' => "#{method}" }.merge(env)
|
11
|
+
Rack::MockRequest.env_for "#{path}?#{Rack::Utils.build_query(params)}", env
|
12
|
+
end
|
13
|
+
|
7
14
|
def redirect_httparty_to_rails_stack
|
8
15
|
redirect_httparty :get
|
9
16
|
redirect_httparty :post
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- halo
|
@@ -276,7 +276,6 @@ files:
|
|
276
276
|
- lib/sso/server/doorkeeper/resource_owner_authenticator.rb
|
277
277
|
- lib/sso/server/engine.rb
|
278
278
|
- lib/sso/server/errors.rb
|
279
|
-
- lib/sso/server/geolocations.rb
|
280
279
|
- lib/sso/server/middleware/passport_destruction.rb
|
281
280
|
- lib/sso/server/middleware/passport_exchange.rb
|
282
281
|
- lib/sso/server/middleware/passport_verification.rb
|
@@ -326,9 +325,12 @@ files:
|
|
326
325
|
- spec/integration/oauth/password_spec.rb
|
327
326
|
- spec/lib/sso/client/authentications/passport_spec.rb
|
328
327
|
- spec/lib/sso/client/warden/hooks/after_fetch_spec.rb
|
328
|
+
- spec/lib/sso/client/warden/strategies/passport_spec.rb
|
329
329
|
- spec/lib/sso/logging_spec.rb
|
330
|
+
- spec/lib/sso/server/configuration_spec.rb
|
330
331
|
- spec/lib/sso/server/middleware/passport_destruction_spec.rb
|
331
332
|
- spec/lib/sso/server/passports_spec.rb
|
333
|
+
- spec/lib/sso/server/warden/hooks/before_logout_spec.rb
|
332
334
|
- spec/spec_helper.rb
|
333
335
|
- spec/support/factories/doorkeeper/application.rb
|
334
336
|
- spec/support/factories/server/passport.rb
|
@@ -351,9 +353,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
351
353
|
version: 2.0.0
|
352
354
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
353
355
|
requirements:
|
354
|
-
- - "
|
356
|
+
- - ">="
|
355
357
|
- !ruby/object:Gem::Version
|
356
|
-
version:
|
358
|
+
version: '0'
|
357
359
|
requirements: []
|
358
360
|
rubyforge_project:
|
359
361
|
rubygems_version: 2.4.5
|
@@ -402,9 +404,12 @@ test_files:
|
|
402
404
|
- spec/integration/oauth/password_spec.rb
|
403
405
|
- spec/lib/sso/client/authentications/passport_spec.rb
|
404
406
|
- spec/lib/sso/client/warden/hooks/after_fetch_spec.rb
|
407
|
+
- spec/lib/sso/client/warden/strategies/passport_spec.rb
|
405
408
|
- spec/lib/sso/logging_spec.rb
|
409
|
+
- spec/lib/sso/server/configuration_spec.rb
|
406
410
|
- spec/lib/sso/server/middleware/passport_destruction_spec.rb
|
407
411
|
- spec/lib/sso/server/passports_spec.rb
|
412
|
+
- spec/lib/sso/server/warden/hooks/before_logout_spec.rb
|
408
413
|
- spec/spec_helper.rb
|
409
414
|
- spec/support/factories/doorkeeper/application.rb
|
410
415
|
- spec/support/factories/server/passport.rb
|