identity_toolbox 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env.pipelines +3 -1
- data/CHANGELOG.md +6 -1
- data/Gemfile.lock +6 -1
- data/identity_toolbox.gemspec +6 -2
- data/lib/identity_toolbox/authorizable.rb +7 -1
- data/lib/identity_toolbox/configuration.rb +28 -1
- data/lib/identity_toolbox/default_policy.rb +6 -4
- data/lib/identity_toolbox/identity_cache.rb +38 -0
- data/lib/identity_toolbox/identity_repository.rb +57 -0
- data/lib/identity_toolbox/identity_service.rb +11 -5
- data/lib/identity_toolbox/policy_methods.rb +4 -17
- data/lib/identity_toolbox/redis_client.rb +20 -0
- data/lib/identity_toolbox/spec_support/shared_examples_for_policies.rb +11 -6
- data/lib/identity_toolbox/spec_support/shared_examples_for_policy_scopes.rb +10 -6
- data/lib/identity_toolbox/user_account_entity.rb +38 -0
- data/lib/identity_toolbox/user_account_view_entity.rb +13 -0
- data/lib/identity_toolbox/user_entity.rb +13 -0
- data/lib/identity_toolbox/version.rb +1 -1
- data/lib/identity_toolbox.rb +11 -0
- metadata +51 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2760a7748ce88136bc592c1212db62e2d8c9eaaf8eca0ff9269b7b0b7af44b6f
|
4
|
+
data.tar.gz: 609492fe68a986327849a29336045db2f7704ed41b85b4a6e1623679a934eb5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef3f924b5bbd0f5c15f45fe9e6c350772dae4cc0500ab8fa3d53a546dad1e9eb6196af293dea1ef589006e9521fc53e4c69708a10bbcaebd9fcb8a6fbce223be
|
7
|
+
data.tar.gz: bfc984fba81a5e57fb7a4ff6c160dab0c53c0f359046cbdba477dc9070e2a20c8fd91d944905e00b6b6cddfd5e7c27fa61b28a4fd87fd72c67162b288f6dd994
|
data/.env.pipelines
CHANGED
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,11 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
|
+
## [0.2.0] - 2018-10-15
|
9
|
+
### Added
|
10
|
+
- Adds redis connection and cache handling
|
11
|
+
- Raises exception if identity_service_url or identity_cache_url aren't set
|
12
|
+
|
8
13
|
## [0.1.0] - 2018-08-14
|
9
|
-
###
|
14
|
+
### Added
|
10
15
|
- First release
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
identity_toolbox (0.
|
4
|
+
identity_toolbox (0.2.0)
|
5
|
+
activesupport (>= 4.0.0)
|
6
|
+
connection_pool (~> 2.2)
|
5
7
|
json_api_toolbox (~> 0.16)
|
6
8
|
pundit (~> 2.0)
|
9
|
+
redis (~> 4.0)
|
7
10
|
request_store (~> 1.3)
|
8
11
|
rspec
|
9
12
|
|
@@ -41,6 +44,7 @@ GEM
|
|
41
44
|
byebug (10.0.2)
|
42
45
|
coderay (1.1.2)
|
43
46
|
concurrent-ruby (1.0.5)
|
47
|
+
connection_pool (2.2.2)
|
44
48
|
crack (0.4.3)
|
45
49
|
safe_yaml (~> 1.0.0)
|
46
50
|
crass (1.0.4)
|
@@ -100,6 +104,7 @@ GEM
|
|
100
104
|
rails-html-sanitizer (1.0.4)
|
101
105
|
loofah (~> 2.2, >= 2.2.2)
|
102
106
|
rake (10.5.0)
|
107
|
+
redis (4.0.2)
|
103
108
|
request_store (1.3.2)
|
104
109
|
rest-client (2.0.2)
|
105
110
|
http-cookie (>= 1.0.2, < 2.0)
|
data/identity_toolbox.gemspec
CHANGED
@@ -4,6 +4,7 @@ lib = File.expand_path('lib', __dir__)
|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
require 'identity_toolbox/version'
|
6
6
|
|
7
|
+
# rubocop:disable Metrics/BlockLength
|
7
8
|
Gem::Specification.new do |spec|
|
8
9
|
spec.name = 'identity_toolbox'
|
9
10
|
spec.version = IdentityToolbox::VERSION
|
@@ -14,12 +15,14 @@ Gem::Specification.new do |spec|
|
|
14
15
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
15
16
|
f.match(%r{^(test|spec|features)/})
|
16
17
|
end
|
17
|
-
|
18
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
+
spec.add_dependency 'activesupport', '>= 4.0.0'
|
22
|
+
spec.add_dependency 'connection_pool', '~> 2.2'
|
21
23
|
spec.add_dependency 'json_api_toolbox', '~> 0.16'
|
22
24
|
spec.add_dependency 'pundit', '~> 2.0'
|
25
|
+
spec.add_dependency 'redis', '~> 4.0'
|
23
26
|
spec.add_dependency 'request_store', '~> 1.3'
|
24
27
|
spec.add_dependency 'rspec'
|
25
28
|
|
@@ -34,3 +37,4 @@ Gem::Specification.new do |spec|
|
|
34
37
|
spec.add_development_dependency 'vcr'
|
35
38
|
spec.add_development_dependency 'webmock'
|
36
39
|
end
|
40
|
+
# rubocop:enable Metrics/BlockLength
|
@@ -10,7 +10,13 @@ module IdentityToolbox
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def current_user
|
13
|
-
|
13
|
+
header = request.headers['user-identifier']
|
14
|
+
|
15
|
+
return unless header
|
16
|
+
|
17
|
+
user_identifier = JSON.parse(Base64.decode64(header),
|
18
|
+
symbolize_names: true)
|
19
|
+
UserEntity.new(user_identifier)
|
14
20
|
end
|
15
21
|
|
16
22
|
def render_forbidden(_exception)
|
@@ -2,6 +2,33 @@
|
|
2
2
|
|
3
3
|
module IdentityToolbox
|
4
4
|
class Configuration
|
5
|
-
|
5
|
+
DEFAULTS = { cache_pool_timeout: 5, cache_pool_size: 5 }.freeze
|
6
|
+
|
7
|
+
attr_writer :identity_service_url, :identity_cache_url,
|
8
|
+
:cache_pool_timeout, :cache_pool_size
|
9
|
+
|
10
|
+
def identity_service_url
|
11
|
+
raise 'identity_service_url is not set' unless @identity_service_url
|
12
|
+
|
13
|
+
@identity_service_url
|
14
|
+
end
|
15
|
+
|
16
|
+
def identity_cache_url
|
17
|
+
raise 'identity_cache_url is not set' unless @identity_cache_url
|
18
|
+
|
19
|
+
@identity_cache_url
|
20
|
+
end
|
21
|
+
|
22
|
+
def cache_pool_timeout
|
23
|
+
return DEFAULTS[:cache_pool_timeout] unless @cache_pool_timeout
|
24
|
+
|
25
|
+
@cache_pool_timeout.to_i
|
26
|
+
end
|
27
|
+
|
28
|
+
def cache_pool_size
|
29
|
+
return DEFAULTS[:cache_pool_size] unless @cache_pool_size
|
30
|
+
|
31
|
+
@cache_pool_size.to_i
|
32
|
+
end
|
6
33
|
end
|
7
34
|
end
|
@@ -12,11 +12,12 @@ module IdentityToolbox
|
|
12
12
|
Class.new do
|
13
13
|
include PolicyMethods
|
14
14
|
|
15
|
-
attr_reader :scope
|
15
|
+
attr_reader :user, :scope
|
16
16
|
|
17
17
|
delegate :attributes, to: klass.name.to_sym
|
18
18
|
|
19
|
-
def initialize(
|
19
|
+
def initialize(user, scope)
|
20
|
+
@user = user
|
20
21
|
@scope = scope
|
21
22
|
end
|
22
23
|
|
@@ -70,9 +71,10 @@ module IdentityToolbox
|
|
70
71
|
|
71
72
|
delegate :attributes, to: :class
|
72
73
|
|
73
|
-
attr_reader :record
|
74
|
+
attr_reader :user, :record
|
74
75
|
|
75
|
-
def initialize(
|
76
|
+
def initialize(user, record)
|
77
|
+
@user = user
|
76
78
|
@record = record
|
77
79
|
end
|
78
80
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IdentityToolbox
|
4
|
+
class IdentityCache
|
5
|
+
def self.user_account(user_entity)
|
6
|
+
new(user_entity).user_account
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_reader :user_entity
|
10
|
+
|
11
|
+
def initialize(user_entity)
|
12
|
+
@user_entity = user_entity
|
13
|
+
end
|
14
|
+
|
15
|
+
def user_account
|
16
|
+
return unless user_entity && user_string
|
17
|
+
|
18
|
+
JSON.parse(user_string, symbolize_names: true)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def cache_key
|
24
|
+
return unless user_entity.id && user_entity.user_name
|
25
|
+
|
26
|
+
@cache_key ||= "user_view:#{user_entity.id}|#{user_entity.user_name}"
|
27
|
+
end
|
28
|
+
|
29
|
+
def user_string
|
30
|
+
return unless cache_key
|
31
|
+
|
32
|
+
@user_string ||=
|
33
|
+
RedisClient.with do |connection|
|
34
|
+
connection.get(cache_key)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IdentityToolbox
|
4
|
+
class IdentityRepository
|
5
|
+
class << self
|
6
|
+
def user_account_views
|
7
|
+
new.user_account_views
|
8
|
+
end
|
9
|
+
|
10
|
+
def user_account(user_entity)
|
11
|
+
new(user_entity).user_account
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :user_entity
|
16
|
+
|
17
|
+
def initialize(user_entity = nil)
|
18
|
+
@user_entity = user_entity
|
19
|
+
end
|
20
|
+
|
21
|
+
def user_account_views
|
22
|
+
IdentityService.user_account_views.map(&method(:to_user_account_view))
|
23
|
+
end
|
24
|
+
|
25
|
+
def user_account
|
26
|
+
return cache_user_account_entity if cache_valid?
|
27
|
+
|
28
|
+
service_user_account_entity
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def to_user_account_view(response)
|
34
|
+
UserAccountViewEntity.new(response.instance_values.symbolize_keys)
|
35
|
+
end
|
36
|
+
|
37
|
+
def cache_valid?
|
38
|
+
cache_user_account_entity.try(:created_at) &&
|
39
|
+
cache_user_account_entity.created_at >= Time.current - 1.hour
|
40
|
+
end
|
41
|
+
|
42
|
+
def cache_user_account
|
43
|
+
@cache_user_account ||= IdentityCache.user_account(user_entity)
|
44
|
+
end
|
45
|
+
|
46
|
+
def cache_user_account_entity
|
47
|
+
return unless cache_user_account
|
48
|
+
|
49
|
+
@cache_user_account_entity ||= UserAccountEntity.new(cache_user_account)
|
50
|
+
end
|
51
|
+
|
52
|
+
def service_user_account_entity
|
53
|
+
@service_user_account_entity ||=
|
54
|
+
UserAccountEntity.from_user_account_views(user_account_views)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -2,12 +2,18 @@
|
|
2
2
|
|
3
3
|
module IdentityToolbox
|
4
4
|
class IdentityService < ::JsonApiToolbox::Service
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def user_account_views
|
7
|
+
get(url: "#{config.identity_service_url}/users/accounts")
|
8
|
+
end
|
9
|
+
|
10
|
+
def find_view_models
|
11
|
+
user_account_views
|
12
|
+
end
|
8
13
|
|
9
|
-
|
10
|
-
|
14
|
+
def config
|
15
|
+
@config ||= IdentityToolbox.configuration
|
16
|
+
end
|
11
17
|
end
|
12
18
|
end
|
13
19
|
end
|
@@ -2,26 +2,13 @@
|
|
2
2
|
|
3
3
|
module IdentityToolbox
|
4
4
|
module PolicyMethods
|
5
|
-
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
def client_ids
|
10
|
-
view_models.map(&:client_id).map(&:to_s).uniq
|
11
|
-
end
|
12
|
-
|
13
|
-
def account_ids
|
14
|
-
view_models.map(&:account_id).map(&:to_s).uniq
|
15
|
-
end
|
16
|
-
|
17
|
-
def sinacor_advisor_ids
|
18
|
-
view_models.map(&:sinacor_advisor_id).map(&:to_s).uniq
|
19
|
-
end
|
5
|
+
delegate :identification_documents, :client_ids, :account_ids,
|
6
|
+
:sinacor_advisor_ids, to: :user_account_entity
|
20
7
|
|
21
8
|
private
|
22
9
|
|
23
|
-
def
|
24
|
-
@
|
10
|
+
def user_account_entity
|
11
|
+
@user_account_entity ||= IdentityRepository.user_account(user)
|
25
12
|
end
|
26
13
|
end
|
27
14
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IdentityToolbox
|
4
|
+
class RedisClient
|
5
|
+
class << self
|
6
|
+
delegate :with, to: :pool
|
7
|
+
|
8
|
+
def config
|
9
|
+
@config ||= IdentityToolbox.configuration
|
10
|
+
end
|
11
|
+
|
12
|
+
def pool
|
13
|
+
@pool ||= ConnectionPool.new(size: config.cache_pool_size,
|
14
|
+
timeout: config.cache_pool_timeout) do
|
15
|
+
Redis.new(url: config.identity_cache_url)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -28,12 +28,7 @@ module IdentityToolbox
|
|
28
28
|
RSpec.shared_examples 'a default policy for' do |attributes|
|
29
29
|
include_context 'default policy records', attributes
|
30
30
|
|
31
|
-
|
32
|
-
allow(IdentityToolbox::IdentityService).
|
33
|
-
to receive(:find_view_models).and_return(view_models)
|
34
|
-
end
|
35
|
-
|
36
|
-
subject { described_class.new(nil, record).allowed? }
|
31
|
+
subject { described_class.new('user', record).allowed? }
|
37
32
|
|
38
33
|
def self.join(attributes)
|
39
34
|
attributes.values.join(', ')
|
@@ -61,6 +56,16 @@ module IdentityToolbox
|
|
61
56
|
end
|
62
57
|
|
63
58
|
RSpec.shared_examples 'a default policy' do
|
59
|
+
let(:user_account) do
|
60
|
+
IdentityToolbox::UserAccountEntity.
|
61
|
+
from_user_account_views(view_models)
|
62
|
+
end
|
63
|
+
|
64
|
+
before do
|
65
|
+
allow(IdentityToolbox::IdentityRepository).
|
66
|
+
to receive(:user_account).with('user').and_return(user_account)
|
67
|
+
end
|
68
|
+
|
64
69
|
def self.combinations
|
65
70
|
(1..4).flat_map do |quantity|
|
66
71
|
described_class.attributes.keys.combination(quantity).to_a
|
@@ -23,6 +23,10 @@ module IdentityToolbox
|
|
23
23
|
except(nil))
|
24
24
|
end
|
25
25
|
let(:scope) { model_name.constantize.all }
|
26
|
+
let(:user_account) do
|
27
|
+
IdentityToolbox::UserAccountEntity.
|
28
|
+
from_user_account_views(view_models)
|
29
|
+
end
|
26
30
|
end
|
27
31
|
|
28
32
|
RSpec.shared_examples 'resolve method' do |attributes|
|
@@ -57,15 +61,15 @@ module IdentityToolbox
|
|
57
61
|
|
58
62
|
RSpec.shared_examples 'a default policy scope' do
|
59
63
|
describe described_class::Scope do
|
64
|
+
before do
|
65
|
+
allow(IdentityToolbox::IdentityRepository).
|
66
|
+
to receive(:user_account).with('user').and_return(user_account)
|
67
|
+
end
|
68
|
+
|
60
69
|
shared_examples 'a default policy scope for' do |attributes|
|
61
70
|
include_context 'default policy scope records', attributes
|
62
71
|
|
63
|
-
|
64
|
-
allow(IdentityToolbox::IdentityService).
|
65
|
-
to receive(:find_view_models).and_return(view_models)
|
66
|
-
end
|
67
|
-
|
68
|
-
subject { described_class.new(nil, scope).resolve }
|
72
|
+
subject { described_class.new('user', scope).resolve }
|
69
73
|
|
70
74
|
include_examples 'resolve method', attributes
|
71
75
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IdentityToolbox
|
4
|
+
class UserAccountEntity
|
5
|
+
ACCESS_LISTS = %i[account_ids client_ids documents
|
6
|
+
sinacor_advisor_ids].freeze
|
7
|
+
ATTRS = %i[id username created_at].freeze
|
8
|
+
|
9
|
+
ATTRS.each { |item| attr_reader item }
|
10
|
+
ACCESS_LISTS.each { |item| attr_reader item }
|
11
|
+
|
12
|
+
def initialize(**args)
|
13
|
+
ATTRS.each { |key| instance_variable_set("@#{key}", args[key]) }
|
14
|
+
ACCESS_LISTS.each do |key|
|
15
|
+
instance_variable_set("@#{key}", args[key].map(&:to_s).uniq)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def identification_documents
|
20
|
+
documents
|
21
|
+
end
|
22
|
+
|
23
|
+
def created_at
|
24
|
+
return unless @created_at
|
25
|
+
|
26
|
+
Time.parse(@created_at)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.from_user_account_views(user_account_views)
|
30
|
+
new(id: user_account_views.try(:first).try(:user),
|
31
|
+
documents: user_account_views.map(&:document),
|
32
|
+
client_ids: user_account_views.map(&:client_id),
|
33
|
+
account_ids: user_account_views.map(&:account_id),
|
34
|
+
sinacor_advisor_ids:
|
35
|
+
user_account_views.map(&:sinacor_advisor_id))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IdentityToolbox
|
4
|
+
class UserAccountViewEntity
|
5
|
+
ATTRS = %i[id user document client_id account_id sinacor_advisor_id].freeze
|
6
|
+
|
7
|
+
ATTRS.each { |item| attr_reader item }
|
8
|
+
|
9
|
+
def initialize(**args)
|
10
|
+
ATTRS.each { |key| instance_variable_set("@#{key}", args[key]) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IdentityToolbox
|
4
|
+
class UserEntity
|
5
|
+
ATTRS = %i[id user_name email remote_ip].freeze
|
6
|
+
|
7
|
+
ATTRS.each { |item| attr_reader item }
|
8
|
+
|
9
|
+
def initialize(**args)
|
10
|
+
ATTRS.each { |key| instance_variable_set("@#{key}", args[key]) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/identity_toolbox.rb
CHANGED
@@ -1,12 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'active_support/core_ext/object/instance_variables'
|
4
|
+
require 'active_support/core_ext/hash/keys'
|
5
|
+
require 'connection_pool'
|
6
|
+
require 'redis'
|
3
7
|
require 'dotenv/load'
|
4
8
|
require 'pundit'
|
5
9
|
require 'json_api_toolbox'
|
6
10
|
require 'request_store'
|
11
|
+
require 'base64'
|
7
12
|
require 'identity_toolbox/configuration'
|
8
13
|
require 'identity_toolbox/version'
|
9
14
|
require 'identity_toolbox/identity_service'
|
15
|
+
require 'identity_toolbox/redis_client'
|
16
|
+
require 'identity_toolbox/identity_cache'
|
17
|
+
require 'identity_toolbox/user_entity'
|
18
|
+
require 'identity_toolbox/user_account_entity'
|
19
|
+
require 'identity_toolbox/user_account_view_entity'
|
20
|
+
require 'identity_toolbox/identity_repository'
|
10
21
|
require 'identity_toolbox/policy_methods'
|
11
22
|
require 'identity_toolbox/default_policy'
|
12
23
|
require 'identity_toolbox/authorizable'
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: identity_toolbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Codeminer 42
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: connection_pool
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.2'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.2'
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: json_api_toolbox
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +66,20 @@ dependencies:
|
|
38
66
|
- - "~>"
|
39
67
|
- !ruby/object:Gem::Version
|
40
68
|
version: '2.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: redis
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '4.0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '4.0'
|
41
83
|
- !ruby/object:Gem::Dependency
|
42
84
|
name: request_store
|
43
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -232,13 +274,19 @@ files:
|
|
232
274
|
- lib/identity_toolbox/authorizable.rb
|
233
275
|
- lib/identity_toolbox/configuration.rb
|
234
276
|
- lib/identity_toolbox/default_policy.rb
|
277
|
+
- lib/identity_toolbox/identity_cache.rb
|
278
|
+
- lib/identity_toolbox/identity_repository.rb
|
235
279
|
- lib/identity_toolbox/identity_service.rb
|
236
280
|
- lib/identity_toolbox/policy_methods.rb
|
281
|
+
- lib/identity_toolbox/redis_client.rb
|
237
282
|
- lib/identity_toolbox/spec_support/authorization_steps.rb
|
238
283
|
- lib/identity_toolbox/spec_support/shared_examples_for_controllers.rb
|
239
284
|
- lib/identity_toolbox/spec_support/shared_examples_for_policies.rb
|
240
285
|
- lib/identity_toolbox/spec_support/shared_examples_for_policy_scopes.rb
|
241
286
|
- lib/identity_toolbox/spec_support/tags.rb
|
287
|
+
- lib/identity_toolbox/user_account_entity.rb
|
288
|
+
- lib/identity_toolbox/user_account_view_entity.rb
|
289
|
+
- lib/identity_toolbox/user_entity.rb
|
242
290
|
- lib/identity_toolbox/version.rb
|
243
291
|
homepage:
|
244
292
|
licenses: []
|