gds-sso 13.4.0 → 13.5.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 +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
|