Module: Mongoid::Kms
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/mongoid/kms.rb,
lib/mongoid/kms/mock.rb,
lib/mongoid/kms/version.rb
Defined Under Namespace
Modules: ClassMethods, Errors
Classes: Rot13
Constant Summary
collapse
- VERSION =
"0.2.41"
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.binary_factory(data) ⇒ Object
51
52
53
54
55
56
57
|
# File 'lib/mongoid/kms.rb', line 51
def binary_factory(data)
if defined? Moped::BSON
Moped::BSON::Binary.new(:generic, data)
elsif defined? BSON
BSON::Binary.new(data)
end
end
|
.bson_class ⇒ Object
43
44
45
46
47
48
49
|
# File 'lib/mongoid/kms.rb', line 43
def bson_class
if defined? Moped::BSON
Moped::BSON
elsif defined? BSON
BSON
end
end
|
.configuration ⇒ Object
27
28
29
|
# File 'lib/mongoid/kms.rb', line 27
def configuration
@configuration || {}
end
|
19
20
21
22
23
24
25
|
# File 'lib/mongoid/kms.rb', line 19
def configure(args)
if args[:region] && args[:region] != "" && args[:key] && args[:key] != ""
@configuration = args
else
raise Errors::ConfigurationError.new("Region and KMS id key are required.")
end
end
|
.key ⇒ Object
39
40
41
|
# File 'lib/mongoid/kms.rb', line 39
def key
configuration[:key]
end
|
.kms ⇒ Object
31
32
33
|
# File 'lib/mongoid/kms.rb', line 31
def kms
@kms ||= Aws::KMS::Client.new(region: self.region)
end
|
.region ⇒ Object
35
36
37
|
# File 'lib/mongoid/kms.rb', line 35
def region
configuration[:region]
end
|
Instance Method Details
#kms_context_value_changed?(field_name) ⇒ Boolean
85
86
87
|
# File 'lib/mongoid/kms.rb', line 85
def kms_context_value_changed?(field_name)
self.class.kms_context_array(self, field_name).find { |f| self.respond_to?(f) && self.respond_to?("#{f}_changed?") && self.send("#{f}_changed?") }
end
|
#set_kms_values ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/mongoid/kms.rb', line 61
def set_kms_values
self.class.kms_field_map.each do |field_name, settings|
if self.new_record? || changed_attributes.keys.include?(field_name.to_sym) || kms_context_value_changed?(field_name) encrypted_field_name = self.class.get_encrypted_field_name(field_name)
if !instance_variable_defined?("@#{field_name}") && kms_context_value_changed?(field_name)
raw = self.send(encrypted_field_name)
raw = raw.data if raw.is_a?(Mongoid::Kms.bson_class::Binary)
value = self.class.decrypt_field(self, field_name, raw, self.class.kms_context_was(self, field_name))
else
value = send("#{field_name}")
end
if value.nil? || value == ""
self.send("#{encrypted_field_name}=", nil)
else
self.send("#{encrypted_field_name}=", Mongoid::Kms.binary_factory(self.class.encrypt_field(self, field_name, value)))
end
end
end
end
|