unidom-common 1.7.1 → 1.7.2

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
  SHA1:
3
- metadata.gz: 3bb89444016240132128a60d0665118f9c4cf44d
4
- data.tar.gz: 66dbb7bf981e7036b5fe87fb24786c74d784bb5a
3
+ metadata.gz: 28a8fc2b74ee9eec8f6e875a18e986da12400624
4
+ data.tar.gz: f1834cc03640dffc69917c2e14e44677355ca9ef
5
5
  SHA512:
6
- metadata.gz: 658852f3c1b108d6767cffaf141db6a7a8e1b2c4c577b452cff75716979733479205e5f200e8b5c675661afc06bb2d990eda5b200eb1a259436f0d10785dc088
7
- data.tar.gz: 6b228c16f1a451dfc870dfe76c4f3641d76f227848d7e041516eca4676cbc28776c8ba26b4900e47bb34c80ca63b3a14efce43b5f1ee5ba53b8833eee0f9b4bd
6
+ metadata.gz: d12d9206fe0ebd406d80df3184380081407a7bde2bc32a6f4cf7fb9da495379c968f1e3c3f17cff6c9153c56c2467b51f86c3050ba928ff93c12a81c5467a494
7
+ data.tar.gz: 327c616410e7d17a5d5afbb1caad676f85c833e236b72f2755a88272ed4651882a1223f872a28bc72517a2fc237831329c83ee4e274cda4bd690afb156009754
@@ -8,14 +8,43 @@ module Unidom::Common::Concerns::SecureColumn
8
8
 
9
9
  cattr_accessor :secure_columns
10
10
 
11
+ def do_encrypt_secure_column(name)
12
+ name = name.to_s
13
+ content = { 'nonce' => SecureRandom.hex(8), 'timestamp' => Time.now.to_i }
14
+ secure_columns[name].each do |field| content[field.to_s] = send(field) end
15
+ content = content.sort.to_h.to_json
16
+ aes_key = Digest::SHA512::digest self.class.exact_signature(self.class, name, '')
17
+ encoded = hex_encrypt content, key: aes_key
18
+ json = {
19
+ encoded: encoded,
20
+ signature: Unidom::Common::Numeration.hex(self.class.exact_signature self.class, name, content),
21
+ encryption_algorithm: self.class.encryption_algorithm
22
+ }
23
+ send "#{name}=", json
24
+ end
25
+
26
+ def do_decrypt_secure_column(name)
27
+ name = name.to_sym
28
+ return unless respond_to? name
29
+ json = send(name)
30
+ return if json['encoded'].blank?||json['signature'].blank?||json['encryption_algorithm'].blank?
31
+ return if self.class.encryption_algorithm!=json['encryption_algorithm']
32
+ aes_key = Digest::SHA512::digest self.class.exact_signature(self.class, name, '')
33
+ content = decrypt Unidom::Common::Numeration.rev_hex(json['encoded']), key: aes_key
34
+ actual_signature = self.class.exact_signature(self.class, name, content)
35
+ return if Unidom::Common::Numeration.rev_hex(json['signature'])!=actual_signature
36
+ parsed = JSON.parse content
37
+ parsed.each do |key, value| send "#{key}=", value unless [ 'nonce', 'timestamp' ].include? key end
38
+ end
39
+
11
40
  end
12
41
 
13
42
  module ClassMethods
14
43
 
15
44
  def secure_column(name, fields: [])
16
45
 
17
- name = name.to_s
18
- secure_columns = secure_columns||{}
46
+ name = name.to_s
47
+ self.secure_columns = self.secure_columns||{}
19
48
  if secure_columns[name].present?
20
49
  raise ArgumentError.new("The #{name} column was defined as a secure column already.")
21
50
  else
@@ -24,33 +53,8 @@ module Unidom::Common::Concerns::SecureColumn
24
53
  fields.each do |field| attr_accessor field.to_sym if columns_hash[field.to_s].blank? end
25
54
 
26
55
  instance_eval do
27
-
28
- before_save do
29
- content = { 'nonce' => SecureRandom.hex(8), 'timestamp' => Time.now.to_i }
30
- secure_columns[name].each do |field| content[field.to_s] = send(field) end
31
- content = content.sort.to_h.to_json
32
- aes_key = Digest::SHA512::digest self.class.exact_signature(self.class, name, '')
33
- encoded = hex_encrypt content, key: aes_key
34
- json = {
35
- encoded: encoded,
36
- signature: Unidom::Common::Numeration.hex(self.class.exact_signature self.class, name, content),
37
- encryption_algorithm: self.class.encryption_algorithm
38
- }
39
- send "#{name}=", json
40
- end
41
-
42
- after_find do
43
- json = send(name)
44
- return if json['encoded'].blank?||json['signature'].blank?||json['encryption_algorithm'].blank?
45
- return if self.class.encryption_algorithm!=json['encryption_algorithm']
46
- aes_key = Digest::SHA512::digest self.class.exact_signature(self.class, name, '')
47
- content = decrypt Unidom::Common::Numeration.rev_hex(json['encoded']), key: aes_key
48
- actual_signature = self.class.exact_signature(self.class, name, content)
49
- return if Unidom::Common::Numeration.rev_hex(json['signature'])!=actual_signature
50
- parsed = JSON.parse content
51
- parsed.each do |key, value| send "#{key}=", value unless [ 'nonce', 'timestamp' ].include? key end
52
- end
53
-
56
+ before_save do do_encrypt_secure_column name end
57
+ after_find do do_decrypt_secure_column name.to_sym end
54
58
  end
55
59
 
56
60
  end
@@ -1,5 +1,5 @@
1
1
  module Unidom
2
2
  module Common
3
- VERSION = '1.7.1'.freeze
3
+ VERSION = '1.7.2'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unidom-common
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 1.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Topbit Du
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-29 00:00:00.000000000 Z
11
+ date: 2016-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails