pipa-authmagic 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -36,6 +36,29 @@ module Authmagic
36
36
  stretches = cfg.fetch(:stretches, 20)
37
37
  salt_length = cfg.fetch(:salt_length, 64)
38
38
 
39
+ cols = principal.columns_hash
40
+ col_pass_hash, col_salt = cols[password_hash.to_s], cols[salt.to_s]
41
+ raise "missing required attribute #{password_hash} from #{principal} model" unless col_pass_hash
42
+ raise "missing required attribute #{salt} from #{principal} model" unless col_salt
43
+
44
+ digest_method = case col_pass_hash.type
45
+ when :string
46
+ :hexdigest
47
+ when :binary
48
+ :digest
49
+ else
50
+ raise "unsupported type #{col_pass_hash.type} for #{password_hash}"
51
+ end
52
+
53
+ secran_salt = case col_salt.type
54
+ when :string
55
+ :hex
56
+ when :binary
57
+ :random_bytes
58
+ else
59
+ raise "unsupported type #{col_salt.type} for #{salt}"
60
+ end
61
+
39
62
  principal.class_eval do
40
63
  self.class.send(:define_method, :authenticate) do |options|
41
64
  conditions = case_sensitive ?
@@ -61,13 +84,13 @@ module Authmagic
61
84
  end
62
85
 
63
86
  define_method encryptor do |plaintext|
64
- hash = (digest.new << send(salt) << plaintext).hexdigest
65
- stretches.times { hash = (digest.new << hash).hexdigest }
87
+ hash = (digest.new << (send(salt) || '') << plaintext).send(digest_method)
88
+ stretches.times { hash = (digest.new << hash).send(digest_method) }
66
89
  hash
67
90
  end
68
91
 
69
92
  define_method generate_salt do
70
- ActiveSupport::SecureRandom.hex(salt_length)
93
+ ActiveSupport::SecureRandom.send(secran_salt, salt_length)
71
94
  end
72
95
  end
73
96
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pipa-authmagic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Gunko