pwss 0.3.0 → 0.4.0

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: f0d6de35d7d59295771fff8e0710f121b9fcaf3c
4
- data.tar.gz: 15b6b84a494a01fdb2c94833481dc1bbc5c08818
3
+ metadata.gz: beca8e8821633787a38795eeff8ede8471aae201
4
+ data.tar.gz: 5fe7c3c6926bd4646af646cf5f5b6d94110263bc
5
5
  SHA512:
6
- metadata.gz: 2a6951a825180bdda38b6a26da7895bbb422862466cadfc1ea95703a050ae2c542ba2b61fb45a489c2ed3af83f6429843bc8dec6a668933acba6f305258b077e
7
- data.tar.gz: 1ce2596579e801b3313ec443a98aac562ec94b3c2a933b59b3ad51bc35f1c8bdcd730c0c3795a0ff8318be528fb1a37177e6c0ec7b9288ea6fc35f9fe05a25e4
6
+ metadata.gz: 81f03cb7c8c3d1fc9f5c5cd43be63039a1d916f1d4ef107df38fb13953c82bde320db9b95b3147e95ed0dacda5f200e651517552f0f332e48e000c2557e189ac
7
+ data.tar.gz: c5189e3f75c9b4fcf0aa2ce05aa79330c19e7e4c0de790e0ba8e0995e25c100bc08fe881238a045a6d9bbed1f257524d57a64dea10bed009d0d15f46662dac5b
data/README.textile CHANGED
@@ -2,7 +2,7 @@ h1. Pwss
2
2
 
3
3
  A password manager in the spirit of "pws":https://github.com/janlelis/pws.
4
4
 
5
- PWSS can store multiple entries in a file and, more important, it allows user to specify various types of entries (e.g., BankAccount) and different infos for each entry (e.g., URL for Internet passwords).
5
+ PWSS can store multiple entries in a file and it allows user to specify various types of entries (e.g., BankAccount) and different infos for each entry (e.g., URL for Internet passwords).
6
6
 
7
7
  Features:
8
8
 
@@ -62,9 +62,9 @@ A typical usage scenario is the following:
62
62
 
63
63
  *Using multiple safes.* If you want to create multiple password files or store a password file in a non-standard location, use the @-f@ (@--filename@) option:
64
64
 
65
- # @pwss -f MYFILE init@
66
- # @pwss -f MYFILE add@
67
- # @pwss -f MYFILE get@
65
+ # @pwss init -f MYFILE@
66
+ # @pwss add -f MYFILE@
67
+ # @pwss get -f MYFILE@
68
68
 
69
69
  *Do not forget to use the extension @.enc@, if your password file to be encrypted.* (See "Encrypted and Plain files", below.)
70
70
 
@@ -72,7 +72,7 @@ A typical usage scenario is the following:
72
72
 
73
73
  bc. $ pwss get my_email -w 3
74
74
 
75
- will retrieve entry whose title is @my_email@ and make the password available in the clipboard for @2@ seconds.
75
+ will retrieve entry whose title is @my_email@ and make the password available in the clipboard for @3@ seconds.
76
76
 
77
77
  Use @0@ to keep the password in the clipboard till a key is pressed.
78
78
 
@@ -163,6 +163,10 @@ Notice that only @title@ and @password@ are required.
163
163
 
164
164
  h2. Changelog
165
165
 
166
+ * *Release 0.4.0*
167
+ ** New @--stdout@ option will output password to standard output (useful for integration with other applications)
168
+ ** New @--select N@ option will automatically select the @N@th entry (rather than asking the user to select an entry).
169
+
166
170
  * *Release 0.3.0*
167
171
  ** internal refactoring: CLI parsing is now based on "Slop":https://github.com/leejarvis/slop. The documentation has been revised and should now be simpler to understand.
168
172
  ** added some controls to avoid overwriting existing files (in particular: init, encrypt, and decrypt). The command is now less Unix-like, but I hope you will appreciate a bit more safety.
data/bin/pwss CHANGED
@@ -165,20 +165,26 @@ opts = Slop.parse :help => true do
165
165
  banner "pwss get [options] string"
166
166
  description "Get password for entry matching <string> in the title field"
167
167
 
168
- on "-f", "--filename=", "Password file to use."
169
- on "-w", "--wait=", "Seconds password is available in the clipboard (0 = interactive).", as: Integer
168
+ on "-f", "--filename=", "Password file to use"
169
+ on "-w", "--wait=", "Seconds password is available in the clipboard (0 = interactive)", as: Integer
170
+ on "--stdout", "Output the password to standard output"
171
+ on "--select=", "Select the N-th matching entry", as: Integer
170
172
 
171
173
  run do |opts, args|
172
174
  filename = opts.to_hash[:filename] || DEFAULT_FILENAME
173
175
  waiting = opts.to_hash[:wait] || DEFAULT_SECS
176
+ stdout_opt = opts.to_hash[:stdout]
177
+ entry_no = opts.to_hash[:select] || nil
174
178
 
175
179
  string, _ = file2string filename
176
180
  entries = YAML::load(string) || Array.new
177
181
 
178
- password = Pwss::get args.join(" "), entries
179
- if password
180
- Cipher.password_to_clipboard password, waiting
182
+ password = Pwss::get args.join(" "), entries, entry_no
183
+
184
+ if password then
185
+ stdout_opt ? printf("%s", password) : Cipher.password_to_clipboard(password, waiting)
181
186
  end
187
+
182
188
  end
183
189
  end
184
190
 
@@ -189,12 +195,12 @@ opts = Slop.parse :help => true do
189
195
  description "Add an entry and copy its password in the clipboard"
190
196
 
191
197
  on "-f", "--filename=", "Password file to use."
192
- on "-w", "--wait=", "Seconds password is available in the clipboard (0 = interactive).", as: Integer
198
+ on "-w", "--wait=", "Seconds password is available in the clipboard (0 = interactive)", as: Integer
193
199
 
194
- on "-e", "--entry=", "Create an entry of type TYPE (Entry, CreditCard, BankAccount, SoftwareLicense).\n Default to 'Entry', which is good enough for websites credentials."
200
+ on "-e", "--entry=", "Create an entry of type TYPE (Entry, CreditCard, BankAccount, SoftwareLicense).\n Default to 'Entry', which is good enough for websites credentials"
195
201
 
196
202
  on "-g", "--generate=", "Generate a random password of given length.", as: Integer
197
- on "-a", "--alnum", "Use only alphanumeric chars for the randomly generated password."
203
+ on "-a", "--alnum", "Use only alphanumeric chars for the randomly generated password"
198
204
 
199
205
  run do |opts, args|
200
206
  filename = opts.to_hash[:filename] || DEFAULT_FILENAME
data/lib/pwss.rb CHANGED
@@ -7,8 +7,11 @@ require 'yaml'
7
7
 
8
8
  module Pwss
9
9
 
10
- def self.get search_string, entries
11
- id = choose_entry search_string, entries
10
+ # entry_no is the relative id of an entry, specified by the user from the command line
11
+ # (useful when the search criteria returns more than one match, in an order which is known
12
+ # to the user)
13
+ def self.get search_string, entries, entry_no = nil
14
+ id = choose_entry search_string, entries, false, entry_no
12
15
 
13
16
  entries[id]["password"]
14
17
  end
@@ -60,7 +63,7 @@ module Pwss
60
63
  # Let the user select an entry from data
61
64
  # (data is a YAML string with an array of entries)
62
65
  #
63
- def self.choose_entry search_string, entries, confirm_even_if_one = false
66
+ def self.choose_entry search_string, entries, confirm_even_if_one = false, entry_no = nil
64
67
  # here we have a nuisance: we want the user to choose one entry
65
68
  # by relative id (e.g. the third found), but we need to return
66
69
  # the absolute id (to update the right entry in the safe)
@@ -68,14 +71,11 @@ module Pwss
68
71
  # ... so we just keep track of the real ids with an array
69
72
  # the relative id is the index in the array
70
73
 
71
- index = 0
72
74
  found = Array.new
73
- entries.each do |entry|
75
+ entries.each_with_index do |entry, index|
74
76
  if entry["title"].downcase.include?(search_string.downcase)
75
- print_entry found.size, entry
76
77
  found << index
77
78
  end
78
- index += 1
79
79
  end
80
80
 
81
81
  if found.size == 0 then
@@ -83,7 +83,15 @@ module Pwss
83
83
  exit -1
84
84
  end
85
85
 
86
- if found.size > 1 or confirm_even_if_one then
86
+ if entry_no then
87
+ # accept entry_no even if there is one entry
88
+ id = entry_no
89
+ elsif found.size > 1 or confirm_even_if_one then
90
+ # print the entry or the entries found together with their relative ids
91
+ found.each_with_index do |absolute_index, relative_index|
92
+ print_entry relative_index, entries[absolute_index]
93
+ end
94
+
87
95
  printf "\nVarious matches." if found.size > 1
88
96
  printf "\nSelect entry by ID (0..#{found.size-1}); -1 or empty string to exit: "
89
97
 
@@ -98,6 +106,7 @@ module Pwss
98
106
  end
99
107
  else
100
108
  id = 0
109
+ print_entry 0, entries[found[id]]
101
110
  end
102
111
 
103
112
  found[id]
data/lib/pwss/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pwss
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adolfo Villafiorita
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-08 00:00:00.000000000 Z
11
+ date: 2015-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler