pws 1.0.0.pre.1 → 1.0.0

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/README.md CHANGED
@@ -2,7 +2,6 @@ pws [![Build status](http://travis-ci.org/janlelis/pws.png)](http://travis-ci.or
2
2
  ===
3
3
  pws is a command-line password safe/manager written in Ruby.
4
4
 
5
- *ATTENTION* Refactoring in progress / The latest stable version is 0.9.2
6
5
 
7
6
  Usage
8
7
  ---
@@ -16,12 +15,11 @@ You can install pws with
16
15
 
17
16
  Run `$ pws --help` for usage information.
18
17
 
18
+ On linux, please make sure you've got `xclip` or `xsel` installed (clipboard).
19
19
 
20
- 1.0 / Updating from 0.9
21
- ---
22
- You can try out the newest version with:
23
- `$ gem install pws --pre`
24
20
 
21
+ Updating from 0.9
22
+ ---
25
23
  The 0.9 password files are not compatible with that version, however, you can convert your safe with:
26
24
  `$ pws resave --in 0.9 --out 1.0`
27
25
 
@@ -33,6 +31,7 @@ Trust the code by reading the source! It's originally based on [this tutorial](h
33
31
 
34
32
  Contributions by
35
33
  ---
34
+ * [namelessjon](https://github.com/namelessjon)
36
35
  * [brianewing](https://github.com/brianewing/)
37
36
  * [dquimper](https://github.com/dquimper/)
38
37
  * [grapz](https://github.com/grapz/)
data/features/add.feature CHANGED
@@ -44,14 +44,14 @@ Feature: Add
44
44
  Then the output should contain "Master password:"
45
45
  And the output should contain "NO ACCESS"
46
46
 
47
- @slow-hack
47
+ @very-slow-hack
48
48
  Scenario: Set a new password for "github", this also sets the timestamp
49
49
  Given A safe exists with master password "my_master_password"
50
50
  When I run `pws ls` interactively
51
51
  And I type "my_master_password"
52
- Then the output from "pws ls" should not contain the current date
52
+ Then the output should not contain the current date
53
53
  When I run `pws add github github_password` interactively
54
54
  And I type "my_master_password"
55
55
  And I run `pws show` interactively
56
56
  And I type "my_master_password"
57
- Then the output from "pws show" should contain the current date
57
+ Then the output should contain the current date
@@ -3,6 +3,7 @@ Feature: Create
3
3
  As a user
4
4
  I want to create a new safe
5
5
 
6
+ @slow-hack
6
7
  Scenario: Trying to call a pws task (except help or version), but safe does not exist, yet
7
8
  When I run `pws` interactively
8
9
  And I type "some_new_master_password"
@@ -23,7 +23,6 @@ Feature: Generate
23
23
  And the output should contain "The password for github is now available in your clipboard for 1 second"
24
24
 
25
25
  @wait-11s
26
- @slow-hack
27
26
  Scenario: Generate a new password for "github", PWS_SECONDS set to 5, gets passed to the get as keep-in-clipboard time
28
27
  Given A safe exists with master password "my_master_password"
29
28
  When I set env variable "PWS_SECONDS" to "5"
@@ -54,7 +53,7 @@ Feature: Generate
54
53
  And the clipboard should match /^.{64}$/
55
54
 
56
55
  @slow-hack
57
- Scenario: Generate a new password for "github", default length of PWS_GEN_LENGTH
56
+ Scenario: Generate a new password for "github", default length of PWS_LENGTH
58
57
  Given A safe exists with master password "my_master_password"
59
58
  When I set env variable "PWS_LENGTH" to "15"
60
59
  And I run `pws generate github 0` interactively
@@ -85,7 +84,7 @@ Feature: Generate
85
84
  And the clipboard should match ^[!\"\#$%&'()*+,\-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~]+$
86
85
 
87
86
  @slow-hack
88
- Scenario: Generate a new password for "github", the default char pool PWS_GEN_CHARPOOL
87
+ Scenario: Generate a new password for "github", the default char pool PWS_CHARPOOL
89
88
  Given A safe exists with master password "my_master_password"
90
89
  When I set env variable "PWS_CHARPOOL" to "a"
91
90
  When I run `pws generate github 0` interactively
@@ -37,13 +37,13 @@ Feature: --in and --out options
37
37
  Given A "0.9" safe exists with master password "password" and a key "github" with password "123456"
38
38
  When I run `pws resave --in 0.9 --out 1.0` interactively
39
39
  And I type "password"
40
- Then the output from "pws resave --in 0.9 --out 1.0" should contain "Master password:"
41
- Then the output from "pws resave --in 0.9 --out 1.0" should contain "resaved"
40
+ Then the output should contain "Master password:"
41
+ Then the output should contain "resaved"
42
42
  When I run `pws` interactively
43
43
  And I type "password"
44
- Then the output from "pws" should contain "Master password:"
45
- Then the output from "pws" should contain "Entries"
46
- Then the output from "pws" should contain "github"
44
+ Then the output should contain "Master password:"
45
+ Then the output should contain "Entries"
46
+ Then the output should contain "github"
47
47
 
48
48
  Scenario: Trying to convert to 0.9, but --out 0.9 is not supported
49
49
  Given A "0.9" safe exists with master password "password" and a key "github" with password "123456"
@@ -16,8 +16,8 @@ Feature: Master
16
16
  And the output should contain "The master password has been changed"
17
17
  When I run `pws` interactively
18
18
  And I type "my_master_password"
19
- And the output from "pws" should contain "Master password"
20
- And the output from "pws" should contain "NO ACCESS"
19
+ And the output should contain "Master password"
20
+ And the output should contain "NO ACCESS"
21
21
 
22
22
  Scenario: Try to change the master password (but password confirmation is wrong)
23
23
  Given A safe exists with master password "my_master_password"
@@ -30,7 +30,6 @@ Feature: Master
30
30
  And the output should contain "again"
31
31
  And the output should contain "don't match"
32
32
 
33
- @slow-hack
34
33
  Scenario: Change the master password, already passing it as command line parameter (not recommended)
35
34
  Given A safe exists with master password "my_master_password"
36
35
  When I run `pws master my_new_master_password` interactively
@@ -49,8 +48,8 @@ Feature: Master
49
48
  And the output should contain "The master password has been changed"
50
49
  When I run `pws` interactively
51
50
  And I type ""
52
- Then the output from "pws" should contain "Master password:"
53
- And the output from "pws" should contain "There aren't any passwords stored"
51
+ Then the output should contain "Master password:"
52
+ And the output should contain "There aren't any passwords stored"
54
53
 
55
54
  Scenario: Try to change the master password (but enter the old one wrong)
56
55
  Given A safe exists with master password "my_master_password"
@@ -3,15 +3,17 @@ Feature: Misc
3
3
  As a user
4
4
  I want ensure the password safe behaves nicely
5
5
 
6
- @slow-hack
7
- Scenario: I am calling with a wrong argument count
8
- Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
6
+ Scenario: I am calling with too few arguments
7
+ Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
9
8
  When I run `pws get` interactively
10
9
  And I type "my_master_password"
11
10
  And the output should contain "Wrong number of arguments"
11
+
12
+ Scenario: I am calling with too many arguments
13
+ Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
12
14
  When I run `pws get github with far too many args` interactively
13
15
  And I type "my_master_password"
14
- And the output from "pws get github with far too many args" should contain "Wrong number of arguments"
16
+ And the output should contain "Wrong number of arguments"
15
17
 
16
18
  Scenario: I am calling a task that does not exist
17
19
  Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
@@ -3,7 +3,7 @@ Feature: Rename
3
3
  As a user
4
4
  I want to rename passwords in my password safe
5
5
 
6
- @slow-hack
6
+ @very-slow-hack
7
7
  Scenario: Rename the password entry "github" to "gh"
8
8
  Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
9
9
  When I run `pws rename github gh` interactively
@@ -12,9 +12,9 @@ Feature: Rename
12
12
  And the output should contain "The password entry github has been renamed to gh"
13
13
  When I run `pws show` interactively
14
14
  And I type "my_master_password"
15
- Then the output from "pws show" should contain "Master password:"
16
- And the output from "pws show" should contain "Entries"
17
- And the output from "pws show" should contain "gh"
15
+ Then the output should contain "Master password:"
16
+ And the output should contain "Entries"
17
+ And the output should contain "gh"
18
18
  And the output from "pws show" should not contain "github"
19
19
 
20
20
  Scenario: Try to rename the password entry "github" to "gh" (but github does not exist)
@@ -11,27 +11,27 @@ Feature: Resave
11
11
  | entries | 678 |
12
12
  When I run `pws resave` interactively
13
13
  And I type "my_master_password"
14
- Then the output from "pws resave" should contain "resaved"
14
+ Then the output should contain "resaved"
15
15
  When I run `pws` interactively
16
16
  And I type "my_master_password"
17
- And the output from "pws" should contain "some"
18
- And the output from "pws" should contain "password"
19
- And the output from "pws" should contain "entries"
17
+ And the output should contain "some"
18
+ And the output should contain "password"
19
+ And the output should contain "entries"
20
20
 
21
21
  @slow-hack
22
22
  Scenario: Useful for converting when used together with --in and --out options
23
23
  Given A "0.9" safe exists with master password "password" and a key "github" with password "123456"
24
24
  When I run `pws show` interactively
25
25
  And I type "password"
26
- Then the output from "pws show" should contain "Master password:"
27
- Then the output from "pws show" should contain "NO ACCESS"
28
- Then the output from "pws show" should contain "convert"
26
+ Then the output should contain "Master password:"
27
+ Then the output should contain "NO ACCESS"
28
+ Then the output should contain "convert"
29
29
  When I run `pws resave --in 0.9 --out 1.0` interactively
30
30
  And I type "password"
31
- Then the output from "pws resave --in 0.9 --out 1.0" should contain "Master password:"
32
- Then the output from "pws resave --in 0.9 --out 1.0" should contain "resaved"
31
+ Then the output should contain "Master password:"
32
+ Then the output should contain "resaved"
33
33
  When I run `pws` interactively
34
34
  And I type "password"
35
- Then the output from "pws" should contain "Master password:"
36
- Then the output from "pws" should contain "Entries"
37
- Then the output from "pws" should contain "github"
35
+ Then the output should contain "Master password:"
36
+ Then the output should contain "Entries"
37
+ Then the output should contain "github"
@@ -60,11 +60,11 @@ Then /^the clipboard should match ([^\/].+)$/ do |expected|
60
60
  assert_matching_output(expected, Clipboard.paste)
61
61
  end
62
62
 
63
- Then /^the output should contain the current date$/ do |cmd|
63
+ Then /^the output should contain the current date$/ do
64
64
  assert_partial_output(Time.now.strftime('%y-%m-%d'), all_output)
65
65
  end
66
66
 
67
- Then /^the output should not contain the current date$/ do |cmd|
67
+ Then /^the output should not contain the current date$/ do
68
68
  assert_no_partial_output(Time.now.strftime('%y-%m-%d'), all_output)
69
69
  end
70
70
 
@@ -34,9 +34,13 @@ end
34
34
  # Hacks
35
35
 
36
36
  Before('@slow-hack') do
37
- @aruba_io_wait_seconds = 5 # 0.5 would be ok... except for "output from", travis even needs more
37
+ @aruba_io_wait_seconds = 3
38
+ end
39
+
40
+ Before('@very-slow-hack') do
41
+ @aruba_io_wait_seconds = 7
38
42
  end
39
43
 
40
44
  Before('@wait-11s') do
41
- @aruba_timeout_seconds = 12
45
+ @aruba_timeout_seconds = 15
42
46
  end
@@ -0,0 +1,118 @@
1
+ Feature: Update
2
+ In order to keep my privacy
3
+ As a user
4
+ I want to update a password entry and generate the new password
5
+
6
+ @wait-11s
7
+ Scenario: Generate a new password for "github" and get it
8
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
9
+ When I run `pws update-gen github` interactively
10
+ And I type "my_master_password"
11
+ Then the output should contain "Master password:"
12
+ And the output should contain "The password for github has been updated"
13
+ And the output should contain "The password for github is now available in your clipboard for 10 seconds"
14
+
15
+ Scenario: Try to update-gen the password for "github" (but it does not exist)
16
+ Given A safe exists with master password "my_master_password"
17
+ When I run `pws update-gen github` interactively
18
+ And I type "my_master_password"
19
+ Then the output should contain "Master password:"
20
+ And the output should contain "There is no password stored for github, so you cannot update it!"
21
+
22
+ Scenario: Try to update-gen the password for "github" (but the master password is wrong)
23
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
24
+ When I run `pws update-gen github` interactively
25
+ And I type "my_master_password_wrong"
26
+ Then the output should contain "Master password:"
27
+ And the output should contain "NO ACCESS"
28
+
29
+ @wait-11s
30
+ Scenario: Generate a new password for "github" and get it
31
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
32
+ When I run `pws update-gen github` interactively
33
+ And I type "my_master_password"
34
+ Then the output should contain "Master password:"
35
+ And the output should contain "The password for github has been updated"
36
+ And the output should contain "The password for github is now available in your clipboard for 10 seconds"
37
+
38
+ @slow-hack
39
+ Scenario: Generate a new password for "github", second parameter gets passed to the get as keep-in-clipboard time
40
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
41
+ When I run `pws update-gen github 1` interactively
42
+ And I type "my_master_password"
43
+ Then the output should contain "Master password:"
44
+ And the output should contain "The password for github has been updated"
45
+ And the output should contain "The password for github is now available in your clipboard for 1 second"
46
+
47
+ @wait-11s
48
+ @slow-hack
49
+ Scenario: Generate a new password for "github", PWS_SECONDS set to 5, gets passed to the get as keep-in-clipboard time
50
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
51
+ When I set env variable "PWS_SECONDS" to "5"
52
+ And I run `pws update-gen github` interactively
53
+ And I type "my_master_password"
54
+ Then the output should contain "Master password:"
55
+ And the output should contain "The password for github has been updated"
56
+ And the output should contain "The password for github is now available in your clipboard for 5 seconds"
57
+
58
+ @slow-hack
59
+ Scenario: Generate a new password for "github", third parameter defines password length
60
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
61
+ When I run `pws update-gen github 0 10` interactively
62
+ And I type "my_master_password"
63
+ Then the output should contain "Master password:"
64
+ And the output should contain "The password for github has been updated"
65
+ And the output should contain "The password for github has been copied to your clipboard"
66
+ And the clipboard should match /^.{10}$/
67
+
68
+ @slow-hack
69
+ Scenario: Generate a new password for "github", default length is 64
70
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
71
+ When I run `pws update-gen github 0` interactively
72
+ And I type "my_master_password"
73
+ Then the output should contain "Master password:"
74
+ And the output should contain "The password for github has been updated"
75
+ And the output should contain "The password for github has been copied to your clipboard"
76
+ And the clipboard should match /^.{64}$/
77
+
78
+ @slow-hack
79
+ Scenario: Generate a new password for "github", default length of PWS_LENGTH
80
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
81
+ When I set env variable "PWS_LENGTH" to "15"
82
+ And I run `pws update-gen github 0` interactively
83
+ And I type "my_master_password"
84
+ Then the output should contain "Master password:"
85
+ And the output should contain "The password for github has been updated"
86
+ And the output should contain "The password for github has been copied to your clipboard"
87
+ And the clipboard should match /^.{15}$/
88
+
89
+ @slow-hack
90
+ Scenario: Generate a new password for "github", fourth parameter defines a char pool used for generation
91
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
92
+ When I run `pws update-gen github 0 10 a` interactively
93
+ And I type "my_master_password"
94
+ Then the output should contain "Master password:"
95
+ And the output should contain "The password for github has been updated"
96
+ And the output should contain "The password for github has been copied to your clipboard"
97
+ And the clipboard should match /^a{10}$/
98
+
99
+ @slow-hack
100
+ Scenario: Generate a new password for "github", the default char pool is !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~
101
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
102
+ When I run `pws update-gen github 0` interactively
103
+ And I type "my_master_password"
104
+ Then the output should contain "Master password:"
105
+ And the output should contain "The password for github has been updated"
106
+ And the output should contain "The password for github has been copied to your clipboard"
107
+ And the clipboard should match ^[!\"\#$%&'()*+,\-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~]+$
108
+
109
+ @slow-hack
110
+ Scenario: Generate a new password for "github", the default char pool PWS_CHARPOOL
111
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
112
+ When I set env variable "PWS_CHARPOOL" to "a"
113
+ When I run `pws update-gen github 0` interactively
114
+ And I type "my_master_password"
115
+ Then the output should contain "Master password:"
116
+ And the output should contain "The password for github has been updated"
117
+ And the output should contain "The password for github has been copied to your clipboard"
118
+ And the clipboard should match ^a{64}$
@@ -3,7 +3,6 @@ Feature: Update
3
3
  As a user
4
4
  I want to update a password entry
5
5
 
6
- @slow-hack
7
6
  Scenario: Set a new password for "github"
8
7
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
9
8
  When I run `pws update github` interactively
@@ -45,16 +44,16 @@ Feature: Update
45
44
  Then the output should contain "Master password:"
46
45
  And the output should contain "NO ACCESS"
47
46
 
48
- @slow-hack
47
+ @very-slow-hack
49
48
  Scenario: Set a new password for "github", this also sets the timestamp
50
49
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password" and timestamp "42424242"
51
50
  When I run `pws ls` interactively
52
51
  And I type "my_master_password"
53
- Then the output from "pws ls" should not contain the current date
52
+ Then the output should not contain the current date
54
53
  When I run `pws update github github_password` interactively
55
54
  And I type "my_master_password"
56
55
  And I run `pws show` interactively
57
56
  And I type "my_master_password"
58
- Then the output from "pws show" should contain the current date
57
+ Then the output should contain the current date
59
58
 
60
59
 
@@ -11,7 +11,7 @@ class PWS
11
11
  # see at bottom block for a short format description
12
12
  module V1_0
13
13
  TEMPLATE = 'a64 a16 N a64 a*'.freeze
14
- DEFAULT_ITERATIONS = 80_000
14
+ DEFAULT_ITERATIONS = 75_000
15
15
  MAX_ITERATIONS = 10_000_000
16
16
  MAX_ENTRY_LENGTH = 4_294_967_295 # N
17
17
 
data/lib/pws/runner.rb CHANGED
@@ -35,7 +35,7 @@ module PWS::Runner
35
35
  [action || :show, arguments, options]
36
36
  end
37
37
 
38
- # makes the Ruby safe more usable
38
+ # makes the Ruby safe usable from the cli
39
39
  def run(action, arguments, options)
40
40
  case action
41
41
  when :v, :version
@@ -45,27 +45,27 @@ module PWS::Runner
45
45
 
46
46
  #{Paint["Usage", :underline]}
47
47
 
48
- #{Paint['pws', :bold]} [-namespace] action [arguments]
48
+ #{Paint['pws', :bold]} [-namespace] action [arguments] [--options]
49
49
 
50
50
  #{Paint["Info", :underline]}
51
51
 
52
52
  pws allows you to manage passwords in encryted password files (safes). It
53
53
  operates on the file specified in the environment variable PWS or on "~/.pws".
54
- You can apply a namespace as first parameter that will be appended to the
55
- filename, e.g. `pws -work show` with usual env would use "~/.pws-work".
54
+ Using a single dash, you can set a namespace that will be appended to the
55
+ filename, e.g. `pws -work show` will operate on "~/.pws-work".
56
56
 
57
- #{Paint["Available actions", :underline]}
57
+ #{Paint["Available Actions", :underline]}
58
58
 
59
59
  #{Paint['ls', :bold]} / list / show / status ( pattern = nil )
60
60
  Lists all available password entries. Optionally takes a regex filter.
61
61
 
62
- #{Paint['add', :bold]} / set / store / create ( name, password = nil )
63
- Stores a new password entry. The second argument can be the password, but
64
- it's recommended to not pass it, but enter it interactively.
65
-
66
62
  #{Paint['get', :bold]} / entry / copy / password / for ( name, seconds = 10 )
67
63
  Copies the password for <name> to the clipboard. The second argument specifies,
68
64
  how long the password is kept in the clipboard (0 = no deletion).
65
+
66
+ #{Paint['add', :bold]} / set / store / create ( name, password = nil )
67
+ Stores a new password entry. The second argument can be the password, but
68
+ it's recommended to not pass it, but enter it interactively.
69
69
 
70
70
  #{Paint['gen', :bold]} / generate ( name, seconds = 10, length = 64, char_pool )
71
71
  Generates a new password for <name> and then copies it to the clipboard, like
@@ -73,6 +73,12 @@ module PWS::Runner
73
73
  argument sets the password length. The fourth argument allows you to pass a
74
74
  character pool that is used for generating the passwords.
75
75
 
76
+ #{Paint['update', :bold]} / update-add ( name, password = nil )
77
+ Updates an existing password entry.
78
+
79
+ #{Paint['update-gen', :bold]} / update-generate( name, seconds = 10, length = 64, char_pool )
80
+ Updates an existing password entry using the generate method.
81
+
76
82
  #{Paint['rm', :bold]} / remove / del / delete ( name )
77
83
  Removes a password entry.
78
84
 
@@ -82,12 +88,47 @@ module PWS::Runner
82
88
  #{Paint['master', :bold]} ( password = nil )
83
89
  Changes the master password.
84
90
 
91
+ #{Paint['resave', :bold]} / convert
92
+ Just save the safe. Useful for converting the file format.
93
+
85
94
  #{Paint['v', :bold]} / version
86
95
  Displays version and website.
87
96
 
88
97
  #{Paint['help', :bold]} / actions / commands
89
98
  Displays this help.
99
+
100
+ #{Paint["Available Options", :underline]}
101
+
102
+ #{Paint['--in', :bold]}
103
+ Specifies the password file input format. Neccessary to convert 0.9 safes.
104
+ Supported values: 0.9 1.0
105
+
106
+ #{Paint['--out', :bold]}
107
+ Specifies the password file output format. Ignored for non-writing actions,
108
+ e.g. get. Defaults to the current version.
109
+ Supported values: 1.0
110
+
111
+ #{Paint['--filename', :bold]}
112
+ Path to the password safe to use. Overrides usual path and any namespaces.
90
113
 
114
+ #{Paint['--iterations', :bold]}
115
+ Sets the number of sha iterations used to transform your password into the
116
+ encryption key (pbkdf2). A higher number takes longer to compute, but makes
117
+ it harder for attacker to bruteforce your password.
118
+
119
+ #{Paint['--seconds', :bold]}, #{Paint['--length', :bold]}, #{Paint['--charpool', :bold]}
120
+ Preset options for specific actions.
121
+
122
+ #{Paint["ENV Variables", :underline]}
123
+
124
+ You can use environment variables to customize the default settings of pws.
125
+ Except for PWS (info at top), the following variables can be used:
126
+
127
+ PWS_SECONDS
128
+ PWS_LENGTH
129
+ PWS_CHARPOOL
130
+ PWS_ITERATIONS
131
+
91
132
  HELP
92
133
  else # redirect to safe
93
134
  if PWS.public_instance_methods(false).include?(action)
data/lib/pws/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class PWS
2
- VERSION = '1.0.0.pre.1'
2
+ VERSION = '1.0.0'
3
3
  end
data/lib/pws.rb CHANGED
@@ -94,7 +94,7 @@ class PWS
94
94
  end
95
95
  end
96
96
  end
97
- aliases_for :update, :change
97
+ alias :'update-add' :update
98
98
 
99
99
  # Gets the password entry and copies it to the clipboard. The second parameter is the time in seconds it stays there
100
100
  def get(key, seconds = @options[:seconds])
@@ -130,17 +130,23 @@ class PWS
130
130
  length = @options[:length],
131
131
  charpool = @options[:charpool]
132
132
  )
133
- charpool_size = charpool.size
134
- new_pw = (1..length.to_i).map{
135
- charpool[SecureRandom.random_number(charpool_size)]
136
- }.join
137
-
138
- if add(key, new_pw)
139
- get(key, seconds)
140
- end
133
+ get(key, seconds) if add(key, generator(length, charpool))
141
134
  end
142
135
  alias_for :generate, :gen
143
136
 
137
+ # Updates a password entry with a freshly generated random password
138
+ def update_generate(
139
+ key,
140
+ seconds = @options[:seconds],
141
+ length = @options[:length],
142
+ charpool = @options[:charpool]
143
+ )
144
+ get(key, seconds) if update(key, generator(length, charpool))
145
+ end
146
+ alias :'update-generate' :update_generate
147
+ alias :'update_gen' :update_generate
148
+ alias :'update-gen' :update_generate
149
+
144
150
  # Removes a specific password entry
145
151
  def remove(key)
146
152
  if @data.delete key
@@ -191,6 +197,7 @@ class PWS
191
197
  pa %[The password file has been resaved], :green
192
198
  return true
193
199
  end
200
+ alias_for :resave, :convert
194
201
 
195
202
  # Prevents accidental displaying, e.g. in irb
196
203
  def to_s
@@ -202,12 +209,13 @@ class PWS
202
209
 
203
210
  def collect_options(options = {})
204
211
  @options = options
205
- @options[:filename] ||= ENV["PWS"] || '~/.pws'
206
- @options[:seconds] ||= ENV['PWS_SECONDS'] || 10
207
- @options[:length] ||= ENV['PWS_LENGTH'] || 64
208
- @options[:charpool] ||= ENV['PWS_CHARPOOL'] || (33..126).map(&:chr).join
209
- @options[:in] ||= ENV['PWS_FORMAT'] || VERSION
210
- @options[:out] ||= ENV['PWS_FORMAT'] || VERSION
212
+ @options[:filename] ||= ENV["PWS"] || '~/.pws'
213
+ @options[:seconds] ||= ENV['PWS_SECONDS'] || 10
214
+ @options[:length] ||= ENV['PWS_LENGTH'] || 64
215
+ @options[:charpool] ||= ENV['PWS_CHARPOOL'] || (33..126).map(&:chr).join
216
+ @options[:in] ||= ENV['PWS_FORMAT'] || VERSION
217
+ @options[:out] ||= ENV['PWS_FORMAT'] || VERSION
218
+ @options[:iterations] ||= ENV['PWS_ITERATIONS'] || 75_000
211
219
  end
212
220
 
213
221
  # Checks if the file is accessible or create a new one
@@ -237,7 +245,7 @@ class PWS
237
245
  @data,
238
246
  password: @password,
239
247
  format: @options[:out],
240
- iterations: @options[:iterations], # TODO
248
+ iterations: @options[:iterations],
241
249
  )
242
250
  File.open(@filename, 'w'){ |f| f.write(encrypted_data) }
243
251
  end
@@ -268,8 +276,16 @@ class PWS
268
276
 
269
277
  password
270
278
  end
279
+
280
+ # Generate a random password, maybe put in its own class sometime
281
+ def generator(length, charpool)
282
+ charpool_size = charpool.size
283
+ (1..length.to_i).map{
284
+ charpool[SecureRandom.random_number(charpool_size)]
285
+ }.join
286
+ end
271
287
  end
272
288
 
273
- # Command line action in pws/runner.rb
289
+ # Command line behavior in pws/runner.rb
274
290
 
275
291
  # J-_-L
data/pws.gemspec CHANGED
@@ -4,7 +4,7 @@ name = 'pws'
4
4
  require File.dirname(__FILE__) + "/lib/#{name}/version"
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.required_ruby_version = '>= 1.9'
7
+ s.required_ruby_version = '>= 1.9.2'
8
8
  s.name = name
9
9
  s.version = PWS::VERSION
10
10
  s.authors = ["Jan Lelis"]
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pws
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre.1
5
- prerelease: 6
4
+ version: 1.0.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jan Lelis
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-24 00:00:00.000000000 Z
12
+ date: 2012-05-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: clipboard
@@ -207,6 +207,7 @@ files:
207
207
  - bin/pws
208
208
  - features/in-out.feature
209
209
  - features/update.feature
210
+ - features/update-generate.feature
210
211
  - features/show.feature
211
212
  - features/misc.feature
212
213
  - features/get.feature
@@ -238,13 +239,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
238
239
  requirements:
239
240
  - - ! '>='
240
241
  - !ruby/object:Gem::Version
241
- version: '1.9'
242
+ version: 1.9.2
242
243
  required_rubygems_version: !ruby/object:Gem::Requirement
243
244
  none: false
244
245
  requirements:
245
- - - ! '>'
246
+ - - ! '>='
246
247
  - !ruby/object:Gem::Version
247
- version: 1.3.1
248
+ version: '0'
248
249
  requirements: []
249
250
  rubyforge_project:
250
251
  rubygems_version: 1.8.23