passrock 0.0.4 → 0.0.5
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b901d76f9ebf5e7aeae7fac88edbba47f632bb6
|
4
|
+
data.tar.gz: c0102ec9aaaaa8f4536c1787187604140cad70e3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7c54fa479abe10d5993a1dd3da3190e7b0ad4e421fa0ed6db25e2d27ac4e2c0ea4aa0b68b707495a16dde840ad327b640f7fd701bee9cb01216a2f6b29aa8b3
|
7
|
+
data.tar.gz: 44b468162e89408c5fa95ed1af2714611334a18b3997702d6a677727cca0ddf8466f48c49bd07bda0d945353580f4fe79802782aac4f21c4b3cf5e6d874470a4
|
@@ -6,7 +6,7 @@ module ActiveModel
|
|
6
6
|
class PassrockSecureValidator < ActiveModel::EachValidator
|
7
7
|
|
8
8
|
def validate_each(record, attribute, value)
|
9
|
-
passrock_db = Passrock::PasswordDb.new(Passrock.configuration.password_db, Passrock.configuration.private_key)
|
9
|
+
passrock_db = Passrock::PasswordDb.new(:password_db => Passrock.configuration.password_db, :private_key => Passrock.configuration.private_key)
|
10
10
|
record.errors.add(attribute, :passrock_secure) if passrock_db.insecure?(value)
|
11
11
|
end
|
12
12
|
|
data/lib/passrock/password_db.rb
CHANGED
@@ -12,11 +12,13 @@ module Passrock
|
|
12
12
|
end
|
13
13
|
|
14
14
|
|
15
|
-
attr_reader :
|
15
|
+
attr_reader :password_db, :private_key
|
16
16
|
|
17
|
-
def initialize(
|
18
|
-
@
|
19
|
-
@private_key = private_key
|
17
|
+
def initialize(opts = {})
|
18
|
+
@password_db = opts[:password_db]
|
19
|
+
@private_key = opts[:private_key]
|
20
|
+
|
21
|
+
raise PasswordDbNotFoundError, "Passrock Password DB not found at: #{@password_db}" unless File.file?(@password_db)
|
20
22
|
end
|
21
23
|
|
22
24
|
def password_in_searchable_form(password)
|
@@ -40,11 +42,11 @@ module Passrock
|
|
40
42
|
|
41
43
|
def total_records
|
42
44
|
# Minus 1 for length in file and 1 for 0-up counting
|
43
|
-
@total_records ||= (File.size(
|
45
|
+
@total_records ||= (File.size(password_db) / RECORD_LENGTH) - 2
|
44
46
|
end
|
45
47
|
|
46
48
|
def find_by_binary_search(password)
|
47
|
-
file = File.new(
|
49
|
+
file = File.new(password_db, 'rb')
|
48
50
|
target = password_in_searchable_form(password)
|
49
51
|
|
50
52
|
lo = 1 # start at 1 because the testKey is at 0
|
data/lib/passrock/version.rb
CHANGED
data/lib/passrock.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Passrock::PasswordDb do
|
4
|
+
|
4
5
|
let(:password_db) { passrock_password_db }
|
5
6
|
let(:private_key) { passrock_private_key }
|
7
|
+
let(:valid_init_opts) { {:password_db => password_db, :private_key => private_key} }
|
6
8
|
let(:insecure_password) { 'password' }
|
7
9
|
let(:secure_password) { 'BoatActKnowsDog' }
|
8
10
|
|
@@ -18,35 +20,48 @@ describe Passrock::PasswordDb do
|
|
18
20
|
end
|
19
21
|
|
20
22
|
|
23
|
+
describe '#initialize' do
|
24
|
+
|
25
|
+
context 'when password_db file does not exist' do
|
26
|
+
it 'raises PasswordDbNotFoundError' do
|
27
|
+
expect {
|
28
|
+
described_class.new(:password_db => '/invalid/path/to/password_db', :private_key => private_key)
|
29
|
+
}.to raise_error(Passrock::PasswordDbNotFoundError)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
21
35
|
describe '#password_in_searchable_form' do
|
22
36
|
|
23
37
|
it 'returns the given password in a searchable format' do
|
24
|
-
|
25
|
-
expect(
|
38
|
+
subject = described_class.new(valid_init_opts)
|
39
|
+
expect(subject.password_in_searchable_form(insecure_password)).to eq('+lR0p4OzjXJnta/4GGtqdaBQEFPQdjI=')
|
26
40
|
end
|
27
41
|
|
28
42
|
end
|
29
43
|
|
30
44
|
describe '#secure?' do
|
31
|
-
|
45
|
+
|
46
|
+
let(:subject) { described_class.new(valid_init_opts) }
|
32
47
|
|
33
48
|
context 'when given password is present in the password database' do
|
34
49
|
it 'returns false' do
|
35
|
-
expect(
|
50
|
+
expect(subject.secure?(insecure_password)).to be_false
|
36
51
|
end
|
37
52
|
end
|
38
53
|
|
39
54
|
context 'when given password does not appear in the password database' do
|
40
55
|
it 'returns true' do
|
41
|
-
expect(
|
56
|
+
expect(subject.secure?(secure_password)).to be_true
|
42
57
|
end
|
43
58
|
end
|
44
59
|
|
45
60
|
context 'multiple sequential calls' do
|
46
61
|
it 'does not error out' do
|
47
62
|
expect {
|
48
|
-
|
49
|
-
|
63
|
+
subject.secure?(secure_password)
|
64
|
+
subject.secure?(insecure_password)
|
50
65
|
}.to_not raise_error
|
51
66
|
end
|
52
67
|
end
|
@@ -54,19 +69,21 @@ describe Passrock::PasswordDb do
|
|
54
69
|
end
|
55
70
|
|
56
71
|
describe '#insecure?' do
|
57
|
-
|
72
|
+
|
73
|
+
let(:subject) { described_class.new(valid_init_opts) }
|
58
74
|
|
59
75
|
context 'when given password is present in the password database' do
|
60
76
|
it 'returns true' do
|
61
|
-
expect(
|
77
|
+
expect(subject.insecure?(insecure_password)).to be_true
|
62
78
|
end
|
63
79
|
end
|
64
80
|
|
65
81
|
context 'when given password does not appear in the password database' do
|
66
82
|
it 'returns false' do
|
67
|
-
expect(
|
83
|
+
expect(subject.insecure?(secure_password)).to be_false
|
68
84
|
end
|
69
85
|
end
|
86
|
+
|
70
87
|
end
|
71
88
|
|
72
89
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: passrock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bitium, Inc
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bcrypt-ruby
|
@@ -98,6 +98,7 @@ files:
|
|
98
98
|
- lib/active_model/validations/passrock_secure_validator.rb
|
99
99
|
- lib/passrock.rb
|
100
100
|
- lib/passrock/configuration.rb
|
101
|
+
- lib/passrock/exceptions.rb
|
101
102
|
- lib/passrock/password_db.rb
|
102
103
|
- lib/passrock/railtie.rb
|
103
104
|
- lib/passrock/version.rb
|