pwl 0.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.
- data/.document +5 -0
- data/.travis.yml +3 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +45 -0
- data/LICENSE.txt +20 -0
- data/README.md +102 -0
- data/Rakefile +45 -0
- data/VERSION +1 -0
- data/bin/pwl +268 -0
- data/lib/pwl/dialog/base.rb +37 -0
- data/lib/pwl/dialog/cocoa.rb +67 -0
- data/lib/pwl/dialog/console.rb +39 -0
- data/lib/pwl/dialog/gnome.rb +27 -0
- data/lib/pwl/dialog.rb +50 -0
- data/lib/pwl/message.rb +46 -0
- data/lib/pwl/password_policy.rb +29 -0
- data/lib/pwl/store.rb +284 -0
- data/lib/pwl.rb +14 -0
- data/pwl.gemspec +94 -0
- data/templates/export.html.erb +61 -0
- data/test/acceptance/test_basics.rb +15 -0
- data/test/acceptance/test_delete.rb +14 -0
- data/test/acceptance/test_dialogs.rb +45 -0
- data/test/acceptance/test_export.rb +42 -0
- data/test/acceptance/test_get.rb +17 -0
- data/test/acceptance/test_init.rb +81 -0
- data/test/acceptance/test_list.rb +30 -0
- data/test/acceptance/test_passwd.rb +23 -0
- data/test/acceptance/test_put.rb +19 -0
- data/test/fixtures/test_all.html +71 -0
- data/test/fixtures/test_empty.html +56 -0
- data/test/helper.rb +79 -0
- data/test/unit/test_error.rb +29 -0
- data/test/unit/test_message.rb +34 -0
- data/test/unit/test_store_construction.rb +62 -0
- data/test/unit/test_store_crud.rb +90 -0
- data/test/unit/test_store_metadata.rb +35 -0
- data/test/unit/test_store_password_policy.rb +61 -0
- data/test/unit/test_store_security.rb +34 -0
- metadata +156 -0
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestStorePasswordPolicy < Test::Pwl::TestCase
|
4
|
+
def setup
|
5
|
+
@store_file = temp_file_name
|
6
|
+
end
|
7
|
+
|
8
|
+
def teardown
|
9
|
+
File.unlink(@store_file) if File.exist?(@store_file)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_validations_ok_0
|
13
|
+
assert_valid('abcd3fgh')
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_validations_ok_1
|
17
|
+
assert_valid('123A5678')
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_validations_too_short_0
|
21
|
+
assert_invalid(nil)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_validations_too_short_1
|
25
|
+
assert_invalid('')
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_validations_too_short_2
|
29
|
+
assert_invalid('a')
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_validations_too_short_3
|
33
|
+
assert_invalid('abcdefg')
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_validations_too_simple_0
|
37
|
+
assert_invalid(' ')
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_validations_too_simple_1
|
41
|
+
assert_invalid('12345678')
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_validations_too_simple_2
|
45
|
+
assert_invalid('abcdefgh')
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def assert_valid(password)
|
51
|
+
store = ::Pwl::Store.new(@store_file, password)
|
52
|
+
store.put('foo', 'bar')
|
53
|
+
assert_equal('bar', store.get('foo'))
|
54
|
+
end
|
55
|
+
|
56
|
+
def assert_invalid(password)
|
57
|
+
assert_raise Pwl::InvalidMasterPasswordError do
|
58
|
+
assert_valid(password)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestStoreSecurity < Test::Pwl::TestCase
|
4
|
+
|
5
|
+
# Read back raw PStore and ensure what we get is not clear text, even though we know the structure of the store
|
6
|
+
def test_encryption
|
7
|
+
assert(!store.nil?, "Store expected, but it is nil")
|
8
|
+
store.put('foo', 'bar')
|
9
|
+
raw = PStore.new(store_file)
|
10
|
+
assert_not_equal('bar', raw.transaction{raw[:user]['foo']})
|
11
|
+
assert_nil(raw.transaction{raw[:user]['foo']}) # must not find cleartext entry
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_wrong_password
|
15
|
+
assert_raise Pwl::Store::WrongMasterPasswordError do
|
16
|
+
Pwl::Store.open(store_file, store_password.reverse)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_change_password
|
21
|
+
assert(!store.nil?, "Store expected, but it is nil")
|
22
|
+
store.put('Homer', 'Simpson')
|
23
|
+
store.change_password!(store_password.reverse)
|
24
|
+
|
25
|
+
# the old password must not work anymore
|
26
|
+
assert_raise Pwl::Store::WrongMasterPasswordError do
|
27
|
+
Pwl::Store.open(store_file, store_password)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Read back with the changed password
|
31
|
+
reopened = Pwl::Store.open(store_file, store_password.reverse)
|
32
|
+
assert_equal('Simpson', reopened.get('Homer'))
|
33
|
+
end
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pwl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nicholas E. Rabenau
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-03-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: encryptor
|
16
|
+
requirement: &2153967580 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2153967580
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: commander
|
27
|
+
requirement: &2153964800 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2153964800
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: activesupport
|
38
|
+
requirement: &2153963440 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2153963440
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rdoc
|
49
|
+
requirement: &2153962400 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.12'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *2153962400
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: bundler
|
60
|
+
requirement: &2153960100 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 1.0.0
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *2153960100
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jeweler
|
71
|
+
requirement: &2153959260 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 1.8.3
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *2153959260
|
80
|
+
description: pwl is a secure password locker for the commandline
|
81
|
+
email: nerab@gmx.net
|
82
|
+
executables:
|
83
|
+
- pwl
|
84
|
+
extensions: []
|
85
|
+
extra_rdoc_files:
|
86
|
+
- LICENSE.txt
|
87
|
+
- README.md
|
88
|
+
files:
|
89
|
+
- .document
|
90
|
+
- .travis.yml
|
91
|
+
- Gemfile
|
92
|
+
- Gemfile.lock
|
93
|
+
- LICENSE.txt
|
94
|
+
- README.md
|
95
|
+
- Rakefile
|
96
|
+
- VERSION
|
97
|
+
- bin/pwl
|
98
|
+
- lib/pwl.rb
|
99
|
+
- lib/pwl/dialog.rb
|
100
|
+
- lib/pwl/dialog/base.rb
|
101
|
+
- lib/pwl/dialog/cocoa.rb
|
102
|
+
- lib/pwl/dialog/console.rb
|
103
|
+
- lib/pwl/dialog/gnome.rb
|
104
|
+
- lib/pwl/message.rb
|
105
|
+
- lib/pwl/password_policy.rb
|
106
|
+
- lib/pwl/store.rb
|
107
|
+
- pwl.gemspec
|
108
|
+
- templates/export.html.erb
|
109
|
+
- test/acceptance/test_basics.rb
|
110
|
+
- test/acceptance/test_delete.rb
|
111
|
+
- test/acceptance/test_dialogs.rb
|
112
|
+
- test/acceptance/test_export.rb
|
113
|
+
- test/acceptance/test_get.rb
|
114
|
+
- test/acceptance/test_init.rb
|
115
|
+
- test/acceptance/test_list.rb
|
116
|
+
- test/acceptance/test_passwd.rb
|
117
|
+
- test/acceptance/test_put.rb
|
118
|
+
- test/fixtures/test_all.html
|
119
|
+
- test/fixtures/test_empty.html
|
120
|
+
- test/helper.rb
|
121
|
+
- test/unit/test_error.rb
|
122
|
+
- test/unit/test_message.rb
|
123
|
+
- test/unit/test_store_construction.rb
|
124
|
+
- test/unit/test_store_crud.rb
|
125
|
+
- test/unit/test_store_metadata.rb
|
126
|
+
- test/unit/test_store_password_policy.rb
|
127
|
+
- test/unit/test_store_security.rb
|
128
|
+
homepage: http://github.com/nerab/pwl
|
129
|
+
licenses:
|
130
|
+
- MIT
|
131
|
+
post_install_message:
|
132
|
+
rdoc_options: []
|
133
|
+
require_paths:
|
134
|
+
- lib
|
135
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
136
|
+
none: false
|
137
|
+
requirements:
|
138
|
+
- - ! '>='
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
segments:
|
142
|
+
- 0
|
143
|
+
hash: -4225901376314280444
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
none: false
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubyforge_project:
|
152
|
+
rubygems_version: 1.8.15
|
153
|
+
signing_key:
|
154
|
+
specification_version: 3
|
155
|
+
summary: Command-line password locker
|
156
|
+
test_files: []
|