password_encryptor 1.0.0 → 1.0.1

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: 5251f411807b9386522b70d2b165e832e61c3f1b
4
- data.tar.gz: 7c693f51498c5b348defe9c665243acbff3b9acb
3
+ metadata.gz: 1f3aff9002bc2806e31cb8982f5f8eb6fd3329d9
4
+ data.tar.gz: 34221c99437f9256a43e97a3b0840d7f3c8b925a
5
5
  SHA512:
6
- metadata.gz: 2168c6776403a430d68e114c240d7dcb3b2d045d4c0f30934bf0fd0b69a6f2e4a247bfe3b9f594a696611b3733b41bcadadcea5d47af6f76f721c0034ca57d0c
7
- data.tar.gz: 38b77443f4747658ab60f31b9c9c31aea5b1efc2d37ef0005a906dd1e7e9e9dde3bd9ed5ed4264d8df5b105074c8cce435c60ae31f349bb44c75af76635db4be
6
+ metadata.gz: 84ad7fb687b0897ac795ba5d1a251b1e7bceeb3436f838eb6eba695de3121526ce241181cbd57bc74f320363f72378592cce5a3e6b37a3607d0f101e384561f6
7
+ data.tar.gz: 659509dbc0304f67b2c66a6b0174d7546dcae204d2452993b3db1b1a4d89a946bdf98141e90ef760b6d0d03f17d804da2e8c8e06b7cd49884f59a9bd82823924
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # PasswordEncryptor
2
2
 
3
- TODO: Write a gem description
3
+ This is a simple class that wraps BCrypt usage pattern into single
4
+ method that does password encryption, verification, and takes makes it
5
+ use minimum cost when running in Rails test and development environments
6
+ (but it works without Rails too).
4
7
 
5
8
  ## Installation
6
9
 
@@ -18,7 +21,19 @@ Or install it yourself as:
18
21
 
19
22
  ## Usage
20
23
 
21
- TODO: Write usage instructions here
24
+ To encrypt and get String that you can store to `encrypted_password`
25
+ column in database, use:
26
+
27
+ encrypted_password = PasswordEncryptor.encrypt('password')
28
+
29
+ To verify the password matches given String use:
30
+
31
+ PasswordEncryptor.new(encrypted_password) == 'password'
32
+ # => true
33
+
34
+ Password verification does not raise any errors when encrypted password
35
+ is invalid BCrypt hash, is empty or nil, just returns false in that
36
+ case. Returns false on invalid password, of course, too.
22
37
 
23
38
  ## Contributing
24
39
 
@@ -27,3 +42,4 @@ TODO: Write usage instructions here
27
42
  3. Commit your changes (`git commit -am 'Add some feature'`)
28
43
  4. Push to the branch (`git push origin my-new-feature`)
29
44
  5. Create a new Pull Request
45
+
@@ -1,7 +1,7 @@
1
1
  require 'bcrypt'
2
2
 
3
3
  class PasswordEncryptor
4
- VERSION = "1.0.0"
4
+ VERSION = "1.0.1"
5
5
 
6
6
  def self.encrypt plain_text
7
7
  PasswordEncryptor.new(plain_text).encrypt
@@ -15,6 +15,14 @@ class PasswordEncryptor
15
15
  BCrypt::Password.create(@password, cost: cost)
16
16
  end
17
17
 
18
+ def matches?(hash)
19
+ BCrypt::Password.new(hash) == @password
20
+ rescue BCrypt::Errors::InvalidHash
21
+ false
22
+ end
23
+
24
+ alias_method :==, :matches?
25
+
18
26
  private
19
27
 
20
28
  def cost
@@ -4,4 +4,29 @@ describe PasswordEncryptor do
4
4
  it 'should encrypt passwords using BCrypt' do
5
5
  expect(PasswordEncryptor.encrypt('password') == 'password').to eq(true)
6
6
  end
7
+
8
+ it 'should be possible to verify if password matches given hash' do
9
+ hash = PasswordEncryptor.encrypt('password')
10
+ expect(PasswordEncryptor.new('password').matches?(hash)).to eq(true)
11
+
12
+ hash = PasswordEncryptor.encrypt('wrong')
13
+ expect(PasswordEncryptor.new('password').matches?(hash)).to eq(false)
14
+
15
+ hash = "invalid hash"
16
+ expect(PasswordEncryptor.new('password').matches?(hash)).to eq(false)
17
+
18
+ hash = ""
19
+ expect(PasswordEncryptor.new('password').matches?(hash)).to eq(false)
20
+
21
+ hash = nil
22
+ expect(PasswordEncryptor.new('password').matches?(hash)).to eq(false)
23
+ end
24
+
25
+ it 'should be possible to verify password with == ' do
26
+ hash = PasswordEncryptor.encrypt('password')
27
+ expect(PasswordEncryptor.new('password') == hash).to eq(true)
28
+
29
+ hash = PasswordEncryptor.encrypt('wrong')
30
+ expect(PasswordEncryptor.new('password') == hash).to eq(false)
31
+ end
7
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: password_encryptor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hubert Łępicki