masks 0.10.0 → 0.11.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.
@@ -7,12 +7,13 @@ module Masks
7
7
 
8
8
  included do
9
9
  if respond_to?(:helper_method)
10
- helper_method :masked, :masks_login_url, :masks_logout_url
10
+ helper_method :masked, :masks_login_url
11
11
  end
12
12
  end
13
13
 
14
14
  REQUESTS = "masks_requests".freeze
15
15
  HANDSHAKES = "masks_handshakes".freeze
16
+ FAREWELLS = "masks_farewells".freeze
16
17
  STEPPED_UP = "masks_stepped_up".freeze
17
18
  STEP_UP_WITHIN = 300
18
19
 
@@ -28,6 +29,10 @@ module Masks
28
29
  @masks_handshakes ||= masks_tracker(HANDSHAKES)
29
30
  end
30
31
 
32
+ def masks_farewells
33
+ masks_tracker(FAREWELLS)
34
+ end
35
+
31
36
  def masks_tracker(key)
32
37
  Masks::Client::Tracker.new(Masks::Client::Stores::Session.new(session, key))
33
38
  end
@@ -152,21 +157,17 @@ module Masks
152
157
  profile.empty? ? nil : held.merge(profile.slice(*IDENTITY))
153
158
  end
154
159
 
155
- def masks_logout_url(return_to: nil)
160
+ def masks_logout_url(state:)
156
161
  return nil unless masks_configured?
157
162
 
158
163
  masks_session.end_session_url(
159
- post_logout_redirect_uri: masks_post_logout_redirect_uri,
160
- state: SecureRandom.urlsafe_base64(16)
164
+ post_logout_redirect_uri: masks_config.return_to_for(request),
165
+ state: state
161
166
  )
162
167
  rescue Masks::Client::Error
163
168
  nil
164
169
  end
165
170
 
166
- def masks_post_logout_redirect_uri
167
- "#{request.base_url}#{masks_local_path(masks_config.after_sign_out) || '/'}"
168
- end
169
-
170
171
  def masks_login_url(return_to: nil, organization: nil, privilege: nil)
171
172
  path = Masks::Rails::Engine.routes.url_helpers.start_path
172
173
  query = {
@@ -193,6 +194,20 @@ module Masks
193
194
 
194
195
  private
195
196
 
197
+ def masks_sign_out_upstream
198
+ return nil unless masks_configured?
199
+
200
+ farewell = masks_farewells.open
201
+ url = masks_logout_url(state: farewell.id)
202
+
203
+ masks_farewells.clear! if url.nil?
204
+ url
205
+ end
206
+
207
+ def masks_after_sign_out_path
208
+ masks_local_path(masks_config.after_sign_out) || "/"
209
+ end
210
+
196
211
  def masks_authorize_session!(wanted)
197
212
  return false unless authenticate_masks!
198
213
 
@@ -11,7 +11,7 @@ module Masks
11
11
  :after_sign_out, :session_key, :sign_out_of_issuer, :parent_controller,
12
12
  :credentials_path, :authenticate_everything, :delegates
13
13
  attr_writer :issuer, :redirect_uri, :name, :credentials, :store, :forget, :logged_out,
14
- :delegation_redirect_uri, :organization, :manages
14
+ :delegation_redirect_uri, :organization, :manages, :replay
15
15
 
16
16
  def initialize
17
17
  @scope = Masks::Client::Session::DEFAULT_SCOPE
@@ -139,10 +139,15 @@ module Masks
139
139
  Masks::Client::Resource.new(
140
140
  issuer: issuer_for(request),
141
141
  url: url,
142
- scopes: resource_scopes
142
+ scopes: resource_scopes,
143
+ replay: replay
143
144
  )
144
145
  end
145
146
 
147
+ def replay
148
+ @replay || Masks::Client::Proof.memory
149
+ end
150
+
146
151
  def handshake_for(request)
147
152
  Masks::Client::Handshake.new(
148
153
  issuer_for(request),
@@ -5,6 +5,10 @@ module Masks
5
5
  include Masks::Rails::Configurable
6
6
  include Masks::Rails::Privileged
7
7
 
8
+ included do
9
+ rescue_from Masks::Client::ReplayUnavailable, with: :masks_unavailable if respond_to?(:rescue_from)
10
+ end
11
+
8
12
  def masks_resource
9
13
  @masks_resource ||= masks_config.resource_server_for(request)
10
14
  end
@@ -41,6 +45,15 @@ module Masks
41
45
  }, status: error.status
42
46
  end
43
47
 
48
+ def masks_unavailable
49
+ response.headers["Cache-Control"] = "no-store"
50
+
51
+ render json: {
52
+ "error" => "temporarily_unavailable",
53
+ "error_description" => "the token could not be checked"
54
+ }, status: :service_unavailable
55
+ end
56
+
44
57
  def masks_resource_metadata
45
58
  masks_resource.metadata
46
59
  end
data/lib/masks/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Masks
2
- VERSION = "0.10.0".freeze
2
+ VERSION = "0.11.0".freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: masks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - the masks authors
@@ -50,12 +50,17 @@ files:
50
50
  - lib/masks/client/claims.rb
51
51
  - lib/masks/client/delegations.rb
52
52
  - lib/masks/client/delegations/fake.rb
53
+ - lib/masks/client/device.rb
54
+ - lib/masks/client/embedded.rb
55
+ - lib/masks/client/enrollment.rb
53
56
  - lib/masks/client/errors.rb
54
57
  - lib/masks/client/handshake.rb
55
58
  - lib/masks/client/http.rb
56
59
  - lib/masks/client/introspection.rb
57
60
  - lib/masks/client/issuer.rb
61
+ - lib/masks/client/key.rb
58
62
  - lib/masks/client/logout.rb
63
+ - lib/masks/client/nonces.rb
59
64
  - lib/masks/client/pkce.rb
60
65
  - lib/masks/client/proof.rb
61
66
  - lib/masks/client/rack.rb
@@ -66,6 +71,7 @@ files:
66
71
  - lib/masks/client/stores.rb
67
72
  - lib/masks/client/tokens.rb
68
73
  - lib/masks/client/tracker.rb
74
+ - lib/masks/client/transport.rb
69
75
  - lib/masks/client/verifier.rb
70
76
  - lib/masks/rails.rb
71
77
  - lib/masks/rails/authentication.rb