pwss 0.4.0 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: beca8e8821633787a38795eeff8ede8471aae201
4
- data.tar.gz: 5fe7c3c6926bd4646af646cf5f5b6d94110263bc
3
+ metadata.gz: 2553a7a2e55ca432b8237846c9ca874415ed7f11
4
+ data.tar.gz: 49bb878f3ef6444b3138c498246280d1ad090e12
5
5
  SHA512:
6
- metadata.gz: 81f03cb7c8c3d1fc9f5c5cd43be63039a1d916f1d4ef107df38fb13953c82bde320db9b95b3147e95ed0dacda5f200e651517552f0f332e48e000c2557e189ac
7
- data.tar.gz: c5189e3f75c9b4fcf0aa2ce05aa79330c19e7e4c0de790e0ba8e0995e25c100bc08fe881238a045a6d9bbed1f257524d57a64dea10bed009d0d15f46662dac5b
6
+ metadata.gz: 44735ee5e8235b212e37d75b9e167743bcf375af8dcb2bd822b895aef1b266b37e2e565c090278e83f5f0ebd6d920aa95c74e71314d7dd85a2da7cd8cd49db28
7
+ data.tar.gz: 1b20540be432cec70e2dae8bc940976570516a453790a8453d8f8f5dcb13dbf53c071cc867ade7e94be9f8412c9d9054a9ea0964d894800cd0c692681dab8499
data/README.textile CHANGED
@@ -2,34 +2,19 @@ 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 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
-
7
5
  Features:
8
6
 
9
- * PWSS manages password files. A password file store passwords and other
10
- sensitive information
11
-
12
- * Entries in a password file can be of the following pre-defined types:
13
- Entry, CreditCard, BankAccount, SoftwareLicense
14
-
15
- * Information stored for each type:
16
-
17
- - Entry: title, username, password, url, description
18
- - CreditCard: title, issuer, name_on_card, card_number, valid_from,
19
- valid_till, verification_number, pin, url, notes
20
- - BankAccount: title, name, iban, url, description
21
- - SoftwareLicense: title, version, license_number, licensed_to,
22
- email, purchased_on
23
-
24
- * CRUD (create, read, update, delete) commands are available to
25
- operate on entries and password files
26
-
27
- * The user can manage different password files (e.g., work, personal)
7
+ * PWSS manages password *files*:
8
+ ** A password file can store different entries (password and other sensitive information)
9
+ ** The user can manage different password files (e.g., work, personal)
10
+ * Entries in a password file can be any of Entry, CreditCard, BankAccount, SoftwareLicense. Each type stores a different set of infos:
11
+ ** *Entry:* title, username, password, url, description
12
+ ** *CreditCard:* title, issuer, name_on_card, card_number, valid_from, valid_till, verification_number, pin, url, notes
13
+ ** *BankAccount:* title, name, iban, url, description
14
+ ** *SoftwareLicense: title, version, license_number, licensed_to, email, purchased_on
28
15
  * Password files can be encrypted
29
- * Encrypted password files can be decrypted, for instance, to batch process
30
- entries, to migrate to another tool, or to manually edit entries
31
- * Entries are human-readable (and editable), when the password file is not
32
- encrypted
16
+ * Encrypted password files can be decrypted, for instance, to batch process entries, to migrate to another tool, or to manually edit entries
17
+ * Entries are human-readable (and editable), when the password file is not encrypted
33
18
 
34
19
  h2. Installation
35
20
 
@@ -42,12 +27,12 @@ h2. Quick Start
42
27
  Try the following:
43
28
 
44
29
  bc. $ pwss init
45
- $ pwss add
46
- $ pwss get <title you gave with previous command>
30
+ $ pwss add First Entry
31
+ $ pwss get First
47
32
 
48
33
  For some more information:
49
34
 
50
- bc. $ pwss help # get information from the command line
35
+ bc. $ pwss man # get information from the command line
51
36
  $ pwss -h # command syntax
52
37
 
53
38
  h2. Detailed Instructions
@@ -56,9 +41,9 @@ h2. Detailed Instructions
56
41
 
57
42
  A typical usage scenario is the following:
58
43
 
59
- # @pwss init@ will create a new encrypted password safe in @~/.pwss.yaml.enc@
44
+ # @pwss init@ will create a new encrypted password safe in @~/.pwss.yaml.enc@. If you specify a filename without the @.enc@ extension, the password safe will be stored in plain text (see below).
60
45
  # @pwss add@ will add a new entry to the file
61
- # @pwss get string@ will retrieve all entries whose *title* contains @string@ and make the password of the chosen entry available in the clipboard for a given period (the default is 30 seconds; the option @-w@ controls the amount of time the password is available)
46
+ # @pwss get string@ will retrieve all entries whose *title* contains @string@, let the user choose an entry, and make the password of the chosen entry available in the clipboard for a given period (the default is 30 seconds; the option @-w@ controls the amount of time the password is available)
62
47
 
63
48
  *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
49
 
@@ -68,17 +53,17 @@ A typical usage scenario is the following:
68
53
 
69
54
  *Do not forget to use the extension @.enc@, if your password file to be encrypted.* (See "Encrypted and Plain files", below.)
70
55
 
71
- *Controlling how long passwords are made available* Use the @-w@ option to determine how long the password is made available in the clipboard. For instance:
56
+ *Controlling how long passwords are made available for* Use the @-w@ option to determine how long the password is made available in the clipboard. For instance:
72
57
 
73
58
  bc. $ pwss get my_email -w 3
74
59
 
75
- will retrieve entry whose title is @my_email@ and make the password available in the clipboard for @3@ seconds.
60
+ will retrieve a user selected entry whose title is @my_email@ and make the password available in the clipboard for @3@ seconds.
76
61
 
77
62
  Use @0@ to keep the password in the clipboard till a key is pressed.
78
63
 
79
64
  *Automatically Generated Password* pwss can automatically generate passwords for entries which are added or updated.
80
65
 
81
- The generated passwords are random sequences of chars and symbols and no attempt is made to make them readable or simpler to remember. You can use the @-a@ option to limit the generator to use only digits and letters ([0-9a-zA-Z]): this is useful, for instance, if the website you're generating the password for does not accept certain classes of characters.
66
+ The generated passwords are random sequences of chars and symbols. No attempt is made to make them readable or simpler to remember. You can use the @-a@ option to limit the generator to use only digits and letters ([0-9a-zA-Z]): this is useful, for instance, for websites which do accept certain classes of characters.
82
67
 
83
68
  Use the @-g LENGTH@ option to determine the password length.
84
69
 
@@ -102,7 +87,7 @@ By contrast,
102
87
 
103
88
  bc. $ pwss init -f a.yaml
104
89
 
105
- Encrypting sensitive information is a good idea. (Just in case you were looking for a witty statement.) However, if you use @pwss@ to store non-critical infomation, prefer to edit the password safe with a text editor, or use another application for managing encryption and decryption, using @pwss@ with the file in plain format might be more convenient.
90
+ Encrypting sensitive information is a good idea. (Just in case you were expecting a witty statement.) However, if you use @pwss@ to store non-critical infomation, prefer to edit the password safe with a text editor, or use another application for managing encryption and decryption, using @pwss@ with the file in plain format might be more convenient.
106
91
 
107
92
  *Moving from plain to encrypted.* You can use the @encrypt@ and @decrypt@ commands at any time to move from the plain to the encrypted format.
108
93
 
@@ -163,6 +148,15 @@ Notice that only @title@ and @password@ are required.
163
148
 
164
149
  h2. Changelog
165
150
 
151
+ * *Release 0.5.0* This is mainly a release focused on improving interaction. Small changes to the command syntax and improved exit conditions. In details:
152
+ ** *add* now accepts the title in the command line. For instance @pwss add New Entry@
153
+ ** *new* is now an alias for the *add* command
154
+ ** *update* now requires to specify the field: use @-p@, @--password@, or @--field password@, if you want to update the password
155
+ ** show the usage summary, if no arguments are given
156
+ ** *C-c* is now trapped and properly managed (clearing the clipboard)
157
+ ** decryption errors are now properly managed
158
+ ** the content of the clipboard is now restored after the waiting period
159
+
166
160
  * *Release 0.4.0*
167
161
  ** New @--stdout@ option will output password to standard output (useful for integration with other applications)
168
162
  ** New @--select N@ option will automatically select the @N@th entry (rather than asking the user to select an entry).
data/bin/pwss CHANGED
@@ -24,6 +24,47 @@ def file2string filename
24
24
  [string, password]
25
25
  end
26
26
 
27
+ # this is to support command aliases: add and new
28
+ # maybe not the the best of places where to define a function
29
+ def add opts, args
30
+ filename = opts.to_hash[:filename] || DEFAULT_FILENAME
31
+ waiting = opts.to_hash[:wait] || DEFAULT_SECS
32
+ length = opts.to_hash[:generate] || 0
33
+ type = opts.to_hash[:type] || "Entry"
34
+ alnum = opts.to_hash[:alnum]
35
+
36
+ default_title = args.join(" ")
37
+ string, password = file2string filename
38
+
39
+ puts "Adding #{default_title != "" ? "entry '" + default_title + "'" : "an entry"} of type '#{type}' to #{filename}"
40
+ # ask for a new entry
41
+ if default_title != "" then
42
+ overrides = {"title" => ["Readline.readline('title (leave empty for \"#{default_title}\"): ')", "'#{default_title}'"]}
43
+ end
44
+ pe = eval("Pwss::" + type).new
45
+ pe.ask length, alnum, overrides
46
+
47
+ # add the entry to the safe
48
+ entries = YAML::load(string) || Array.new
49
+ entries << pe.entry
50
+
51
+ # check status of input file and encrypt if necessary
52
+ if FileOps::encrypted? filename then
53
+ new_string = Cipher::encrypt entries.to_yaml, password
54
+ else
55
+ new_string = entries.to_yaml
56
+ end
57
+
58
+ FileOps::backup filename
59
+ FileOps::save filename, new_string
60
+
61
+ puts "Entry added."
62
+
63
+ # make password available in the clipboard, if there is a password to make available
64
+ if pe.entry["password"]
65
+ Cipher.password_to_clipboard pe.entry["password"], waiting
66
+ end
67
+ end
27
68
 
28
69
  version = Pwss::VERSION
29
70
  man = <<EOS
@@ -39,13 +80,13 @@ DESCRIPTION
39
80
 
40
81
  Features:
41
82
 
42
- * PWSS manages password files. A password file store passwords and other
43
- sensitive information
83
+ * PWSS manages password *files*:
84
+ - A password file can store different entries (password and other
85
+ sensitive information)
86
+ - The user can manage different password files (e.g., work, personal)
44
87
 
45
- * Entries in a password file can be of the following pre-defined types:
46
- Entry, CreditCard, BankAccount, SoftwareLicense
47
-
48
- * Information stored for each type:
88
+ * Entries in a password file can be any of Entry, CreditCard, BankAccount,
89
+ SoftwareLicense. Each type stores a different set of infos:
49
90
 
50
91
  - Entry: title, username, password, url, description
51
92
  - CreditCard: title, issuer, name_on_card, card_number, valid_from,
@@ -54,13 +95,11 @@ DESCRIPTION
54
95
  - SoftwareLicense: title, version, license_number, licensed_to,
55
96
  email, purchased_on
56
97
 
57
- * CRUD (create, read, update, delete) commands are available to
58
- operate on entries and password files
59
-
60
- * The user can manage different password files (e.g., work, personal)
61
98
  * Password files can be encrypted
99
+
62
100
  * Encrypted password files can be decrypted, for instance, to batch process
63
101
  entries, to migrate to another tool, or to manually edit entries
102
+
64
103
  * Entries are human-readable (and editable), when the password file is not
65
104
  encrypted
66
105
 
@@ -69,7 +108,7 @@ EXAMPLES
69
108
 
70
109
  # scenario
71
110
  pwss init -f a.enc # generate an encrypted safe a.enc
72
- pwss add -f a.enc -g 16 -a # add an entry (generating a password)
111
+ pwss add -f a.enc -g 16 -a # add an entry (pwss will generate a random 16-char password)
73
112
  pwss get -f a.enc my secret account # find an entry
74
113
 
75
114
  VERSION
@@ -80,6 +119,7 @@ LICENSE
80
119
 
81
120
  SEE ALSO
82
121
  pwss -h
122
+ pwss man
83
123
  https://github.com/avillafiorita/pwss
84
124
  EOS
85
125
 
@@ -88,7 +128,8 @@ EOS
88
128
  #
89
129
  # Main App Starts Here!
90
130
  #
91
- opts = Slop.parse :help => true do
131
+ cmd = nil
132
+ opts = Slop.parse :help => true, :strict => true do
92
133
  # the default filename
93
134
  DEFAULT_FILENAME = File.join(Dir.home, ".pwss.yaml.enc")
94
135
  # the default number of seconds password is available in the clipboard
@@ -98,15 +139,17 @@ opts = Slop.parse :help => true do
98
139
 
99
140
  ##############################################################################
100
141
  on "-v", "--version", 'Print version information' do
142
+ cmd = "version"
101
143
  puts "pwss version #{version}"
102
144
  end
103
145
 
104
146
  ##############################################################################
105
- command :help do
106
- banner "pwss help"
147
+ command :man do
148
+ banner "pwss man"
107
149
  description "Print detailed information about how to use pwss"
108
150
 
109
151
  run do |_, _|
152
+ cmd = "man"
110
153
  puts man
111
154
  end
112
155
  end
@@ -119,6 +162,7 @@ opts = Slop.parse :help => true do
119
162
  on "-f", "--filename=", "Password file to create. Use extension '.enc' to encrypt it."
120
163
 
121
164
  run do |opts, args|
165
+ cmd = "init"
122
166
  filename = opts.to_hash[:filename] || DEFAULT_FILENAME
123
167
 
124
168
  if File.exists?(filename)
@@ -151,6 +195,8 @@ opts = Slop.parse :help => true do
151
195
  on "-f", "--filename=", "Password file to use."
152
196
 
153
197
  run do |opts, args|
198
+ cmd = "list"
199
+
154
200
  filename = opts.to_hash[:filename] || DEFAULT_FILENAME
155
201
 
156
202
  string, _ = file2string filename
@@ -171,6 +217,8 @@ opts = Slop.parse :help => true do
171
217
  on "--select=", "Select the N-th matching entry", as: Integer
172
218
 
173
219
  run do |opts, args|
220
+ cmd = "get"
221
+
174
222
  filename = opts.to_hash[:filename] || DEFAULT_FILENAME
175
223
  waiting = opts.to_hash[:wait] || DEFAULT_SECS
176
224
  stdout_opt = opts.to_hash[:stdout]
@@ -191,51 +239,38 @@ opts = Slop.parse :help => true do
191
239
 
192
240
  ##############################################################################
193
241
  command :add do
194
- banner "pwss add [options]"
242
+ banner "pwss add [options] [entry title]"
195
243
  description "Add an entry and copy its password in the clipboard"
196
244
 
197
- on "-f", "--filename=", "Password file to use."
245
+ on "-f", "--filename=", "Password file to use"
198
246
  on "-w", "--wait=", "Seconds password is available in the clipboard (0 = interactive)", as: Integer
199
-
247
+
200
248
  on "-e", "--entry=", "Create an entry of type TYPE (Entry, CreditCard, BankAccount, SoftwareLicense).\n Default to 'Entry', which is good enough for websites credentials"
201
249
 
202
250
  on "-g", "--generate=", "Generate a random password of given length.", as: Integer
203
251
  on "-a", "--alnum", "Use only alphanumeric chars for the randomly generated password"
204
252
 
205
253
  run do |opts, args|
206
- filename = opts.to_hash[:filename] || DEFAULT_FILENAME
207
- waiting = opts.to_hash[:wait] || DEFAULT_SECS
208
- length = opts.to_hash[:generate] || 0
209
- type = opts.to_hash[:type] || "Entry"
210
- alnum = opts.to_hash[:alnum]
211
-
212
- string, password = file2string filename
213
-
214
- puts "Adding an entry of type: #{type}"
215
- # ask for a new entry
216
- pe = eval("Pwss::" + type).new
217
- pe.ask length, alnum
254
+ cmd = "add"
255
+ add opts, args
256
+ end
257
+ end
218
258
 
219
- # add the entry to the safe
220
- entries = YAML::load(string) || Array.new
221
- entries << pe.entry
259
+ command :new do
260
+ banner "pwss new [options] [entry title]"
261
+ description "An alias for add"
222
262
 
223
- # check status of input file and encrypt if necessary
224
- if FileOps::encrypted? filename then
225
- new_string = Cipher::encrypt entries.to_yaml, password
226
- else
227
- new_string = entries.to_yaml
228
- end
263
+ on "-f", "--filename=", "Password file to use"
264
+ on "-w", "--wait=", "Seconds password is available in the clipboard (0 = interactive)", as: Integer
265
+
266
+ on "-e", "--entry=", "Create an entry of type TYPE (Entry, CreditCard, BankAccount, SoftwareLicense).\n Default to 'Entry', which is good enough for websites credentials"
229
267
 
230
- FileOps::backup filename
231
- FileOps::save filename, new_string
268
+ on "-g", "--generate=", "Generate a random password of given length.", as: Integer
269
+ on "-a", "--alnum", "Use only alphanumeric chars for the randomly generated password"
232
270
 
233
- puts "Entry added."
234
-
235
- # make password available in the clipboard, if there is a password to make available
236
- if pe.entry["password"]
237
- Cipher.password_to_clipboard pe.entry["password"], waiting
238
- end
271
+ run do |opts, args|
272
+ cmd = "new"
273
+ add opts, args
239
274
  end
240
275
  end
241
276
 
@@ -244,29 +279,37 @@ opts = Slop.parse :help => true do
244
279
  banner "pwss update [options] string"
245
280
  description "Update given field of user-selected entry matching <string>"
246
281
 
247
- on "-f", "--filename=", "Password file to use."
248
- on "-w", "--wait=", "Seconds password is available in the clipboard (0 = interactive).", as: Integer
249
- on "-g", "--generate=", "Generate a random password of given length.", as: Integer
250
- on "-a", "--alnum", "Use only alphanumeric chars for the randomly generated password."
251
- on '--field=', 'Field to update (if not specified, update the password field).'
282
+ on "-f", "--filename=", "Password file to use"
283
+ on "-w", "--wait=", "Seconds password is available in the clipboard (0 = interactive)", as: Integer
284
+ on "-g", "--generate=", "Generate a random password of given length", as: Integer
285
+ on "-a", "--alnum", "Use only alphanumeric chars for the randomly generated password"
286
+ on "--field=", 'Field to update'
287
+ on "-p", "--password", "an alias for --field password"
252
288
 
253
289
  run do |opts, args|
290
+ cmd = "update"
291
+
254
292
  filename = opts.to_hash[:filename] || DEFAULT_FILENAME
255
293
  waiting = opts.to_hash[:wait] || DEFAULT_SECS
256
294
  length = opts.to_hash[:generate] || 0
257
295
  alnum = opts.to_hash[:alnum]
258
- field = opts.to_hash[:field]
296
+ field = opts.to_hash[:password] ? "password" : opts.to_hash[:field]
297
+
298
+ if not field then
299
+ puts "Please specify a field to update (used --field ... or -p)"
300
+ exit 1
301
+ end
259
302
 
260
303
  string, password = file2string filename
261
304
 
262
305
  # load entries and update
263
306
  entries = YAML::load(string) || Array.new
264
307
 
265
- if field then
266
- entries, entry_password = Pwss::update_field args.join(" "), entries, field
267
- else
308
+ if field == "password" then
268
309
  # update password
269
310
  entries, entry_password = Pwss::update args.join(" "), entries, length, alnum
311
+ else
312
+ entries, entry_password = Pwss::update_field args.join(" "), entries, field
270
313
  end
271
314
 
272
315
  # check status of input file and encrypt if necessary
@@ -300,6 +343,8 @@ opts = Slop.parse :help => true do
300
343
  on "-f", "--filename=", "Password file to create. Use extension '.enc' to encrypt it."
301
344
 
302
345
  run do |opts, args|
346
+ cmd = "destroy"
347
+
303
348
  filename = opts.to_hash[:filename] || DEFAULT_FILENAME
304
349
 
305
350
  string, password = file2string filename
@@ -333,6 +378,8 @@ opts = Slop.parse :help => true do
333
378
  on "-f", "--filename=", "Password file to encrypt. Write to <file>.enc."
334
379
 
335
380
  run do |opts, _|
381
+ cmd = "encrypt"
382
+
336
383
  filename = opts.to_hash[:filename] || DEFAULT_FILENAME.sub(/\.enc$/, "")
337
384
 
338
385
  if not File.exists?(filename)
@@ -364,6 +411,8 @@ opts = Slop.parse :help => true do
364
411
  on "-f", "--filename=", "Password file to decrypt. Write to <file>, without '.enc'."
365
412
 
366
413
  run do |opts, _|
414
+ cmd = "decrypt"
415
+
367
416
  filename = opts.to_hash[:filename] || DEFAULT_FILENAME
368
417
 
369
418
  if not File.exists?(filename)
@@ -380,7 +429,7 @@ opts = Slop.parse :help => true do
380
429
  FileOps::backup dec_filename
381
430
  puts "Warning: existing #{dec_filename} backupped to #{dec_filename}~"
382
431
  end
383
-
432
+
384
433
  FileOps::save dec_filename, decrypted
385
434
  puts "A decrypted copy now lives in #{dec_filename}"
386
435
  puts "You might want to check everything is ok and delete #{filename}, if you wish."
@@ -388,3 +437,7 @@ opts = Slop.parse :help => true do
388
437
  end
389
438
 
390
439
  end
440
+
441
+ if cmd == nil then
442
+ puts opts
443
+ end
data/lib/pwss.rb CHANGED
@@ -93,12 +93,13 @@ module Pwss
93
93
  end
94
94
 
95
95
  printf "\nVarious matches." if found.size > 1
96
+
96
97
  printf "\nSelect entry by ID (0..#{found.size-1}); -1 or empty string to exit: "
97
-
98
- id = STDIN.gets.chomp.to_i
98
+ response = Readline.readline
99
+ id = response == "" ? -1 : response.to_i
99
100
  while (id < -1 or id >= found.size)
100
101
  printf "Select entry by ID (0..#{found.size-1}); -1 or empty string to exit: "
101
- response = STDIN.gets.chomp
102
+ response = Readline.readline
102
103
  id = response == "" ? -1 : response.to_i
103
104
  end
104
105
  if id == -1 then
data/lib/pwss/cipher.rb CHANGED
@@ -10,7 +10,12 @@ module Cipher
10
10
  end
11
11
 
12
12
  def self.decrypt string, password
13
- Encryptor.decrypt(:value => string, :key => password)
13
+ begin
14
+ Encryptor.decrypt(:value => string, :key => password)
15
+ rescue Exception => e
16
+ puts "Unable to decrypt. Exiting"
17
+ exit 1
18
+ end
14
19
  end
15
20
 
16
21
  # Ask for a password fom the command line
@@ -47,17 +52,23 @@ module Cipher
47
52
  # make the password available to the clipboard.
48
53
  #
49
54
  def self.password_to_clipboard password, counter = 30
55
+ old_clipboard = `pbpaste`
50
56
  system("printf \"%s\" \"#{password}\" | pbcopy")
51
57
 
52
- if counter <= 0
53
- puts "\nPassword available in clipboard: press enter when you are done."
54
- STDIN.getc
55
- else
56
- puts "\nPassword available in clipboard for #{counter} seconds."
57
- sleep(counter)
58
+ begin
59
+ if counter <= 0
60
+ STDIN.flush
61
+ puts "\nPassword available in clipboard: press enter when you are done."
62
+ STDIN.getc
63
+ else
64
+ puts "\nPassword available in clipboard for #{counter} seconds."
65
+ sleep(counter)
66
+ end
67
+ system("printf \"#{old_clipboard}\" | pbcopy")
68
+ rescue Exception => e
69
+ system("printf \"#{old_clipboard}\" | pbcopy")
70
+ puts "Clipboard restored. Exiting."
58
71
  end
59
-
60
- system("echo ahahahahaha | pbcopy")
61
72
  end
62
73
 
63
74
  private
data/lib/pwss/entry.rb CHANGED
@@ -17,7 +17,7 @@ module Pwss
17
17
  @entry = Hash.new
18
18
 
19
19
  # the fields of an entry, together with:
20
- # - the function to ask the
20
+ # - the function to ask the value
21
21
  # - the default value
22
22
  @fields = {
23
23
  "title" => ["Readline.readline('title: ')", "'title'"],
@@ -32,9 +32,15 @@ module Pwss
32
32
 
33
33
  # interactively ask from command line all fields specified in FIELDS
34
34
  # arguments length and alnum are for password generation
35
- def ask length = 8, alnum = true
35
+ def ask length = 8, alnum = true, overrides = {}
36
+ @fields.merge! overrides
36
37
  @fields.keys.each do |key|
37
- @entry[key] = (eval @fields[key][INPUT_F]) || (eval @fields[key][DEFAULT])
38
+ value = eval @fields[key][INPUT_F]
39
+ if value == nil or value == "" then
40
+ @entry[key] = eval @fields[key][DEFAULT]
41
+ else
42
+ @entry[key] = value
43
+ end
38
44
  end
39
45
  end
40
46
 
data/lib/pwss/fileops.rb CHANGED
@@ -16,7 +16,7 @@ module FileOps
16
16
  file = File.open(filename, "wb")
17
17
  file.write data
18
18
  file.close
19
- puts "Password safe #{filename} updated."
19
+ # puts "Password safe #{filename} updated."
20
20
  end
21
21
 
22
22
  # check if the extension is ".enc"
data/lib/pwss/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pwss
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.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.4.0
4
+ version: 0.5.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-05-01 00:00:00.000000000 Z
11
+ date: 2015-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -129,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
129
  version: '0'
130
130
  requirements: []
131
131
  rubyforge_project:
132
- rubygems_version: 2.2.2
132
+ rubygems_version: 2.4.5
133
133
  signing_key:
134
134
  specification_version: 4
135
135
  summary: A password manager in the spirit of pwss