pws 1.0.7 → 1.0.8

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: 1762a8aa9fd10476edc6dc58eac65743c48bb98e
4
- data.tar.gz: ef02df2119997cc751f8061487a55131a0d2eb60
3
+ metadata.gz: 6be1a0e41b9218f6e0ef2f3570e945bf7b08a52a
4
+ data.tar.gz: 22a90601c2ecb6d7e0e3cccd6e5481db781384c4
5
5
  SHA512:
6
- metadata.gz: f53c3a1eead665a1dc38d33e6f06b3446eeeb95ad4b4a89472ed50e3ad4c9186086d4a5116db43dab8f50caadec3f2b9675b6d2e72ea0b03fa8ec0a3369d386a
7
- data.tar.gz: 9459aa812e2d36c0f66f5f13ce116f84a9c100b9721feaa9bfda977ae42dbe5f8fbbd595477b78607dfdbce9b2e1c6d82fc13d88103dafacef7b593073660f00
6
+ metadata.gz: 9e5f4179c8dc2cf2e7be483d42dd442279e9c61857288595a0c1c575fcad5a6f73b79eb283c34f5a249b227d6e2ee5403a245207025af2c930ffbd1551eef1b0
7
+ data.tar.gz: feeb683b32b10c345e10e5a94a18f573cf0a01c5bbb1609537b2881e6a1b997fce1d92f6a5e6277b4019891db5e9f835e7c6478626086f00281d77236e140593
@@ -1,3 +1,8 @@
1
+ == 1.0.8
2
+ * New command to print password to screen, patch by @terabyte
3
+ * New option to exclude specific characters when generating new passwords, patch by @alex0112
4
+ * Update (and loosen up) clipboard dependency
5
+
1
6
  == 1.0.7
2
7
  * Ruby 2.4 compat (explicitely only pass 32 bytes of the encryption key)
3
8
  * Update clipboard dependency to 1.1.1
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2017 Jan Lelis
1
+ Copyright (c) 2010-2019 Jan Lelis
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -5,7 +5,7 @@ pws is a command-line password safe/manager written in Ruby using [aes-256-cbc](
5
5
 
6
6
  Usage
7
7
  ---
8
- [![Screenshot](http://rbjl.net/pws-example.png)](http://rbjl.net/60-pws-the-ruby-powered-command-line-password-manager)
8
+ [![Screenshot](https://ruby.janlelis.de/pws-example.png)](https://ruby.janlelis.de/60-pws-the-ruby-powered-command-line-password-manager)
9
9
 
10
10
 
11
11
  Setup
@@ -33,7 +33,20 @@ Besides using the `--filename path/to/safe` option, you can shortly call `pws --
33
33
 
34
34
 
35
35
  ### Reading the source
36
- Trust the code by reading the source! It's originally based on [this tutorial](http://rbjl.net/41-tutorial-build-your-own-password-safe-with-ruby). You might want to start reading in the [0.9.2 tag](https://github.com/janlelis/pws/tree/0.9.2), because it's got less features and therefore is less code.
36
+ Trust the code by reading the source! It's originally based on [this tutorial](https://ruby.janlelis.de/41-tutorial-build-your-own-password-safe-with-ruby). You might want to start reading in the [0.9.2 tag](https://github.com/janlelis/pws/tree/0.9.2), because it's got less features and therefore is less code.
37
+
38
+
39
+ Projects built on top of PWS
40
+ ---
41
+ * [pws-otp](https://github.com/janlelis/pws-otp) Experimental OTP support for 2FA
42
+ * [pwsqr](https://github.com/smileart/pwsqr) Simple QR interface to pws gem. Helps to use your passwords on a smartphone.
43
+ * [aws-pws](https://github.com/fancyremarker/aws-pws) A password-protected CredentialProvider for AWS
44
+ * [omnivault](https://github.com/aptible/omnivault) Multi-platform keychain functionality
45
+
46
+
47
+ Blog articles
48
+ ---
49
+ * [Packaging ruby programs in NixOS](http://blog.arkency.com/2016/04/packaging-ruby-programs-in-nixos/) using PWS as example
37
50
 
38
51
 
39
52
  Contributors
@@ -47,4 +60,4 @@ Contributors
47
60
 
48
61
  J-\_-L
49
62
  ---
50
- © 2010-2017 Jan Lelis, MIT license
63
+ © 2010-2019 Jan Lelis, MIT license
@@ -3,7 +3,7 @@ Feature: Add
3
3
  As a user
4
4
  I want to add new passwords to my password safe
5
5
 
6
- @slow-hack
6
+
7
7
  Scenario: Add a new password for "github"
8
8
  Given A safe exists with master password "my_master_password"
9
9
  When I run `pws add github` interactively
@@ -13,7 +13,7 @@ Feature: Add
13
13
  And the output should contain "Please enter a password for github:"
14
14
  And the output should contain "The password for github has been added"
15
15
 
16
- @slow-hack
16
+
17
17
  Scenario: Add a new password for "github", already passing it as command line paramenter (not recommended)
18
18
  Given A safe exists with master password "my_master_password"
19
19
  When I run `pws add github github_password` interactively
@@ -44,7 +44,7 @@ Feature: Add
44
44
  Then the output should contain "Master password:"
45
45
  And the output should contain "NO ACCESS"
46
46
 
47
- @very-slow-hack
47
+
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" and a key "some" with password "entry"
50
50
  When I run `pws add github github_password` interactively
@@ -3,7 +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
7
  Scenario: Trying to call a pws task (except help or version), but safe does not exist, yet
8
8
  When I run `pws` interactively
9
9
  And I type "some_new_master_password"
@@ -3,8 +3,8 @@ Feature: Generate
3
3
  As a user
4
4
  I want to generate passwords and add them to my password safe
5
5
 
6
- @wait-11s
7
- @slow-hack
6
+
7
+
8
8
  Scenario: Generate a new password for "github" and gets it
9
9
  Given A safe exists with master password "my_master_password"
10
10
  When I run `pws generate github` interactively
@@ -13,7 +13,7 @@ Feature: Generate
13
13
  And the output should contain "The password for github has been added"
14
14
  And the output should contain "The password for github is now available in your clipboard for 10 seconds"
15
15
 
16
- @slow-hack
16
+
17
17
  Scenario: Generate a new password for "github", second parameter gets passed to the get as keep-in-clipboard time
18
18
  Given A safe exists with master password "my_master_password"
19
19
  When I run `pws generate github 1` interactively
@@ -22,7 +22,7 @@ Feature: Generate
22
22
  And the output should contain "The password for github has been added"
23
23
  And the output should contain "The password for github is now available in your clipboard for 1 second"
24
24
 
25
- @wait-11s
25
+
26
26
  Scenario: Generate a new password for "github", PWS_SECONDS set to 5, gets passed to the get as keep-in-clipboard time
27
27
  Given A safe exists with master password "my_master_password"
28
28
  When I set env variable "PWS_SECONDS" to "5"
@@ -32,7 +32,7 @@ Feature: Generate
32
32
  And the output should contain "The password for github has been added"
33
33
  And the output should contain "The password for github is now available in your clipboard for 5 seconds"
34
34
 
35
- @slow-hack
35
+
36
36
  Scenario: Generate a new password for "github", third parameter defines password length
37
37
  Given A safe exists with master password "my_master_password"
38
38
  When I run `pws generate github 0 10` interactively
@@ -42,7 +42,7 @@ Feature: Generate
42
42
  And the output should contain "The password for github has been copied to your clipboard"
43
43
  And the clipboard should match /^.{10}$/
44
44
 
45
- @slow-hack
45
+
46
46
  Scenario: Generate a new password for "github", default length is 64
47
47
  Given A safe exists with master password "my_master_password"
48
48
  When I run `pws generate github 0` interactively
@@ -52,7 +52,7 @@ Feature: Generate
52
52
  And the output should contain "The password for github has been copied to your clipboard"
53
53
  And the clipboard should match /^.{64}$/
54
54
 
55
- @slow-hack
55
+
56
56
  Scenario: Generate a new password for "github", default length of PWS_LENGTH
57
57
  Given A safe exists with master password "my_master_password"
58
58
  When I set env variable "PWS_LENGTH" to "15"
@@ -63,7 +63,7 @@ Feature: Generate
63
63
  And the output should contain "The password for github has been copied to your clipboard"
64
64
  And the clipboard should match /^.{15}$/
65
65
 
66
- @slow-hack
66
+
67
67
  Scenario: Generate a new password for "github", fourth parameter defines a char pool used for generation
68
68
  Given A safe exists with master password "my_master_password"
69
69
  When I run `pws generate github 0 10 a` interactively
@@ -73,7 +73,7 @@ Feature: Generate
73
73
  And the output should contain "The password for github has been copied to your clipboard"
74
74
  And the clipboard should match /^a{10}$/
75
75
 
76
- @slow-hack
76
+
77
77
  Scenario: Generate a new password for "github", the default char pool is !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~
78
78
  Given A safe exists with master password "my_master_password"
79
79
  When I run `pws generate github 0` interactively
@@ -83,7 +83,7 @@ Feature: Generate
83
83
  And the output should contain "The password for github has been copied to your clipboard"
84
84
  And the clipboard should match ^[!\"\#$%&'()*+,\-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~]+$
85
85
 
86
- @slow-hack
86
+
87
87
  Scenario: Generate a new password for "github", the default char pool PWS_CHARPOOL
88
88
  Given A safe exists with master password "my_master_password"
89
89
  When I set env variable "PWS_CHARPOOL" to "a"
@@ -94,4 +94,11 @@ Feature: Generate
94
94
  And the output should contain "The password for github has been copied to your clipboard"
95
95
  And the clipboard should match ^a{64}$
96
96
 
97
-
97
+ Scenario: Generate a new password for "github", exclude the characters "ABC123" from the charpool
98
+ Given A safe exists with master password "my_master_password"
99
+ When I run `pws generate github 0 --exclude ABC123` interactively
100
+ And I type "my_master_password"
101
+ Then the output should contain "Master password:"
102
+ And the output should contain "The password for github has been added"
103
+ And the output should contain "The password for github has been copied to your clipboard"
104
+ And the clipboard should match [^ABC123]{64}
@@ -11,7 +11,7 @@ Feature: Get
11
11
  And the output should contain "The password for github has been copied to your clipboard"
12
12
  And the clipboard should contain "github_password"
13
13
 
14
- @wait-11s
14
+
15
15
  Scenario: Get the password for "github" (which exists) and keep it in the clipboard for 10 seconds
16
16
  Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
17
17
  When I run `pws get github` interactively
@@ -26,7 +26,7 @@ Feature: Get
26
26
  Then the output should contain "Master password:"
27
27
  And the output should contain "The password for github is now available in your clipboard for 1 second"
28
28
 
29
- @wait-11s
29
+
30
30
  Scenario: Get the password for "github" (which exists) and keep it in the clipboard for 5 seconds when PWS_SECONDS is set to 5
31
31
  Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
32
32
  When I set env variable "PWS_SECONDS" to "5"
@@ -32,7 +32,7 @@ Feature: --in and --out options
32
32
  Then the output should contain "Master password:"
33
33
  Then the output should contain "NO ACCESS"
34
34
 
35
- @slow-hack
35
+
36
36
  Scenario: Succesfully converts from 0.9 to 1.0 with --in 0.9 and out --1.0 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
@@ -3,7 +3,7 @@ Feature: Master
3
3
  As a user
4
4
  I want to change the master password
5
5
 
6
- @slow-hack
6
+
7
7
  Scenario: Change the master password and check that it has changed
8
8
  Given A safe exists with master password "my_master_password"
9
9
  When I run `pws master` interactively
@@ -37,7 +37,7 @@ Feature: Master
37
37
  Then the output should contain "Master password:"
38
38
  And the output should contain "The master password has been changed"
39
39
 
40
- @slow-hack
40
+
41
41
  Scenario: I can have an empty master password (not recommended)
42
42
  Given A safe exists with master password "my_master_password"
43
43
  When I run `pws master` interactively
@@ -3,7 +3,7 @@ Feature: Namespaces and creating new safes
3
3
  As a user
4
4
  I want to use different safes
5
5
 
6
- @slow-hack
6
+
7
7
  Scenario: Use a pws namespace, creating a new safe
8
8
  When I run `pws -work show` interactively
9
9
  And I type "some_new_master_password"
@@ -0,0 +1,62 @@
1
+ Feature: PrintScreen
2
+ In order to have a helpful password safe when I have no clipboard
3
+ As a user
4
+ I want to disply passwords from my password safe
5
+
6
+ Scenario: Get the password for "github" (which exists) and print it to the screen
7
+ Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
8
+ When I run `pws ps github 0` interactively
9
+ And I type "my_master_password"
10
+ Then the output should contain "Master password:"
11
+ And the output should contain "The password for github is:\ngithub_password"
12
+
13
+
14
+ Scenario: Get the password for "github" (which exists) and print it to the screen for 10 seconds
15
+ Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
16
+ When I run `pws ps github` interactively
17
+ And I type "my_master_password"
18
+ Then the output should contain "Master password:"
19
+ And the output should contain "The password for github will be displayed for 10 seconds:\ngithub"
20
+
21
+ Scenario: Get the password for "github" (which exists) and print it to the screen for 1 second
22
+ Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
23
+ When I run `pws ps github 1` interactively
24
+ And I type "my_master_password"
25
+ Then the output should contain "Master password:"
26
+ And the output should contain "The password for github will be displayed for 1 second:\ngithub"
27
+
28
+
29
+ Scenario: Get the password for "github" (which exists) and print it to the screen for 5 seconds when PWS_SECONDS is set to 5
30
+ Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
31
+ When I set env variable "PWS_SECONDS" to "5"
32
+ And I run `pws ps 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 will be displayed for 5 seconds:\ngithub"
36
+
37
+ Scenario: Try to get the password for "google" (which does not exist)
38
+ Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
39
+ When I run `pws ps google` interactively
40
+ And I type "my_master_password"
41
+ Then the output should contain "Master password:"
42
+ And the output should contain "No password found for google!"
43
+
44
+ Scenario: Try to get the password for "github" (but the master password is wrong)
45
+ Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
46
+ When I run `pws ps github` interactively
47
+ And I type "my_master_password_wrong"
48
+ Then the output should contain "Master password:"
49
+ And the output should contain "NO ACCESS"
50
+
51
+ Scenario: Get the password for "gihub" using an abbrev shortcut
52
+ Given A safe exists with master password "my_master_password" and keys
53
+ | github | 123 |
54
+ | google | 345 |
55
+ | gitorious | 678 |
56
+ When I run `pws ps gith 0` interactively
57
+ And I type "my_master_password"
58
+ Then the output should contain "Master password:"
59
+ And the output should contain "The password for github is:\n123"
60
+
61
+
62
+
@@ -3,7 +3,7 @@ Feature: Remove
3
3
  As a user
4
4
  I want to remove passwords from my password safe
5
5
 
6
- @slow-hack
6
+
7
7
  Scenario: Remove password entry "github"
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 remove github` interactively
@@ -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
- @very-slow-hack
6
+
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
@@ -3,7 +3,7 @@ Feature: Resave
3
3
  As a user
4
4
  I want resave the save
5
5
 
6
- @slow-hack
6
+
7
7
  Scenario: Usual resave
8
8
  Given A safe exists with master password "my_master_password" and keys
9
9
  | some | 123 |
@@ -18,7 +18,7 @@ Feature: Resave
18
18
  And the output should contain "password"
19
19
  And the output should contain "entries"
20
20
 
21
- @slow-hack
21
+
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
@@ -33,17 +33,3 @@ Around do |_, block|
33
33
 
34
34
  FileUtils.rm ENV["PWS"] if File.exist? ENV["PWS"]
35
35
  end
36
-
37
- # Hacks
38
-
39
- Before('@slow-hack') do
40
- @aruba_io_wait_seconds = 3
41
- end
42
-
43
- Before('@very-slow-hack') do
44
- @aruba_io_wait_seconds = 7
45
- end
46
-
47
- Before('@wait-11s') do
48
- @aruba_timeout_seconds = 15
49
- end
@@ -1,9 +1,9 @@
1
- Feature: Update
1
+ Feature: UpdateGenerate
2
2
  In order to keep my privacy
3
3
  As a user
4
4
  I want to update a password entry and generate the new password
5
5
 
6
- @wait-11s
6
+
7
7
  Scenario: Generate a new password for "github" and get it
8
8
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
9
9
  When I run `pws update-gen github` interactively
@@ -26,7 +26,7 @@ Feature: Update
26
26
  Then the output should contain "Master password:"
27
27
  And the output should contain "NO ACCESS"
28
28
 
29
- @wait-11s
29
+
30
30
  Scenario: Generate a new password for "github" and get it
31
31
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
32
32
  When I run `pws update-gen github` interactively
@@ -35,7 +35,7 @@ Feature: Update
35
35
  And the output should contain "The password for github has been updated"
36
36
  And the output should contain "The password for github is now available in your clipboard for 10 seconds"
37
37
 
38
- @slow-hack
38
+
39
39
  Scenario: Generate a new password for "github", second parameter gets passed to the get as keep-in-clipboard time
40
40
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
41
41
  When I run `pws update-gen github 1` interactively
@@ -44,8 +44,8 @@ Feature: Update
44
44
  And the output should contain "The password for github has been updated"
45
45
  And the output should contain "The password for github is now available in your clipboard for 1 second"
46
46
 
47
- @wait-11s
48
- @slow-hack
47
+
48
+
49
49
  Scenario: Generate a new password for "github", PWS_SECONDS set to 5, gets passed to the get as keep-in-clipboard time
50
50
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
51
51
  When I set env variable "PWS_SECONDS" to "5"
@@ -55,7 +55,7 @@ Feature: Update
55
55
  And the output should contain "The password for github has been updated"
56
56
  And the output should contain "The password for github is now available in your clipboard for 5 seconds"
57
57
 
58
- @slow-hack
58
+
59
59
  Scenario: Generate a new password for "github", third parameter defines password length
60
60
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
61
61
  When I run `pws update-gen github 0 10` interactively
@@ -65,7 +65,7 @@ Feature: Update
65
65
  And the output should contain "The password for github has been copied to your clipboard"
66
66
  And the clipboard should match /^.{10}$/
67
67
 
68
- @slow-hack
68
+
69
69
  Scenario: Generate a new password for "github", default length is 64
70
70
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
71
71
  When I run `pws update-gen github 0` interactively
@@ -75,7 +75,7 @@ Feature: Update
75
75
  And the output should contain "The password for github has been copied to your clipboard"
76
76
  And the clipboard should match /^.{64}$/
77
77
 
78
- @slow-hack
78
+
79
79
  Scenario: Generate a new password for "github", default length of PWS_LENGTH
80
80
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
81
81
  When I set env variable "PWS_LENGTH" to "15"
@@ -86,7 +86,7 @@ Feature: Update
86
86
  And the output should contain "The password for github has been copied to your clipboard"
87
87
  And the clipboard should match /^.{15}$/
88
88
 
89
- @slow-hack
89
+
90
90
  Scenario: Generate a new password for "github", fourth parameter defines a char pool used for generation
91
91
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
92
92
  When I run `pws update-gen github 0 10 a` interactively
@@ -96,7 +96,7 @@ Feature: Update
96
96
  And the output should contain "The password for github has been copied to your clipboard"
97
97
  And the clipboard should match /^a{10}$/
98
98
 
99
- @slow-hack
99
+
100
100
  Scenario: Generate a new password for "github", the default char pool is !\"\#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~
101
101
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
102
102
  When I run `pws update-gen github 0` interactively
@@ -106,7 +106,7 @@ Feature: Update
106
106
  And the output should contain "The password for github has been copied to your clipboard"
107
107
  And the clipboard should match ^[!\"\#$%&'()*+,\-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ\[\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~]+$
108
108
 
109
- @slow-hack
109
+
110
110
  Scenario: Generate a new password for "github", the default char pool PWS_CHARPOOL
111
111
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
112
112
  When I set env variable "PWS_CHARPOOL" to "a"
@@ -116,3 +116,12 @@ Feature: Update
116
116
  And the output should contain "The password for github has been updated"
117
117
  And the output should contain "The password for github has been copied to your clipboard"
118
118
  And the clipboard should match ^a{64}$
119
+
120
+ Scenario: Generate a new password for "github", exclude the characters "ABC123" from the charpool
121
+ Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
122
+ When I run `pws update-gen github 0 --exclude ABC123` interactively
123
+ And I type "my_master_password"
124
+ Then the output should contain "Master password:"
125
+ And the output should contain "The password for github has been updated"
126
+ And the output should contain "The password for github has been copied to your clipboard"
127
+ And the clipboard should match [^ABC123]{64}
@@ -12,7 +12,7 @@ Feature: Update
12
12
  And the output should contain "Please enter a new password for github:"
13
13
  And the output should contain "The password for github has been updated"
14
14
 
15
- @slow-hack
15
+
16
16
  Scenario: Set a new password for "github", already passing it as command line paramenter (not recommended)
17
17
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
18
18
  When I run `pws update github new_password` interactively
@@ -27,7 +27,7 @@ Feature: Update
27
27
  Then the output should contain "Master password:"
28
28
  And the output should contain "There is no password stored for github, so you cannot update it!"
29
29
 
30
- @slow-hack
30
+
31
31
  Scenario: Try to update the password for "github" (but it's empty)
32
32
  Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
33
33
  When I run `pws update github` interactively
@@ -44,7 +44,7 @@ Feature: Update
44
44
  Then the output should contain "Master password:"
45
45
  And the output should contain "NO ACCESS"
46
46
 
47
- @very-slow-hack
47
+
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" and a key "github" with password "old_password"
50
50
  When I run `pws update github github_password` interactively
data/lib/pws.rb CHANGED
@@ -127,15 +127,42 @@ class PWS
127
127
  end
128
128
  end
129
129
  aliases_for :get, :entry, :copy, :password, :for, :[]
130
+
131
+ # Print a password entry to the screen
132
+ def print_screen(key, seconds = @options[:seconds])
133
+ if real_key = @abbrevs[key]
134
+ password = @data[real_key][:password]
135
+ if seconds && seconds.to_i > 0
136
+ print Paint[%[The password for #{real_key} will be displayed for #{seconds.to_i} second#{?s if seconds.to_i > 1}:\n#{password}], :green]
137
+ begin
138
+ sleep seconds.to_i
139
+ rescue Interrupt
140
+ puts "\e[999D\e[K\e[1A"*2 if $stdin.tty? # clear the pw from the screen
141
+ raise
142
+ end
143
+ puts "\e[999D\e[K\e[1A"*2 if $stdin.tty? # clear the pw from the screen
144
+ return true
145
+ else
146
+ pa %[The password for #{real_key} is:\n#{password}], :green
147
+ return true
148
+ end
149
+ else
150
+ pa %[No password found for #{key}!], :red
151
+ return false
152
+ end
153
+ end
154
+ alias :'print-screen' :print_screen
155
+ alias :ps :print_screen
130
156
 
131
157
  # Adds a password entry with a freshly generated random password
132
158
  def generate(
133
159
  key,
134
160
  seconds = @options[:seconds],
135
161
  length = @options[:length],
136
- charpool = @options[:charpool]
162
+ charpool = @options[:charpool],
163
+ excluded = @options[:exclude]
137
164
  )
138
- get(key, seconds) if add(key, generator(length, charpool))
165
+ get(key, seconds) if add(key, generator(length, charpool, excluded))
139
166
  end
140
167
  alias_for :generate, :gen
141
168
 
@@ -144,9 +171,10 @@ class PWS
144
171
  key,
145
172
  seconds = @options[:seconds],
146
173
  length = @options[:length],
147
- charpool = @options[:charpool]
174
+ charpool = @options[:charpool],
175
+ excluded = @options[:exclude]
148
176
  )
149
- get(key, seconds) if update(key, generator(length, charpool))
177
+ get(key, seconds) if update(key, generator(length, charpool, excluded))
150
178
  end
151
179
  alias :'update-generate' :update_generate
152
180
  alias :'update_gen' :update_generate
@@ -285,7 +313,8 @@ class PWS
285
313
  end
286
314
 
287
315
  # Generate a random password, maybe put in its own class sometime
288
- def generator(length, charpool)
316
+ def generator(length, charpool, exclude)
317
+ charpool = charpool.tr(exclude, '') if exclude
289
318
  charpool_size = charpool.size
290
319
  (1..length.to_i).map{
291
320
  charpool[SecureRandom.random_number(charpool_size)]
@@ -68,6 +68,14 @@ module PWS::Runner
68
68
  #{Paint['get', :bold]} / entry / copy / password / for ( name, seconds = 10 )
69
69
  Copies the password for <name> to the clipboard. The second argument specifies,
70
70
  how long the password is kept in the clipboard (0 = no deletion).
71
+ Please keep in mind that other programs can access (and log) the contents
72
+ of your clipboard.
73
+
74
+ #{Paint['ps', :bold]} / print-screen ( name, seconds = 10 )
75
+ Displays the password on stdout. The second argument specifies,
76
+ how long the password is shown (0 = no deletion).
77
+ Please keep in mind that the password will appear in your shell's logfile,
78
+ for example, in "~/.bash_history"
71
79
 
72
80
  #{Paint['add', :bold]} / set / store / create ( name, password = nil )
73
81
  Stores a new password entry. The second argument can be the password, but
@@ -126,7 +134,7 @@ module PWS::Runner
126
134
  encryption key (pbkdf2). A higher number takes longer to compute, but makes
127
135
  it harder for attacker to bruteforce your password.
128
136
 
129
- #{Paint['--seconds', :bold]}, #{Paint['--length', :bold]}, #{Paint['--charpool', :bold]}
137
+ #{Paint['--seconds', :bold]}, #{Paint['--length', :bold]}, #{Paint['--charpool', :bold]}, #{Paint['--exclude', :bold]}
130
138
  Preset options for specific actions.
131
139
 
132
140
  #{Paint["ENV Variables", :underline]}
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class PWS
2
- VERSION = '1.0.7'
4
+ VERSION = "1.0.8"
3
5
  end
@@ -16,13 +16,13 @@ Gem::Specification.new do |s|
16
16
  s.extra_rdoc_files = ["README.md", "MIT-LICENSE.txt", "CHANGELOG.md"]
17
17
  s.license = 'MIT'
18
18
  s.executables = ['pws']
19
- s.add_dependency 'clipboard', '~> 1.1.1'
19
+ s.add_dependency 'clipboard', '~> 1.3'
20
20
  s.add_dependency 'paint', '>= 0.8.7'
21
21
  s.add_dependency 'pbkdf2-ruby'
22
22
  s.add_development_dependency 'rake', '< 13'
23
- s.add_development_dependency 'aruba', '= 0.5.4'
24
- s.add_development_dependency 'cucumber', '~> 2.4.0'
25
- s.add_development_dependency 'rspec', '~> 2.99'
23
+ s.add_development_dependency 'aruba', '~> 0.14'
24
+ s.add_development_dependency 'cucumber', '~> 3.1'
25
+ s.add_development_dependency 'rspec', '~> 3.8'
26
26
 
27
27
  len = s.homepage.size
28
28
  s.post_install_message = \
metadata CHANGED
@@ -1,114 +1,115 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pws
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Lelis
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-06 00:00:00.000000000 Z
11
+ date: 2019-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: clipboard
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
17
  - - "~>"
17
18
  - !ruby/object:Gem::Version
18
- version: 1.1.1
19
- name: clipboard
20
- prerelease: false
19
+ version: '1.3'
21
20
  type: :runtime
21
+ prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.1
26
+ version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
+ name: paint
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
31
  - - ">="
31
32
  - !ruby/object:Gem::Version
32
33
  version: 0.8.7
33
- name: paint
34
- prerelease: false
35
34
  type: :runtime
35
+ prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.8.7
41
41
  - !ruby/object:Gem::Dependency
42
+ name: pbkdf2-ruby
42
43
  requirement: !ruby/object:Gem::Requirement
43
44
  requirements:
44
45
  - - ">="
45
46
  - !ruby/object:Gem::Version
46
47
  version: '0'
47
- name: pbkdf2-ruby
48
- prerelease: false
49
48
  type: :runtime
49
+ prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
+ name: rake
56
57
  requirement: !ruby/object:Gem::Requirement
57
58
  requirements:
58
59
  - - "<"
59
60
  - !ruby/object:Gem::Version
60
61
  version: '13'
61
- name: rake
62
- prerelease: false
63
62
  type: :development
63
+ prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "<"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '13'
69
69
  - !ruby/object:Gem::Dependency
70
+ name: aruba
70
71
  requirement: !ruby/object:Gem::Requirement
71
72
  requirements:
72
- - - '='
73
+ - - "~>"
73
74
  - !ruby/object:Gem::Version
74
- version: 0.5.4
75
- name: aruba
76
- prerelease: false
75
+ version: '0.14'
77
76
  type: :development
77
+ prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '='
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.5.4
82
+ version: '0.14'
83
83
  - !ruby/object:Gem::Dependency
84
+ name: cucumber
84
85
  requirement: !ruby/object:Gem::Requirement
85
86
  requirements:
86
87
  - - "~>"
87
88
  - !ruby/object:Gem::Version
88
- version: 2.4.0
89
- name: cucumber
90
- prerelease: false
89
+ version: '3.1'
91
90
  type: :development
91
+ prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 2.4.0
96
+ version: '3.1'
97
97
  - !ruby/object:Gem::Dependency
98
+ name: rspec
98
99
  requirement: !ruby/object:Gem::Requirement
99
100
  requirements:
100
101
  - - "~>"
101
102
  - !ruby/object:Gem::Version
102
- version: '2.99'
103
- name: rspec
104
- prerelease: false
103
+ version: '3.8'
105
104
  type: :development
105
+ prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '2.99'
111
- description: pws is a command-line password safe. Please run `pws --help` for usage information.
110
+ version: '3.8'
111
+ description: pws is a command-line password safe. Please run `pws --help` for usage
112
+ information.
112
113
  email: mail@janlelis.de
113
114
  executables:
114
115
  - pws
@@ -131,6 +132,7 @@ files:
131
132
  - features/master.feature
132
133
  - features/misc.feature
133
134
  - features/namespaces.feature
135
+ - features/print-screen.feature
134
136
  - features/remove.feature
135
137
  - features/rename.feature
136
138
  - features/resave.feature
@@ -172,9 +174,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
174
  - !ruby/object:Gem::Version
173
175
  version: '0'
174
176
  requirements: []
175
- rubyforge_project:
176
- rubygems_version: 2.6.10
177
- signing_key:
177
+ rubyforge_project:
178
+ rubygems_version: 2.5.1
179
+ signing_key:
178
180
  specification_version: 4
179
181
  summary: pws is a CLI password safe.
180
182
  test_files: []