pg_rls 0.0.2.6.11 → 0.0.2.6.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 961e2929b7e30e78b3900be5b998f918b5ffac245f908ee0d1759fb36f4cdc9f
4
- data.tar.gz: 5be148679ce859f8140e10d5d467b4007988a162d6f5f3b812f6996176642c92
3
+ metadata.gz: f20b589d7f7ad97bcbf75f1e0ff592e7fc27abe088f14f63ef2bf85316330bb5
4
+ data.tar.gz: 927b254ebe42c9d93cd444a178f17d7b60b3cb5f47937123f5d3c1c7b037af18
5
5
  SHA512:
6
- metadata.gz: 0171035774710f89e5b5b7b46f379eefadbabb681e9edd65faea4b55a741b29b7550921a03704c011406ede9b559223a09bb22846beb1f6d88340be4c180a0e2
7
- data.tar.gz: c2d07c0b91cf14714937ccfb3c59fc875e28b83c20c025e87ae31d2d3299298bacbc5b99612023f3c5235ae6d95b12f4b45864e20f17472760b5a6a2f9df11a4
6
+ metadata.gz: 5e8f8fa951cf0e544515423ff63379e13741ee777cf189725e7bbd3e75b6df091bf895e6f879f97c058f8ee7845b98178b3fd4121cdc86ef7322db94054c5fe6
7
+ data.tar.gz: b94f0eae566441c7e694bff41a4b3100bdfc7f2476bd5a5a6ddedfb3c793a8cd35ca805e6f36e722dace5410649d7d897425c0702392b69a077abda857d91795
data/.rubocop.yml CHANGED
@@ -159,4 +159,4 @@ Style/GuardClause:
159
159
  - lib/generators/pg_rls/active_record/active_record_generator.rb
160
160
  Naming/AccessorMethodName:
161
161
  Exclude:
162
- - lib/pg_rls/tenant.rb
162
+ - lib/pg_rls/tenant.rb
@@ -27,18 +27,18 @@ PgRls.setup do |config|
27
27
  ## which is autopopulated on each request
28
28
  # config.solo_mode = true
29
29
 
30
+ ## ------------------------------ Middleware SetResetConnection -----------------------------
31
+ ## Uncomment this lines if you're using SetResetConnection Middleware
32
+ #
33
+ # config.session_store_server = Rails.application.config_for(:redis).session
34
+ #
35
+ ## Uncomment this line if you're not using warden as your authentication system or if you
36
+ ## changed the default warden key. Devise, uses warden authentication.
37
+ # config.session_store_default_warden_key = '2'
38
+ #
39
+ ## Uncomment this line if you're setting a diferent session key than stablished under your
40
+ ## redis server configuration
41
+ # config.session_key_prefix = '_hub_session'
30
42
  ##
31
- ## After installing the PgRls gem, you can add the `PgRls::Middleware::SetResetConnection`
32
- ## middleware to your Rails application to secure all database connections using Row Level Security.
33
- ## To add the middleware using the `middleware.use` method, add the following
34
- ## lines to your `config/application.rb` file:
35
- ## require 'pg_rls/middleware/set_reset_connection'
36
- ## config.middleware.use PgRls::Middleware::SetResetConnection
37
- ## Note: Be sure to add the `PgRls::Middleware::SetResetConnection` middleware after any
38
- ## middleware that sets up the Rails session, since the RLS middleware depends
39
- ## on the presence of the session to work correctly.
40
- ## Additionally, you will need to manually require the `PgRls::Middleware::SetResetConnection`
41
- ## file in your application, as shown in the first line of the code snippet above.
42
- # config.session_key = '_hub_sessions'
43
- # config.session_prefix = '_session_id:2::'
43
+ ## ------------------------------ Middleware SetResetConnection -----------------------------
44
44
  end
@@ -1,5 +1,43 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ module PgRls
4
+ class FrozenConfiguration < StandardError; end
5
+
6
+ def self.sessions
7
+ @sessions ||= Redis.new(@session_store_server)
8
+ end
9
+
10
+ def self.session_prefix
11
+ @session_prefix ||= begin
12
+ store_default_warden_key = @session_store_default_warden_key || '2'
13
+
14
+ "#{session_key_prefix}:#{store_default_warden_key}::"
15
+ end
16
+ end
17
+
18
+ def self.session_store_server=(opts = {})
19
+ raise Errors::FrozenConfiguration unless @sessions.nil?
20
+
21
+ @session_store_server = opts.deep_symbolize_keys
22
+ end
23
+
24
+ def self.session_store_default_warden_key=(val)
25
+ raise Errors::FrozenConfiguration unless @sessions.nil?
26
+
27
+ @session_store_default_warden_key = val
28
+ end
29
+
30
+ def self.session_key_prefix
31
+ @session_key_prefix ||= @session_key_prefix || @session_store_server[:key_prefix]
32
+ end
33
+
34
+ def self.session_key_prefix=(val)
35
+ raise Errors::FrozenConfiguration unless @sessions.nil?
36
+
37
+ @session_key_prefix = val
38
+ end
39
+ end
40
+
3
41
  module PgRls
4
42
  module Middleware
5
43
  # Set RLS if sessions present.
@@ -26,7 +64,7 @@ module PgRls
26
64
  cookie_string = env['HTTP_COOKIE']
27
65
  return if cookie_string.nil?
28
66
 
29
- cookie_regex = /#{PgRls.session_key}=([^;]+)/
67
+ cookie_regex = /#{PgRls.session_key_prefix}=([^;]+)/
30
68
  match = cookie_regex.match(cookie_string)
31
69
  match[1] if match
32
70
  end
@@ -36,8 +74,15 @@ module PgRls
36
74
 
37
75
  return if cookie.blank?
38
76
 
39
- sessions = Rails.cache.read("#{PgRls.session_prefix}#{Digest::SHA256.hexdigest(cookie)}")
40
- sessions['_tenant'] if sessions.present?
77
+ redis_session_key = "#{PgRls.session_prefix}#{Digest::SHA256.hexdigest(cookie)}"
78
+ tenant_session = Marshal.load(PgRls.sessions.get(redis_session_key))
79
+
80
+ return if tenant_session.blank?
81
+ return if tenant_session['_tenant'].blank?
82
+
83
+ tenant_session['_tenant'] if tenant_session.present?
84
+ rescue TypeError
85
+ nil
41
86
  end
42
87
 
43
88
  def rails_active_storage_request?(env)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PgRls
4
- VERSION = '0.0.2.6.11'
4
+ VERSION = '0.0.2.6.12'
5
5
  end
data/lib/pg_rls.rb CHANGED
@@ -148,12 +148,6 @@ module PgRls
148
148
  mattr_accessor :test_inline_tenant
149
149
  @@test_inline_tenant = false
150
150
 
151
- mattr_accessor :session_key
152
- @@session_key = '_hub_sessions'
153
-
154
- mattr_accessor :session_prefix
155
- @@session_prefix = '_session_id:2::'
156
-
157
151
  mattr_accessor :search_methods
158
152
  @@search_methods = %i[subdomain id tenant_id]
159
153
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_rls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.6.11
4
+ version: 0.0.2.6.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Laloush
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-20 00:00:00.000000000 Z
11
+ date: 2023-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler