masks 0.9.2 → 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.
@@ -3,27 +3,23 @@ module Masks
3
3
  module ProtectedResource
4
4
  extend ActiveSupport::Concern
5
5
  include Masks::Rails::Configurable
6
+ include Masks::Rails::Privileged
6
7
 
7
- class_methods do
8
- def masks_protect!(**options)
9
- before_action(-> { masks_authenticate!(**options) }, **options.slice(:only, :except))
10
- end
8
+ included do
9
+ rescue_from Masks::Client::ReplayUnavailable, with: :masks_unavailable if respond_to?(:rescue_from)
11
10
  end
12
11
 
13
12
  def masks_resource
14
13
  @masks_resource ||= masks_config.resource_server_for(request)
15
14
  end
16
15
 
17
- def masks_claims
18
- @masks_claims if defined?(@masks_claims)
19
- end
16
+ def masked
17
+ return (defined?(super) ? super : Masked.nobody(masks_config)) unless defined?(@masks_token_claims)
20
18
 
21
- def masks_authenticate!(scope: nil, role: nil, organization: nil, **)
22
- @masks_claims = masks_resource.authenticate(request.authorization, scope: scope, role: role,
23
- organization: organization, **masks_proof)
24
- rescue Masks::Client::Challenge => e
25
- masks_challenge(e)
26
- false
19
+ @masked_by_token ||= Masked.new(
20
+ claims: @masks_token_claims, scopes: @masks_token_claims.scopes, config: masks_config, signed_in: true,
21
+ access_token: masks_resource.token(request.authorization), expires_at: @masks_token_claims.expires_at
22
+ )
27
23
  end
28
24
 
29
25
  def masks_authenticate(scope: nil, role: nil, organization: nil)
@@ -49,9 +45,37 @@ module Masks
49
45
  }, status: error.status
50
46
  end
51
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
+
52
57
  def masks_resource_metadata
53
58
  masks_resource.metadata
54
59
  end
60
+
61
+ private
62
+
63
+ def masks_authorize_token!(privileges)
64
+ claims = masks_resource.authenticate(request.authorization, scope: privileges.flat_map(&:scopes).uniq,
65
+ **masks_proof)
66
+
67
+ privileges.each do |privilege|
68
+ next if privilege.roles.empty? && privilege.organization.nil?
69
+
70
+ claims.member!(*privilege.roles, organization: privilege.organization)
71
+ end
72
+
73
+ @masks_token_claims = claims
74
+ true
75
+ rescue Masks::Client::Challenge => e
76
+ masks_challenge(e)
77
+ false
78
+ end
55
79
  end
56
80
  end
57
81
  end
data/lib/masks/rails.rb CHANGED
@@ -31,6 +31,8 @@ require_relative "client"
31
31
  require_relative "rails/credentials"
32
32
  require_relative "rails/configuration"
33
33
  require_relative "rails/configurable"
34
+ require_relative "rails/masked"
35
+ require_relative "rails/privileged"
34
36
  require_relative "rails/authentication"
35
37
  require_relative "rails/protected_resource"
36
38
  require_relative "rails/engine"
data/lib/masks/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Masks
2
- VERSION = "0.9.2".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.9.2
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
@@ -73,6 +79,8 @@ files:
73
79
  - lib/masks/rails/configuration.rb
74
80
  - lib/masks/rails/credentials.rb
75
81
  - lib/masks/rails/engine.rb
82
+ - lib/masks/rails/masked.rb
83
+ - lib/masks/rails/privileged.rb
76
84
  - lib/masks/rails/protected_resource.rb
77
85
  - lib/masks/version.rb
78
86
  homepage: https://github.com/masksrb/masks