rails_sso 0.2.1 → 0.3.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 +4 -4
- data/README.md +12 -1
- data/app/services/rails_sso/fetch_user.rb +19 -4
- data/config/locales/en.yml +5 -0
- data/lib/generators/rails_sso_generator.rb +13 -0
- data/lib/generators/templates/sso.rb +15 -0
- data/lib/rails_sso/client.rb +50 -0
- data/lib/rails_sso/helpers.rb +28 -5
- data/lib/rails_sso/response_error.rb +11 -0
- data/lib/rails_sso/version.rb +1 -1
- data/lib/rails_sso.rb +3 -1
- data/test/dummy/config/application.rb +12 -2
- data/test/dummy/config/environments/development.rb +2 -2
- data/test/dummy/config/environments/production.rb +1 -1
- data/test/dummy/config/environments/test.rb +1 -1
- data/test/dummy/config/initializers/sso.rb +1 -0
- data/test/dummy/log/development.log +4 -0
- data/test/dummy/log/test.log +1395 -0
- data/test/lib/rails_sso/helpers_test.rb +74 -0
- data/test/lib/rails_sso/response_error_test.rb +21 -0
- data/test/services/rails_sso/fetch_user_test.rb +36 -20
- data/test/test_helper.rb +2 -1
- metadata +13 -5
- data/lib/rails_sso/access_token.rb +0 -52
- data/test/dummy/db/test.sqlite3 +0 -0
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RailsSso::HelpersTest < ActiveSupport::TestCase
|
4
|
+
class DummyController
|
5
|
+
def self.helper_method(*list)
|
6
|
+
end
|
7
|
+
|
8
|
+
include RailsSso::Helpers
|
9
|
+
|
10
|
+
attr_reader :session
|
11
|
+
|
12
|
+
def initialize(session)
|
13
|
+
@session = session
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
AccessToken = Struct.new(:token, :refresh_token)
|
18
|
+
|
19
|
+
def setup
|
20
|
+
RailsSso.provider_name = 'OAuth2'
|
21
|
+
RailsSso.provider_key = 'provider_key'
|
22
|
+
RailsSso.provider_secret = 'provider_secret'
|
23
|
+
|
24
|
+
@controller = DummyController.new(session)
|
25
|
+
end
|
26
|
+
|
27
|
+
def session
|
28
|
+
@session ||= {}
|
29
|
+
end
|
30
|
+
|
31
|
+
test "#current_user_data will return nil if not authenticated" do
|
32
|
+
assert_nil @controller.current_user_data
|
33
|
+
end
|
34
|
+
|
35
|
+
test "#current_user_data will return user data if authenticated" do
|
36
|
+
# TODO: pending
|
37
|
+
end
|
38
|
+
|
39
|
+
test "#user_signed_in? returns false if not authenticated" do
|
40
|
+
refute @controller.user_signed_in?
|
41
|
+
end
|
42
|
+
|
43
|
+
test "#user_signed_in? returns true if authenticated" do
|
44
|
+
# TODO: pending
|
45
|
+
end
|
46
|
+
|
47
|
+
test "#access_token returns a new OAuth2::AccessToken object" do
|
48
|
+
session[:access_token] = 'abc'
|
49
|
+
session[:refresh_token] = 'def'
|
50
|
+
|
51
|
+
access_token = @controller.access_token
|
52
|
+
|
53
|
+
assert_instance_of OAuth2::AccessToken, access_token
|
54
|
+
assert_equal 'abc', access_token.token
|
55
|
+
assert_equal 'def', access_token.refresh_token
|
56
|
+
end
|
57
|
+
|
58
|
+
test "#invalidate_access_token! will call Single Sign-Out with access token" do
|
59
|
+
# @TODO: pending
|
60
|
+
end
|
61
|
+
|
62
|
+
test "save_access_token! will copy access and refresh token to session" do
|
63
|
+
access_token = AccessToken.new('abc', '1337')
|
64
|
+
|
65
|
+
@controller.save_access_token!(access_token)
|
66
|
+
|
67
|
+
assert_equal 'abc', session[:access_token]
|
68
|
+
assert_equal '1337', session[:refresh_token]
|
69
|
+
end
|
70
|
+
|
71
|
+
test "#refresh_access_token! will refresh token and copy new values" do
|
72
|
+
# @TODO: pending
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class RailsSso::ResponseErrorTest < ActiveSupport::TestCase
|
4
|
+
test "assigns error code" do
|
5
|
+
err = RailsSso::ResponseError.new(:err_code)
|
6
|
+
|
7
|
+
assert_equal err.code, :err_code
|
8
|
+
end
|
9
|
+
|
10
|
+
test "assigns unauthenticated error message from locales" do
|
11
|
+
err = RailsSso::ResponseError.new(:unauthenticated)
|
12
|
+
|
13
|
+
assert_equal err.message, "You're not authenticated"
|
14
|
+
end
|
15
|
+
|
16
|
+
test "assigns unknown error message from locales" do
|
17
|
+
err = RailsSso::ResponseError.new(:unknown)
|
18
|
+
|
19
|
+
assert_equal err.message, "Something wrong happened"
|
20
|
+
end
|
21
|
+
end
|
@@ -1,39 +1,55 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class RailsSso::FetchUserTest < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
|
6
|
-
@client = client
|
7
|
-
end
|
4
|
+
test "success call should fetch user with access token and return parsed data" do
|
5
|
+
data = RailsSso::FetchUser.new(success_client).call
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
end
|
7
|
+
assert_equal data['name'], user_data['name']
|
8
|
+
assert_equal data['email'], user_data['email']
|
12
9
|
end
|
13
10
|
|
14
|
-
|
15
|
-
|
11
|
+
test "unauthenticated call should raise error" do
|
12
|
+
err = assert_raises(RailsSso::ResponseError) { RailsSso::FetchUser.new(unauthenticated_client).call }
|
13
|
+
assert_equal :unauthenticated, err.code
|
16
14
|
end
|
17
15
|
|
18
|
-
test "call should
|
19
|
-
|
16
|
+
test "unknown call should raise error" do
|
17
|
+
err = assert_raises(RailsSso::ResponseError) { RailsSso::FetchUser.new(unknown_client).call }
|
18
|
+
assert_equal :unknown, err.code
|
19
|
+
end
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
def user_data
|
22
|
+
{
|
23
|
+
'name' => 'Kowalski',
|
24
|
+
'email' => 'jan@kowalski.pl'
|
25
|
+
}
|
23
26
|
end
|
24
27
|
|
25
|
-
def
|
28
|
+
def response_headers
|
29
|
+
{ 'Content-Type' => 'application/json' }
|
30
|
+
end
|
31
|
+
|
32
|
+
def success_client
|
26
33
|
Faraday.new do |builder|
|
27
34
|
builder.adapter :test do |stub|
|
28
|
-
stub.get('/api/v1/me') { |env| [200,
|
35
|
+
stub.get('/api/v1/me') { |env| [200, response_headers, user_data] }
|
29
36
|
end
|
30
37
|
end
|
31
38
|
end
|
32
39
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
40
|
+
def unauthenticated_client
|
41
|
+
Faraday.new do |builder|
|
42
|
+
builder.adapter :test do |stub|
|
43
|
+
stub.get('/api/v1/me') { |env| [401, response_headers, {}] }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def unknown_client
|
49
|
+
Faraday.new do |builder|
|
50
|
+
builder.adapter :test do |stub|
|
51
|
+
stub.get('/api/v1/me') { |env| [500, response_headers, {}] }
|
52
|
+
end
|
53
|
+
end
|
38
54
|
end
|
39
55
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
require "codeclimate-test-reporter"
|
2
|
+
CodeClimate::TestReporter.start
|
1
3
|
# Configure Rails Environment
|
2
4
|
ENV["RAILS_ENV"] = "test"
|
3
5
|
|
4
6
|
require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
|
5
|
-
ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
|
6
7
|
require "rails/test_help"
|
7
8
|
require "mocha/mini_test"
|
8
9
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_sso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Dudulski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -107,11 +107,15 @@ files:
|
|
107
107
|
- app/controllers/rails_sso/sessions_controller.rb
|
108
108
|
- app/services/rails_sso/fetch_user.rb
|
109
109
|
- config/initializers/omniauth.rb
|
110
|
+
- config/locales/en.yml
|
110
111
|
- config/routes.rb
|
112
|
+
- lib/generators/rails_sso_generator.rb
|
113
|
+
- lib/generators/templates/sso.rb
|
111
114
|
- lib/rails_sso.rb
|
112
|
-
- lib/rails_sso/
|
115
|
+
- lib/rails_sso/client.rb
|
113
116
|
- lib/rails_sso/engine.rb
|
114
117
|
- lib/rails_sso/helpers.rb
|
118
|
+
- lib/rails_sso/response_error.rb
|
115
119
|
- lib/rails_sso/version.rb
|
116
120
|
- lib/tasks/rails_sso_tasks.rake
|
117
121
|
- test/controllers/rails_sso/sessions_controller_test.rb
|
@@ -146,12 +150,14 @@ files:
|
|
146
150
|
- test/dummy/config/locales/en.yml
|
147
151
|
- test/dummy/config/routes.rb
|
148
152
|
- test/dummy/config/secrets.yml
|
149
|
-
- test/dummy/
|
153
|
+
- test/dummy/log/development.log
|
150
154
|
- test/dummy/log/test.log
|
151
155
|
- test/dummy/public/404.html
|
152
156
|
- test/dummy/public/422.html
|
153
157
|
- test/dummy/public/500.html
|
154
158
|
- test/dummy/public/favicon.ico
|
159
|
+
- test/lib/rails_sso/helpers_test.rb
|
160
|
+
- test/lib/rails_sso/response_error_test.rb
|
155
161
|
- test/rails_sso_test.rb
|
156
162
|
- test/routes/sso_routes_test.rb
|
157
163
|
- test/services/rails_sso/fetch_user_test.rb
|
@@ -183,10 +189,11 @@ summary: SSO Rails Engine
|
|
183
189
|
test_files:
|
184
190
|
- test/controllers/rails_sso/sessions_controller_test.rb
|
185
191
|
- test/rails_sso_test.rb
|
192
|
+
- test/lib/rails_sso/response_error_test.rb
|
193
|
+
- test/lib/rails_sso/helpers_test.rb
|
186
194
|
- test/test_helper.rb
|
187
195
|
- test/services/rails_sso/fetch_user_test.rb
|
188
196
|
- test/dummy/README.rdoc
|
189
|
-
- test/dummy/db/test.sqlite3
|
190
197
|
- test/dummy/public/favicon.ico
|
191
198
|
- test/dummy/public/500.html
|
192
199
|
- test/dummy/public/422.html
|
@@ -221,5 +228,6 @@ test_files:
|
|
221
228
|
- test/dummy/app/assets/javascripts/application.js
|
222
229
|
- test/dummy/app/assets/stylesheets/application.css
|
223
230
|
- test/dummy/log/test.log
|
231
|
+
- test/dummy/log/development.log
|
224
232
|
- test/dummy/Rakefile
|
225
233
|
- test/routes/sso_routes_test.rb
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'faraday-http-cache'
|
2
|
-
|
3
|
-
module RailsSso
|
4
|
-
class AccessToken
|
5
|
-
attr_reader :token, :refresh_token
|
6
|
-
|
7
|
-
delegate :get, :patch, :post, :put, :delete, to: :access_token
|
8
|
-
|
9
|
-
def self.from_access_token(access_token)
|
10
|
-
new(access_token.token, access_token.refresh_token)
|
11
|
-
end
|
12
|
-
|
13
|
-
def initialize(token, refresh_token)
|
14
|
-
@token, @refresh_token = token, refresh_token
|
15
|
-
end
|
16
|
-
|
17
|
-
def refresh!
|
18
|
-
self.class.from_access_token(access_token.refresh!)
|
19
|
-
end
|
20
|
-
|
21
|
-
def access_token
|
22
|
-
@access_token ||= OAuth2::AccessToken.new(client, token, {
|
23
|
-
refresh_token: refresh_token
|
24
|
-
})
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def client(cache = RailsSso.use_cache)
|
30
|
-
strategy.client.tap do |c|
|
31
|
-
if cache
|
32
|
-
c.options[:connection_build] = Proc.new do |conn|
|
33
|
-
conn.use :http_cache,
|
34
|
-
store: Rails.cache,
|
35
|
-
logger: Rails.logger,
|
36
|
-
shared_cache: false
|
37
|
-
|
38
|
-
conn.adapter Faraday.default_adapter
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def strategy
|
45
|
-
@strategy ||= strategy_class.new(nil, RailsSso.provider_key, RailsSso.provider_secret)
|
46
|
-
end
|
47
|
-
|
48
|
-
def strategy_class
|
49
|
-
"OmniAuth::Strategies::#{RailsSso.provider_name.camelize}".constantize
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/test/dummy/db/test.sqlite3
DELETED
File without changes
|