File tree Expand file tree Collapse file tree 3 files changed +48
-3
lines changed
lib/active_record/encryption Expand file tree Collapse file tree 3 files changed +48
-3
lines changed Original file line number Diff line number Diff line change @@ -140,11 +140,11 @@ def encryptor
140
140
end
141
141
142
142
def encryption_options
143
- @encryption_options ||= { key_provider : key_provider , cipher_options : { deterministic : deterministic? } } . compact
143
+ { key_provider : key_provider , cipher_options : { deterministic : deterministic? } } . compact
144
144
end
145
145
146
146
def decryption_options
147
- @decryption_options ||= { key_provider : key_provider } . compact
147
+ { key_provider : key_provider } . compact
148
148
end
149
149
150
150
def clean_text_scheme
Original file line number Diff line number Diff line change @@ -50,7 +50,7 @@ def fixed?
50
50
end
51
51
52
52
def key_provider
53
- @key_provider ||= @ key_provider_param || build_key_provider || default_key_provider
53
+ @key_provider_param || build_key_provider || default_key_provider
54
54
end
55
55
56
56
def merge ( other_scheme )
Original file line number Diff line number Diff line change @@ -33,6 +33,51 @@ class ActiveRecord::Encryption::EncryptableRecordTest < ActiveRecord::Encryption
33
33
assert_invalid_key_cant_read_attribute ( post , :body )
34
34
end
35
35
36
+ test "swapping key_providers via with_encryption_context" do
37
+ key_provider1 = ActiveRecord ::Encryption ::DerivedSecretKeyProvider . new ( SecureRandom . base64 ( 32 ) )
38
+ key_provider2 = ActiveRecord ::Encryption ::DerivedSecretKeyProvider . new ( SecureRandom . base64 ( 32 ) )
39
+
40
+ post1 = post2 = nil
41
+
42
+ ActiveRecord ::Encryption . with_encryption_context key_provider : key_provider1 do
43
+ post1 = EncryptedPost . create! ( title : "post1!" , body : "first post!" )
44
+ end
45
+
46
+ ActiveRecord ::Encryption . with_encryption_context key_provider : key_provider2 do
47
+ post2 = EncryptedPost . create! ( title : "post2!" , body : "second post!" )
48
+ end
49
+
50
+ post1 . reload
51
+ assert_raises ActiveRecord ::Encryption ::Errors ::Decryption do
52
+ post1 . title
53
+ end
54
+
55
+ post2 . reload
56
+ assert_raises ActiveRecord ::Encryption ::Errors ::Decryption do
57
+ post2 . title
58
+ end
59
+
60
+ ActiveRecord ::Encryption . with_encryption_context key_provider : key_provider1 do
61
+ post1 . reload
62
+ assert_equal "post1!" , post1 . title
63
+
64
+ post2 . reload
65
+ assert_raises ActiveRecord ::Encryption ::Errors ::Decryption do
66
+ post2 . title
67
+ end
68
+ end
69
+
70
+ ActiveRecord ::Encryption . with_encryption_context key_provider : key_provider2 do
71
+ post2 . reload
72
+ assert_equal "post2!" , post2 . title
73
+
74
+ post1 . reload
75
+ assert_raises ActiveRecord ::Encryption ::Errors ::Decryption do
76
+ post1 . title
77
+ end
78
+ end
79
+ end
80
+
36
81
test "ignores nil values" do
37
82
assert_nil EncryptedBook . create! ( name : nil ) . name
38
83
end
You can’t perform that action at this time.
0 commit comments