pws 0.9.2 → 1.0.0.pre.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/README.md +18 -14
- data/features/add.feature +14 -2
- data/features/create.feature +23 -0
- data/features/in-out.feature +54 -0
- data/features/master.feature +1 -0
- data/features/misc.feature +14 -0
- data/features/namespaces.feature +6 -4
- data/features/remove.feature +1 -0
- data/features/resave.feature +37 -0
- data/features/show.feature +36 -3
- data/features/step_definitions/pws_steps.rb +42 -2
- data/features/support/env.rb +3 -2
- data/features/update.feature +60 -0
- data/lib/pws.rb +109 -80
- data/lib/pws/encryptor.rb +28 -24
- data/lib/pws/format.rb +103 -0
- data/lib/pws/format/0.9.rb +44 -0
- data/lib/pws/format/1.0.rb +183 -0
- data/lib/pws/runner.rb +21 -2
- data/lib/pws/version.rb +1 -1
- data/pws.gemspec +13 -7
- metadata +96 -9
- data/features/access.feature +0 -13
data/README.md
CHANGED
@@ -1,40 +1,44 @@
|
|
1
|
-
pws 
|
1
|
+
pws [](http://travis-ci.org/janlelis/pws)
|
2
2
|
===
|
3
3
|
pws is a command-line password safe/manager written in Ruby.
|
4
4
|
|
5
|
-
|
5
|
+
*ATTENTION* Refactoring in progress / The latest stable version is 0.9.2
|
6
|
+
|
7
|
+
Usage
|
8
|
+
---
|
9
|
+
[](http://rbjl.net/60-pws-the-ruby-powered-command-line-password-manager)
|
10
|
+
|
6
11
|
|
7
12
|
Installation
|
8
13
|
---
|
9
14
|
You can install pws with
|
10
15
|
`$ gem install pws`
|
11
16
|
|
12
|
-
Run `$ pws help` for usage information.
|
17
|
+
Run `$ pws --help` for usage information.
|
13
18
|
|
14
|
-
|
19
|
+
|
20
|
+
1.0 / Updating from 0.9
|
15
21
|
---
|
16
|
-
|
22
|
+
You can try out the newest version with:
|
23
|
+
`$ gem install pws --pre`
|
17
24
|
|
18
|
-
|
25
|
+
The 0.9 password files are not compatible with that version, however, you can convert your safe with:
|
26
|
+
`$ pws resave --in 0.9 --out 1.0`
|
19
27
|
|
20
|
-
Cucumber specs loosely based on [the ones](https://github.com/thecatwasnot/passwordsafe/blob/master/features/) by thecatwasnot - thanks
|
21
28
|
|
22
|
-
|
29
|
+
Reading the source
|
23
30
|
---
|
24
|
-
|
31
|
+
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.
|
25
32
|
|
26
|
-
* Significantly improved crypto methods
|
27
|
-
* Tests for the crypto stuff
|
28
|
-
* Different storage format, but will be backwards compatible
|
29
|
-
* Little UI tweaks
|
30
33
|
|
31
34
|
Contributions by
|
32
35
|
---
|
33
36
|
* [brianewing](https://github.com/brianewing/)
|
34
37
|
* [dquimper](https://github.com/dquimper/)
|
35
38
|
* [grapz](https://github.com/grapz/)
|
39
|
+
* Cucumber specs loosely based on [the ones](https://github.com/thecatwasnot/passwordsafe/blob/master/features/) by [thecatwasnot](https://github.com/thecatwasnot/)
|
40
|
+
|
36
41
|
|
37
42
|
Copyright
|
38
43
|
---
|
39
|
-
|
40
44
|
© 2010-2012 Jan Lelis, MIT license
|
data/features/add.feature
CHANGED
@@ -3,6 +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
|
Scenario: Add a new password for "github"
|
7
8
|
Given A safe exists with master password "my_master_password"
|
8
9
|
When I run `pws add github` interactively
|
@@ -12,6 +13,7 @@ Feature: Add
|
|
12
13
|
And the output should contain "Please enter a password for github:"
|
13
14
|
And the output should contain "The password for github has been added"
|
14
15
|
|
16
|
+
@slow-hack
|
15
17
|
Scenario: Add a new password for "github", already passing it as command line paramenter (not recommended)
|
16
18
|
Given A safe exists with master password "my_master_password"
|
17
19
|
When I run `pws add github github_password` interactively
|
@@ -33,7 +35,7 @@ Feature: Add
|
|
33
35
|
And I type ""
|
34
36
|
Then the output should contain "Master password:"
|
35
37
|
And the output should contain "Please enter a password for github:"
|
36
|
-
And the output should contain "Cannot
|
38
|
+
And the output should contain "Cannot set an empty password!"
|
37
39
|
|
38
40
|
Scenario: Try to add a new password for "github" (but the master password is wrong)
|
39
41
|
Given A safe exists with master password "my_master_password"
|
@@ -42,4 +44,14 @@ Feature: Add
|
|
42
44
|
Then the output should contain "Master password:"
|
43
45
|
And the output should contain "NO ACCESS"
|
44
46
|
|
45
|
-
|
47
|
+
@slow-hack
|
48
|
+
Scenario: Set a new password for "github", this also sets the timestamp
|
49
|
+
Given A safe exists with master password "my_master_password"
|
50
|
+
When I run `pws ls` interactively
|
51
|
+
And I type "my_master_password"
|
52
|
+
Then the output from "pws ls" should not contain the current date
|
53
|
+
When I run `pws add github github_password` interactively
|
54
|
+
And I type "my_master_password"
|
55
|
+
And I run `pws show` interactively
|
56
|
+
And I type "my_master_password"
|
57
|
+
Then the output from "pws show" should contain the current date
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Feature: Create
|
2
|
+
In order to use the password safe
|
3
|
+
As a user
|
4
|
+
I want to create a new safe
|
5
|
+
|
6
|
+
Scenario: Trying to call a pws task (except help or version), but safe does not exist, yet
|
7
|
+
When I run `pws` interactively
|
8
|
+
And I type "some_new_master_password"
|
9
|
+
And I type "some_new_master_password"
|
10
|
+
Then the output should match /No password safe detected, creating one at.*pws.*/
|
11
|
+
And the output should contain "Please enter the new master password:"
|
12
|
+
And the output should contain "Please enter the new master password, again:"
|
13
|
+
And the output should contain "There aren't any passwords stored"
|
14
|
+
|
15
|
+
Scenario: Creating a new safe fails, if password confirmation is wrong
|
16
|
+
When I run `pws` interactively
|
17
|
+
And I type "some_new_master_password"
|
18
|
+
And I type "some_new_master_password_wrong"
|
19
|
+
Then the output should match /No password safe detected, creating one at.*pws.*/
|
20
|
+
And the output should contain "Please enter the new master password:"
|
21
|
+
And the output should contain "Please enter the new master password, again:"
|
22
|
+
And the output should contain "don't match"
|
23
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
Feature: --in and --out options
|
2
|
+
In order to use the newest pws version
|
3
|
+
As a user
|
4
|
+
I want to convert my password file into a different file format
|
5
|
+
|
6
|
+
Scenario: Cannot access a 0.9 safe with the current version without --in 0.9 option
|
7
|
+
Given A "0.9" safe exists with master password "password" and a key "github" with password "123456"
|
8
|
+
When I run `pws` interactively
|
9
|
+
And I type "password"
|
10
|
+
And the output should contain "NO ACCESS"
|
11
|
+
And the output should contain "you will need to convert"
|
12
|
+
|
13
|
+
Scenario: Can access a 0.9 safe, if --in 0.9 option is given
|
14
|
+
Given A "0.9" safe exists with master password "password" and a key "github" with password "123456"
|
15
|
+
When I run `pws --in 0.9` interactively
|
16
|
+
And I type "password"
|
17
|
+
Then the output should contain "Master password:"
|
18
|
+
Then the output should contain "Entries"
|
19
|
+
Then the output should contain "github"
|
20
|
+
|
21
|
+
Scenario: Using --in 0.5 option, but --in 0.5 is not supported
|
22
|
+
Given A safe exists with master password "password" and a key "github" with password "123456"
|
23
|
+
When I run `pws --in 0.5` interactively
|
24
|
+
And I type "password"
|
25
|
+
Then the output should contain "Master password:"
|
26
|
+
Then the output should contain "Input format <0.5> is not supported"
|
27
|
+
|
28
|
+
Scenario: Using --in 0.9 option, but safe is not in 0.9 format
|
29
|
+
Given A safe exists with master password "password" and a key "github" with password "123456"
|
30
|
+
When I run `pws --in 0.9` interactively
|
31
|
+
And I type "password"
|
32
|
+
Then the output should contain "Master password:"
|
33
|
+
Then the output should contain "NO ACCESS"
|
34
|
+
|
35
|
+
@slow-hack
|
36
|
+
Scenario: Succesfully converts from 0.9 to 1.0 with --in 0.9 and out --1.0 options
|
37
|
+
Given A "0.9" safe exists with master password "password" and a key "github" with password "123456"
|
38
|
+
When I run `pws resave --in 0.9 --out 1.0` interactively
|
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"
|
42
|
+
When I run `pws` interactively
|
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"
|
47
|
+
|
48
|
+
Scenario: Trying to convert to 0.9, but --out 0.9 is not supported
|
49
|
+
Given A "0.9" safe exists with master password "password" and a key "github" with password "123456"
|
50
|
+
When I run `pws resave --in 0.9 --out 0.9` interactively
|
51
|
+
And I type "password"
|
52
|
+
Then the output should contain "Master password:"
|
53
|
+
Then the output should contain "Output format <0.9> is not supported"
|
54
|
+
|
data/features/master.feature
CHANGED
@@ -30,6 +30,7 @@ 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
|
33
34
|
Scenario: Change the master password, already passing it as command line parameter (not recommended)
|
34
35
|
Given A safe exists with master password "my_master_password"
|
35
36
|
When I run `pws master my_new_master_password` interactively
|
data/features/misc.feature
CHANGED
@@ -19,4 +19,18 @@ Feature: Misc
|
|
19
19
|
And the output should contain "Unknown action"
|
20
20
|
And the output should contain "blubb"
|
21
21
|
|
22
|
+
Scenario: I am asking for help
|
23
|
+
When I run `pws --help` interactively
|
24
|
+
And the output should contain "Usage"
|
25
|
+
And the output should contain "pws"
|
26
|
+
And the output should contain "action"
|
27
|
+
And the output should contain "help"
|
28
|
+
And the output should contain "namespace"
|
29
|
+
And the output should contain "master"
|
30
|
+
|
31
|
+
Scenario: I am asking for the version
|
32
|
+
When I run `pws --version` interactively
|
33
|
+
And the output should contain "pws"
|
34
|
+
And the output should contain "J-_-L"
|
35
|
+
And the output should contain "github"
|
22
36
|
|
data/features/namespaces.feature
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
-
Feature: Namespaces
|
1
|
+
Feature: Namespaces and creating new safes
|
2
2
|
In order to keep things separate
|
3
3
|
As a user
|
4
4
|
I want to use different safes
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
@slow-hack
|
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"
|
10
|
+
And I type "some_new_master_password"
|
10
11
|
Then the output should match /No password safe detected, creating one at.*pws.*-work/
|
11
|
-
And the output should contain "Please enter
|
12
|
+
And the output should contain "Please enter the new master password:"
|
13
|
+
And the output should contain "Please enter the new master password, again:"
|
12
14
|
And the output should contain "There aren't any passwords stored"
|
13
15
|
|
14
16
|
Scenario: Only passing "-" operates on usual main namespace
|
data/features/remove.feature
CHANGED
@@ -3,6 +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
|
Scenario: Remove password entry "github"
|
7
8
|
Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
|
8
9
|
When I run `pws remove github` interactively
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Feature: Resave
|
2
|
+
In order to do nothing, but apply options to the safe and always save it
|
3
|
+
As a user
|
4
|
+
I want resave the save
|
5
|
+
|
6
|
+
@slow-hack
|
7
|
+
Scenario: Usual resave
|
8
|
+
Given A safe exists with master password "my_master_password" and keys
|
9
|
+
| some | 123 |
|
10
|
+
| password | 345 |
|
11
|
+
| entries | 678 |
|
12
|
+
When I run `pws resave` interactively
|
13
|
+
And I type "my_master_password"
|
14
|
+
Then the output from "pws resave" should contain "resaved"
|
15
|
+
When I run `pws` interactively
|
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"
|
20
|
+
|
21
|
+
@slow-hack
|
22
|
+
Scenario: Useful for converting when used together with --in and --out options
|
23
|
+
Given A "0.9" safe exists with master password "password" and a key "github" with password "123456"
|
24
|
+
When I run `pws show` interactively
|
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"
|
29
|
+
When I run `pws resave --in 0.9 --out 1.0` interactively
|
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"
|
33
|
+
When I run `pws` interactively
|
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"
|
data/features/show.feature
CHANGED
@@ -2,7 +2,7 @@ Feature: Show
|
|
2
2
|
In order to have an overview of my password safe
|
3
3
|
As a user
|
4
4
|
I want show a list of password entry keys
|
5
|
-
|
5
|
+
|
6
6
|
Scenario: Show the list
|
7
7
|
Given A safe exists with master password "my_master_password" and keys
|
8
8
|
| some | 123 |
|
@@ -14,7 +14,7 @@ Feature: Show
|
|
14
14
|
And the output should contain "some"
|
15
15
|
And the output should contain "password"
|
16
16
|
And the output should contain "entries"
|
17
|
-
|
17
|
+
|
18
18
|
Scenario: Show the list and filter for regex
|
19
19
|
Given A safe exists with master password "my_master_password" and keys
|
20
20
|
| some-abc | 123 |
|
@@ -34,7 +34,40 @@ Feature: Show
|
|
34
34
|
When I run `pws show "(("` interactively
|
35
35
|
And I type "my_master_password"
|
36
36
|
Then the output should contain "Invalid regex"
|
37
|
-
|
37
|
+
|
38
|
+
Scenario: Show the list and filter for regex, but no results
|
39
|
+
Given A safe exists with master password "my_master_password" and keys
|
40
|
+
| some-abc | 123 |
|
41
|
+
| password-aDc! | 345 |
|
42
|
+
| entries | 678 |
|
43
|
+
When I run `pws show unknown` interactively
|
44
|
+
And I type "my_master_password"
|
45
|
+
Then the output should contain "No passwords found"
|
46
|
+
|
47
|
+
Scenario: Also shows last change date for each entry
|
48
|
+
Given A safe exists with master password "my_master_password" and a key "github" with password "github_password" and timestamp "42424242"
|
49
|
+
When I run `pws show` interactively
|
50
|
+
And I type "my_master_password"
|
51
|
+
Then the output should contain "Entries"
|
52
|
+
And the output should contain "github"
|
53
|
+
And the output should contain "71-05-07"
|
54
|
+
|
55
|
+
Scenario: Don't show the last timestamp if it is 0
|
56
|
+
Given A safe exists with master password "my_master_password" and a key "github" with password "github_password" and timestamp "0"
|
57
|
+
When I run `pws show` interactively
|
58
|
+
And I type "my_master_password"
|
59
|
+
Then the output should contain "Entries"
|
60
|
+
And the output should contain "github"
|
61
|
+
And the output should not contain "70-01-01"
|
62
|
+
|
63
|
+
Scenario: Don't show the last timestamp if there is none
|
64
|
+
Given A safe exists with master password "my_master_password" and a key "github" with password "github_password"
|
65
|
+
When I run `pws show` interactively
|
66
|
+
And I type "my_master_password"
|
67
|
+
Then the output should contain "Entries"
|
68
|
+
And the output should contain "github"
|
69
|
+
And the output should not contain "70-01-01"
|
70
|
+
|
38
71
|
Scenario: Show the list (but there is no entry yet)
|
39
72
|
Given A safe exists with master password "my_master_password"
|
40
73
|
When I run `pws show` interactively
|
@@ -1,13 +1,29 @@
|
|
1
|
-
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
def create_safe(master, key_hash = {}, timestamp = nil)
|
2
4
|
ENV["PWS_CHARPOOL"] = ENV["PWS_LENGTH"] = ENV["PWS_SECONDS"] = nil
|
3
5
|
restore, $stdout = $stdout, StringIO.new # tmp silence $stdout
|
4
|
-
pws = PWS.new(password: master)
|
6
|
+
pws = PWS.new(password: master, iterations: 5)
|
5
7
|
key_hash.each{ |key, password|
|
6
8
|
pws.add key, password
|
7
9
|
}
|
10
|
+
|
11
|
+
# only generating global timestamp for every entry
|
12
|
+
if timestamp
|
13
|
+
pws.instance_variable_get(:@data).each{ |_, entry|
|
14
|
+
entry[:timestamp] = timestamp
|
15
|
+
}
|
16
|
+
pws.resave
|
17
|
+
end
|
18
|
+
|
8
19
|
$stdout = restore
|
9
20
|
end
|
10
21
|
|
22
|
+
# faking legacy version safe using a fixture, maybe do it properly sometime
|
23
|
+
def create_09_safe
|
24
|
+
FileUtils.cp File.dirname(__FILE__) + '/../../spec/fixtures/0.9/correct', ENV['PWS']
|
25
|
+
end
|
26
|
+
|
11
27
|
Given /^A safe exists with master password "([^"]*)"$/ do |master_password|
|
12
28
|
create_safe(master_password)
|
13
29
|
end
|
@@ -16,10 +32,18 @@ Given /^A safe exists with master password "([^"]*)" and a key "([^"]+)" with pa
|
|
16
32
|
create_safe(master_password, key => password)
|
17
33
|
end
|
18
34
|
|
35
|
+
Given /^A safe exists with master password "([^"]*)" and a key "([^"]+)" with password "([^"]+)" and timestamp "([^"]+)"$/ do |master_password, key, password, timestamp|
|
36
|
+
create_safe(master_password, { key => password }, timestamp)
|
37
|
+
end
|
38
|
+
|
19
39
|
Given /^A safe exists with master password "([^"]*)" and keys$/ do |master_password, key_table|
|
20
40
|
create_safe(master_password, key_table.rows_hash)
|
21
41
|
end
|
22
42
|
|
43
|
+
Given /^A "0.9" safe exists with master password "password" and a key "github" with password "123456"$/ do
|
44
|
+
create_09_safe
|
45
|
+
end
|
46
|
+
|
23
47
|
Given /^A clipboard content of "([^"]*)"$/ do |content|
|
24
48
|
Clipboard.copy content
|
25
49
|
end
|
@@ -36,6 +60,22 @@ Then /^the clipboard should match ([^\/].+)$/ do |expected|
|
|
36
60
|
assert_matching_output(expected, Clipboard.paste)
|
37
61
|
end
|
38
62
|
|
63
|
+
Then /^the output should contain the current date$/ do |cmd|
|
64
|
+
assert_partial_output(Time.now.strftime('%y-%m-%d'), all_output)
|
65
|
+
end
|
66
|
+
|
67
|
+
Then /^the output should not contain the current date$/ do |cmd|
|
68
|
+
assert_no_partial_output(Time.now.strftime('%y-%m-%d'), all_output)
|
69
|
+
end
|
70
|
+
|
71
|
+
Then /^the output from "([^"]*)" should contain the current date$/ do |cmd|
|
72
|
+
assert_partial_output(Time.now.strftime('%y-%m-%d'), output_from(cmd))
|
73
|
+
end
|
74
|
+
|
75
|
+
Then /^the output from "([^"]*)" should not contain the current date$/ do |cmd|
|
76
|
+
assert_no_partial_output(Time.now.strftime('%y-%m-%d'), output_from(cmd))
|
77
|
+
end
|
78
|
+
|
39
79
|
When /^I set env variable "(\w+)" to "([^"]*)"$/ do |var, value|
|
40
80
|
ENV[var] = value
|
41
81
|
end
|
data/features/support/env.rb
CHANGED
@@ -18,6 +18,7 @@ BEGIN{
|
|
18
18
|
END{
|
19
19
|
Clipboard.clear
|
20
20
|
ENV["PWS"] = $original_pws_file
|
21
|
+
FileUtils.rm Dir['pws-test-*']
|
21
22
|
}
|
22
23
|
|
23
24
|
Around do |_, block|
|
@@ -33,9 +34,9 @@ end
|
|
33
34
|
# Hacks
|
34
35
|
|
35
36
|
Before('@slow-hack') do
|
36
|
-
@aruba_io_wait_seconds = 0.5
|
37
|
+
@aruba_io_wait_seconds = 5 # 0.5 would be ok... except for "output from", travis even needs more
|
37
38
|
end
|
38
39
|
|
39
40
|
Before('@wait-11s') do
|
40
|
-
@aruba_timeout_seconds =
|
41
|
+
@aruba_timeout_seconds = 12
|
41
42
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
Feature: Update
|
2
|
+
In order to keep my privacy
|
3
|
+
As a user
|
4
|
+
I want to update a password entry
|
5
|
+
|
6
|
+
@slow-hack
|
7
|
+
Scenario: Set a new password for "github"
|
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 github` interactively
|
10
|
+
And I type "my_master_password"
|
11
|
+
And I type "new_password"
|
12
|
+
Then the output should contain "Master password:"
|
13
|
+
And the output should contain "Please enter a new password for github:"
|
14
|
+
And the output should contain "The password for github has been updated"
|
15
|
+
|
16
|
+
@slow-hack
|
17
|
+
Scenario: Set a new password for "github", already passing it as command line paramenter (not recommended)
|
18
|
+
Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
|
19
|
+
When I run `pws update github new_password` interactively
|
20
|
+
And I type "my_master_password"
|
21
|
+
Then the output should contain "Master password:"
|
22
|
+
And the output should contain "The password for github has been updated"
|
23
|
+
|
24
|
+
Scenario: Try to update the password for "github" (but it does not exist)
|
25
|
+
Given A safe exists with master password "my_master_password"
|
26
|
+
When I run `pws update github` interactively
|
27
|
+
And I type "my_master_password"
|
28
|
+
Then the output should contain "Master password:"
|
29
|
+
And the output should contain "There is no password stored for github, so you cannot update it!"
|
30
|
+
|
31
|
+
@slow-hack
|
32
|
+
Scenario: Try to update the password for "github" (but it's empty)
|
33
|
+
Given A safe exists with master password "my_master_password" and a key "github" with password "old_password"
|
34
|
+
When I run `pws update github` interactively
|
35
|
+
And I type "my_master_password"
|
36
|
+
And I type ""
|
37
|
+
Then the output should contain "Master password:"
|
38
|
+
And the output should contain "Please enter a new password for github:"
|
39
|
+
And the output should contain "Cannot set an empty password!"
|
40
|
+
|
41
|
+
Scenario: Try to update the password for "github" (but the master password is wrong)
|
42
|
+
Given A safe exists with master password "my_master_password"
|
43
|
+
When I run `pws update github` interactively
|
44
|
+
And I type "my_master_password_wrong"
|
45
|
+
Then the output should contain "Master password:"
|
46
|
+
And the output should contain "NO ACCESS"
|
47
|
+
|
48
|
+
@slow-hack
|
49
|
+
Scenario: Set a new password for "github", this also sets the timestamp
|
50
|
+
Given A safe exists with master password "my_master_password" and a key "github" with password "old_password" and timestamp "42424242"
|
51
|
+
When I run `pws ls` interactively
|
52
|
+
And I type "my_master_password"
|
53
|
+
Then the output from "pws ls" should not contain the current date
|
54
|
+
When I run `pws update github github_password` interactively
|
55
|
+
And I type "my_master_password"
|
56
|
+
And I run `pws show` interactively
|
57
|
+
And I type "my_master_password"
|
58
|
+
Then the output from "pws show" should contain the current date
|
59
|
+
|
60
|
+
|