mongoid-kms 0.0.19 → 0.0.20

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 499cdefc517aa05b0369dd7d87778f975fb17221
4
- data.tar.gz: 7de75298cea61a9964422ab70080859b4fc2cdbf
3
+ metadata.gz: 0ef5d00b5940a40440f302133dffa2b364b73a86
4
+ data.tar.gz: b970e5a37fbf0b68aa52b7a61f7197fdf008d896
5
5
  SHA512:
6
- metadata.gz: dfca6638b45ad191af3bc5c0d0ee299528b61135659aba78cace8fe4c3268c3ebf207f74b1ba7767eacba93193d21d97f1667488d38a751850c5da570dfdaee2
7
- data.tar.gz: 9e90c4ad3dd3aad9cdc81b82f0543b2e22a6dc5f125932c77abd41373d84fdbef29b4596fc73fd63fd923f70e17cbdff236716c920f33e8be8a24cae71e71d80
6
+ metadata.gz: 9f5c68d2c32a9785209e2138ed795311d103cfa8071fae65875d6a0f1cc9e73b76e0b71a31252b043857ccf9d1a6107c297265a93dbaba36dcd9c64feaa05ac4
7
+ data.tar.gz: 4ccbbe113dd32f9a9d50aff1e6c2a41a049ebf1afc1be7e54841076d2ce8f292e0d3c037d4e712dda5db10dfd60cff68993b2a8c19ee6c89ea026d48d2edb035
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Kms
3
- VERSION = "0.0.19"
3
+ VERSION = "0.0.20"
4
4
  end
5
5
  end
data/lib/mongoid/kms.rb CHANGED
@@ -7,7 +7,8 @@ module Mongoid
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
10
- @kms_field_map ||= {}
10
+ class_attribute :kms_field_map
11
+ self.kms_field_map ||= {}
11
12
 
12
13
  unless self.ancestors.include?(ActiveModel::Dirty)
13
14
  include ActiveModel::Dirty
@@ -79,10 +80,47 @@ module Mongoid
79
80
 
80
81
  # Class methods
81
82
  module ClassMethods
82
- def kms_field_map
83
- @kms_field_map
83
+ def inherited(child)
84
+ child.kms_field_map = self.kms_field_map.clone
85
+
86
+ child.kms_field_map.each do |field_name, args|
87
+ child.add_secure_field(field_name, args)
88
+ end
84
89
  end
85
90
 
91
+ def add_secure_field(field_name, args)
92
+ encrypted_field_name = get_encrypted_field_name(field_name)
93
+
94
+ define_attribute_methods field_name.to_sym
95
+ before_save :set_kms_values
96
+
97
+ kms_field_map[field_name.to_s] = {context: args.delete(:context), type: args[:type]}
98
+
99
+ field encrypted_field_name, type: Mongoid::Kms.bson_class::Binary
100
+
101
+ self.class_eval do
102
+ define_method(field_name) do
103
+ instance_variable_get("@#{field_name}") || begin
104
+ raw = send("kms_secure_#{field_name}")
105
+
106
+ if raw.nil?
107
+ raw
108
+ else
109
+ v = self.class.decrypt_field(self, field_name, raw)
110
+ instance_variable_set("@#{field_name}", v)
111
+ v
112
+ end
113
+ end
114
+ end
115
+
116
+ define_method("#{field_name}=") do |value|
117
+ self.send("#{field_name}_will_change!")
118
+ instance_variable_set("@#{field_name}", value)
119
+ end
120
+ end
121
+ end
122
+
123
+
86
124
  def encrypt_field(object, field_name, value)
87
125
  Mongoid::Kms.kms.encrypt({
88
126
  key_id: Mongoid::Kms.key,
@@ -128,11 +166,11 @@ module Mongoid
128
166
  end
129
167
 
130
168
  def kms_context_array(object, field_name)
131
- @kms_field_map[field_name.to_s][:context] || []
169
+ kms_field_map[field_name.to_s][:context] || []
132
170
  end
133
171
 
134
172
  def kms_type(field_name)
135
- @kms_field_map[field_name.to_s][:type]
173
+ kms_field_map[field_name.to_s][:type]
136
174
  end
137
175
 
138
176
  def get_encrypted_field_name(field_name)
@@ -140,33 +178,7 @@ module Mongoid
140
178
  end
141
179
 
142
180
  def secure_field(field_name, args)
143
- encrypted_field_name = get_encrypted_field_name(field_name)
144
-
145
- @kms_field_map[field_name.to_s] = {context: args.delete(:context), type: args.delete(:type)}
146
-
147
- field encrypted_field_name, args.merge(type: Mongoid::Kms.bson_class::Binary)
148
-
149
- define_attribute_methods field_name.to_sym
150
- before_save :set_kms_values
151
-
152
- define_method(field_name) do
153
- instance_variable_get("@#{field_name}") || begin
154
- raw = send("kms_secure_#{field_name}")
155
-
156
- if raw.nil?
157
- raw
158
- else
159
- v = self.class.decrypt_field(self, field_name, raw)
160
- instance_variable_set("@#{field_name}", v)
161
- v
162
- end
163
- end
164
- end
165
-
166
- define_method("#{field_name}=") do |value|
167
- self.send("#{field_name}_will_change!")
168
- instance_variable_set("@#{field_name}", value)
169
- end
181
+ add_secure_field(field_name, args)
170
182
  end
171
183
  end
172
184
 
@@ -52,4 +52,14 @@ describe Mongoid::Kms do
52
52
  expect{Mongoid::Kms.configure({region: "", key: ""})}.to raise_error(Mongoid::Kms::Errors::ConfigurationError, "Region and KMS id key are required.")
53
53
  end
54
54
 
55
+ it "works with extended classes" do
56
+ o = ExtendedClass.new(super_secure: "batman", unsecure: "robin", timestamp: Time.now, additional_secure: "wha!")
57
+ o.save!
58
+
59
+ byebug
60
+
61
+ o = ExtendedClass.find(o.id)
62
+ expect(o.additional_secure).to eq("wha!")
63
+ end
64
+
55
65
  end
data/spec/spec_helper.rb CHANGED
@@ -30,4 +30,8 @@ class ClassWithoutContext
30
30
  field :unsecure
31
31
  end
32
32
 
33
+ class ExtendedClass < OtherClass
34
+ secure_field :additional_secure, type: String, context: [:unsecure, :timestamp]
35
+ end
36
+
33
37
  Mongoid::Kms.configure({region: "us-east-1", key: ENV['AWS_KMS_KEY_ID']})
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-kms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.19
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Winslett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-15 00:00:00.000000000 Z
11
+ date: 2014-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid