gds-sso 13.4.0 → 13.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -1
- data/config/routes.rb +1 -0
- data/lib/gds-sso/config.rb +8 -0
- data/lib/gds-sso/controller_methods.rb +10 -3
- data/lib/gds-sso/failure_app.rb +23 -2
- data/lib/gds-sso/version.rb +1 -1
- data/lib/gds-sso.rb +1 -0
- data/spec/internal/db/combustion_test.sqlite +0 -0
- data/spec/internal/log/test.log +1552 -787
- data/spec/requests/end_to_end_spec.rb +15 -0
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72fc2354ba2f54ba192293b50861f8aff690edca
|
4
|
+
data.tar.gz: eeaa7c1c30baa2bec9190cf962dd7c83ac042d63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 149b0ebb611792c93e615537564092f9f4d5fb212f552a9b041134be095a1769643ca4e02a9ec49117dc74f2965b4ad2c53adf9c4a16574425040ed4a63edd48
|
7
|
+
data.tar.gz: f9f0a816379772d203bc9171ff523dd9fe2bb0918c60920879820823dad4204823048de7b9d3f78fe87a9ae5bab7b0371c1bcabc9278037628efa9a494590b46
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ Some of the applications that use this gem:
|
|
12
12
|
|
13
13
|
## Usage
|
14
14
|
|
15
|
-
### Integration with a Rails
|
15
|
+
### Integration with a Rails 4+ app
|
16
16
|
|
17
17
|
To use gds-sso you will need an oAuth client ID and secret for Signon or a compatible system.
|
18
18
|
These can be provided by one of the team with admin access to Signon.
|
@@ -130,6 +130,18 @@ GDS::SSO.config do |config|
|
|
130
130
|
end
|
131
131
|
```
|
132
132
|
|
133
|
+
If you are using a Rails 5 app in
|
134
|
+
[api_only](http://guides.rubyonrails.org/api_app.html) mode this gem will
|
135
|
+
automatically disable the oauth layers which use session persistence. You can
|
136
|
+
configure this gem to be in api_only mode (or not) with:
|
137
|
+
|
138
|
+
```ruby
|
139
|
+
GDS::SSO.config do |config|
|
140
|
+
# ...
|
141
|
+
# Only support bearer token authentication and send responses in JSON
|
142
|
+
config.api_only = true
|
143
|
+
end
|
144
|
+
```
|
133
145
|
|
134
146
|
### Use in development mode
|
135
147
|
|
data/config/routes.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
|
+
next if GDS::SSO::Config.api_only?
|
2
3
|
get '/auth/gds/callback', to: 'authentications#callback', as: :gds_sign_in
|
3
4
|
get '/auth/gds/sign_out', to: 'authentications#sign_out', as: :gds_sign_out
|
4
5
|
get '/auth/failure', to: 'authentications#failure', as: :auth_failure
|
data/lib/gds-sso/config.rb
CHANGED
@@ -23,6 +23,8 @@ module GDS
|
|
23
23
|
mattr_accessor :cache
|
24
24
|
@@cache = ActiveSupport::Cache::NullStore.new
|
25
25
|
|
26
|
+
mattr_writer :api_only
|
27
|
+
|
26
28
|
def self.user_klass
|
27
29
|
user_model.to_s.constantize
|
28
30
|
end
|
@@ -36,6 +38,12 @@ module GDS
|
|
36
38
|
|
37
39
|
ENV.fetch("GDS_SSO_STRATEGY", default_strategy) == "mock"
|
38
40
|
end
|
41
|
+
|
42
|
+
def self.api_only?
|
43
|
+
config = Rails.configuration
|
44
|
+
default = config.respond_to?(:api_only) ? config.api_only : false
|
45
|
+
@@api_only.nil? ? default : @@api_only
|
46
|
+
end
|
39
47
|
end
|
40
48
|
end
|
41
49
|
end
|
@@ -6,10 +6,17 @@ module GDS
|
|
6
6
|
|
7
7
|
def self.included(base)
|
8
8
|
base.rescue_from PermissionDeniedException do |e|
|
9
|
-
|
9
|
+
if GDS::SSO::Config.api_only?
|
10
|
+
render json: { message: e.message }, status: :forbidden
|
11
|
+
else
|
12
|
+
render "authorisations/unauthorised", layout: "unauthorised", status: :forbidden, locals: { message: e.message }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
unless GDS::SSO::Config.api_only?
|
17
|
+
base.helper_method :user_signed_in?
|
18
|
+
base.helper_method :current_user
|
10
19
|
end
|
11
|
-
base.helper_method :user_signed_in?
|
12
|
-
base.helper_method :current_user
|
13
20
|
end
|
14
21
|
|
15
22
|
|
data/lib/gds-sso/failure_app.rb
CHANGED
@@ -8,11 +8,18 @@ module GDS
|
|
8
8
|
class FailureApp < ActionController::Metal
|
9
9
|
include ActionController::UrlFor
|
10
10
|
include ActionController::Redirecting
|
11
|
+
include AbstractController::Rendering
|
12
|
+
include ActionController::Rendering
|
13
|
+
include ActionController::Renderers
|
14
|
+
use_renderers :json
|
15
|
+
|
11
16
|
include Rails.application.routes.url_helpers
|
12
17
|
|
13
18
|
def self.call(env)
|
14
|
-
if
|
15
|
-
|
19
|
+
if GDS::SSO::ApiAccess.api_call?(env)
|
20
|
+
action(:api_invalid_token).call(env)
|
21
|
+
elsif GDS::SSO::Config.api_only?
|
22
|
+
action(:api_missing_token).call(env)
|
16
23
|
else
|
17
24
|
action(:redirect).call(env)
|
18
25
|
end
|
@@ -23,6 +30,14 @@ module GDS
|
|
23
30
|
redirect_to '/auth/gds'
|
24
31
|
end
|
25
32
|
|
33
|
+
def api_invalid_token
|
34
|
+
api_unauthorized('Bearer token does not appear to be valid', 'invalid_token')
|
35
|
+
end
|
36
|
+
|
37
|
+
def api_missing_token
|
38
|
+
api_unauthorized('No bearer token was provided', 'invalid_request')
|
39
|
+
end
|
40
|
+
|
26
41
|
# Stores requested uri to redirect the user after signing in. We cannot use
|
27
42
|
# scoped session provided by warden here, since the user is not authenticated
|
28
43
|
# yet, but we still need to store the uri based on scope, so different scopes
|
@@ -33,6 +48,12 @@ module GDS
|
|
33
48
|
session["return_to"] = request.env['warden.options'][:attempted_path] if request.get?
|
34
49
|
end
|
35
50
|
|
51
|
+
private
|
52
|
+
|
53
|
+
def api_unauthorized(message, bearer_error)
|
54
|
+
headers['WWW-Authenticate'] = %(Bearer error="#{bearer_error}")
|
55
|
+
render json: { message: message }, status: :unauthorized
|
56
|
+
end
|
36
57
|
end
|
37
58
|
end
|
38
59
|
end
|
data/lib/gds-sso/version.rb
CHANGED
data/lib/gds-sso.rb
CHANGED
@@ -25,6 +25,7 @@ module GDS
|
|
25
25
|
config.before_eager_load { |app| app.reload_routes! }
|
26
26
|
|
27
27
|
config.app_middleware.use ::OmniAuth::Builder do
|
28
|
+
next if GDS::SSO::Config.api_only?
|
28
29
|
provider :gds, GDS::SSO::Config.oauth_id, GDS::SSO::Config.oauth_secret,
|
29
30
|
client_options: {
|
30
31
|
site: GDS::SSO::Config.oauth_root_url,
|
Binary file
|