kbsecret 0.6.1 → 0.6.2

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: 78a85052182c04cc8a63759dfe1ffebcab9febf1
4
- data.tar.gz: 57cf4570ac91c7ef25a3533f7ac1750d7b1dd510
3
+ metadata.gz: d8b8f4651e863a5f86291010e03b05ce5755f1c2
4
+ data.tar.gz: d8c56ff9124e244f352e3fe02101ac7e85c62314
5
5
  SHA512:
6
- metadata.gz: 4f98b14697eae67ab73822f4629793da398087003d701f74b123415a5f20cdf666919a886ef599564505bd5fe49f46f767dcd6656ca851f5351ecaa3356a74e3
7
- data.tar.gz: 02ceed6620e31589f595ef39fdd50bb669739845d1ef1fb5c74a7e0f4c0b68e760d554207db59aaf2468b49ce936929955e420de1703b84c5605ee9da7eb59d4
6
+ metadata.gz: 23ddcab27f3bce089b8905a147d85ec5e8abfa053f157a02ef08eb21413e021aa3d7a66fbe678a21efc45240b979820a2a6fc09ecf6bd6ec61ebcdaa9745c2be
7
+ data.tar.gz: da1bbc994c6e861e8f3a5f9092c5dab9541b2029d4b6306b11d3c4c84bbbc7facf2046eb03e6fd6fb67658e94e9ef6c66e1ed2a0b21b3d245e0dc9c918f8d8b0
@@ -24,11 +24,10 @@ cmd = CLI.new do
24
24
  ensure_session!
25
25
  end
26
26
 
27
- session = Session.new label: cmd.opts[:session]
28
27
  label = cmd.args[:label]
29
- record = session[label]
28
+ record = cmd.session[label]
30
29
 
31
- CLI.die "No such record." unless record
30
+ cmd.die "No such record." unless record
32
31
 
33
32
  field_values = record.class.data_fields.map { |f| record.send f }
34
33
  field_pairs = record.class.data_fields.zip(field_values)
data/bin/kbsecret-env CHANGED
@@ -24,8 +24,7 @@ cmd = CLI.new do
24
24
  ensure_session!
25
25
  end
26
26
 
27
- session = Session.new label: cmd.opts[:session]
28
- records = session.records :environment
27
+ records = cmd.session.records :environment
29
28
 
30
29
  selected_records = if cmd.opts.all?
31
30
  records
@@ -35,6 +34,8 @@ selected_records = if cmd.opts.all?
35
34
  end
36
35
  end
37
36
 
37
+ cmd.warn "No records selected." if selected_records.empty?
38
+
38
39
  selected_records.each do |record|
39
40
  if cmd.opts.value_only?
40
41
  puts record.value
data/bin/kbsecret-list CHANGED
@@ -20,9 +20,7 @@ cmd = CLI.new do
20
20
  ensure_session!
21
21
  end
22
22
 
23
- session = Session.new label: cmd.opts[:session]
24
-
25
- records = session.records cmd.opts[:type]
23
+ records = cmd.session.records cmd.opts[:type]
26
24
 
27
25
  records.each do |record|
28
26
  puts record.label
data/bin/kbsecret-login CHANGED
@@ -25,8 +25,7 @@ cmd = CLI.new do
25
25
  ensure_session!
26
26
  end
27
27
 
28
- session = Session.new label: cmd.opts[:session]
29
- records = session.records :login
28
+ records = cmd.session.records :login
30
29
 
31
30
  selected_records = if cmd.opts.all?
32
31
  records
@@ -36,6 +35,8 @@ selected_records = if cmd.opts.all?
36
35
  end
37
36
  end
38
37
 
38
+ cmd.warn "No records selected." if selected_records.empty?
39
+
39
40
  selected_records.each do |record|
40
41
  if cmd.opts.terse?
41
42
  fields = %i[label username password].map { |m| record.send(m) }
data/bin/kbsecret-new CHANGED
@@ -33,14 +33,12 @@ cmd = CLI.new do
33
33
  ensure_session!
34
34
  end
35
35
 
36
- session = Session.new label: cmd.opts[:session]
37
-
38
36
  type = cmd.args[:type]
39
37
  label = cmd.args[:label]
40
38
  resolved_type = TYPE_ALIASES[type]
41
39
 
42
- if session.record?(label) && !cmd.opts.force?
43
- CLI.die "Refusing to overwrite an existing record without --force."
40
+ if cmd.session.record?(label) && !cmd.opts.force?
41
+ cmd.die "Refusing to overwrite an existing record without --force."
44
42
  end
45
43
 
46
44
  fields = if $stdin.tty? && !cmd.opts.args?
@@ -55,7 +53,7 @@ fields = if $stdin.tty? && !cmd.opts.args?
55
53
  end
56
54
 
57
55
  begin
58
- session.add_record(resolved_type, label, *fields)
56
+ cmd.session.add_record(resolved_type, label, *fields)
59
57
  rescue => e
60
- CLI.die "#{e}."
58
+ cmd.die "#{e}."
61
59
  end
@@ -23,7 +23,7 @@ end
23
23
  session_label = cmd.opts[:label]
24
24
 
25
25
  if Config.session?(session_label) && !cmd.opts.force?
26
- CLI.die "Refusing to overwrite an existing session without --force."
26
+ cmd.die "Refusing to overwrite an existing session without --force."
27
27
  end
28
28
 
29
29
  session_hash = {
data/bin/kbsecret-pass CHANGED
@@ -24,12 +24,11 @@ cmd = CLI.new do
24
24
  ensure_session!
25
25
  end
26
26
 
27
- session = Session.new label: cmd.opts[:session]
28
27
  label = cmd.args[:label]
29
- record = session[label]
28
+ record = cmd.session[label]
30
29
 
31
- CLI.die "No such record." unless record
32
- CLI.die "'#{record}' is not a login record." unless record.type == :login
30
+ cmd.die "No such record." unless record
31
+ cmd.die "'#{record}' is not a login record." unless record.type == :login
33
32
 
34
33
  if cmd.opts.clipboard?
35
34
  Clipboard.copy record.password
@@ -22,11 +22,10 @@ cmd = CLI.new do
22
22
  ensure_session!
23
23
  end
24
24
 
25
- session = Session.new label: cmd.opts[:session]
26
25
  label = cmd.args[:label]
27
- record = session[label]
26
+ record = cmd.session[label]
28
27
 
29
- CLI.die "No such record." unless record
28
+ cmd.die "No such record." unless record
30
29
 
31
30
  Process.spawn("#{ENV["EDITOR"]} #{record.path}")
32
31
  record.sync! # just to bump the timestamp
data/bin/kbsecret-rm CHANGED
@@ -26,16 +26,15 @@ cmd = CLI.new do
26
26
  ensure_session!
27
27
  end
28
28
 
29
- label = cmd.args[:label]
30
- session = Session.new label: cmd.opts[:session]
29
+ label = cmd.args[:label]
31
30
 
32
- CLI.die "I can't delete a nonexistent record." unless session.record? label
31
+ cmd.die "Can't delete a nonexistent record." unless cmd.session.record? label
33
32
 
34
33
  tty = TTY::Prompt.new
35
34
 
36
35
  confirm = if cmd.opts.interactive?
37
- tty.yes?("Delete '#{label}' from the #{session.label} session?")
36
+ tty.yes?("Delete '#{label}' from the #{cmd.session.label} session?")
38
37
  else true
39
38
  end
40
39
 
41
- session.delete_record(label) if confirm
40
+ cmd.session.delete_record(label) if confirm
@@ -24,7 +24,6 @@ end
24
24
 
25
25
  label = cmd.args[:session]
26
26
 
27
- session = Session.new label: label
28
- session.unlink! if cmd.opts.delete?
27
+ cmd.session.unlink! if cmd.opts.delete?
29
28
 
30
29
  Config.deconfigure_session label
@@ -18,7 +18,7 @@ end
18
18
 
19
19
  Config.session_labels.each do |sess_name|
20
20
  session_hash = Config.session(sess_name)
21
- session = Session.new label: sess_name
21
+ session = cmd.guard { Session.new label: sess_name }
22
22
 
23
23
  puts sess_name
24
24
 
@@ -23,18 +23,17 @@ cmd = CLI.new do
23
23
  ensure_session!
24
24
  end
25
25
 
26
- session = Session.new label: cmd.opts[:session]
27
26
  label = cmd.args[:label]
28
27
  filename = cmd.args[:filename]
29
28
 
30
- CLI.die "Missing a record label to create." unless label
29
+ cmd.die "Missing a record label to create." unless label
31
30
 
32
31
  contents = if filename.empty? || filename == "-"
33
32
  STDIN.read
34
33
  elsif File.file?(filename)
35
34
  File.read(filename)
36
35
  else
37
- CLI.die "That file doesn't exist."
36
+ cmd.die "That file doesn't exist."
38
37
  end
39
38
 
40
- session.add_record(:unstructured, label, contents)
39
+ cmd.session.add_record(:unstructured, label, contents)
data/bin/kbsecret-todo CHANGED
@@ -23,26 +23,25 @@ cmd = CLI.new do
23
23
  ensure_session!
24
24
  end
25
25
 
26
- session = Session.new label: cmd.opts[:session]
27
26
  label = cmd.args[:label]
28
- todo = session[label]
27
+ todo = cmd.session[label]
29
28
 
30
- CLI.die "No such record." unless todo
31
- CLI.die "'#{todo}' is not a todo record." unless todo.type == :todo
29
+ cmd.die "No such record." unless todo
30
+ cmd.die "'#{todo}' is not a todo record." unless todo.type == :todo
32
31
 
33
32
  case cmd.args[:command]
34
33
  when "start"
35
- CLI.die "That task is already started!" if todo.started?
34
+ cmd.die "That task is already started!" if todo.started?
36
35
  todo.start!
37
36
  puts "#{todo.label}: '#{todo.todo}' marked as started at #{todo.start}"
38
37
  when "suspend"
39
- CLI.die "That task is already suspended!" if todo.suspended?
38
+ cmd.die "That task is already suspended!" if todo.suspended?
40
39
  todo.suspend!
41
40
  puts "#{todo.label}: '#{todo.todo}' marked as suspended at #{todo.stop}"
42
41
  when "complete"
43
- CLI.die "That task is already completed!" if todo.completed?
42
+ cmd.die "That task is already completed!" if todo.completed?
44
43
  todo.complete!
45
44
  puts "#{todo.label}: '#{todo.todo}' marked as completed at #{todo.stop}"
46
45
  else
47
- CLI.die "Unknown action: #{command}."
46
+ cmd.die "Unknown action: #{command}."
48
47
  end
data/lib/kbsecret/cli.rb CHANGED
@@ -7,12 +7,18 @@ require "dreck"
7
7
  module KBSecret
8
8
  # An encapsulation of useful methods for kbsecret's CLI.
9
9
  class CLI
10
- # @return [Slop::Result] the result of option parsing
10
+ # @return [Slop::Result, nil] the result of option parsing, if requested
11
+ # via {#slop}
11
12
  attr_reader :opts
12
13
 
13
- # @return [Dreck::Result] the result of trailing argument parsing
14
+ # @return [Dreck::Result, nil] the result of trailing argument parsing, if
15
+ # requested via {#dreck}
14
16
  attr_reader :args
15
17
 
18
+ # @return [Session, nil] the session associated with the command, if requested
19
+ # via {#ensure_session!}
20
+ attr_reader :session
21
+
16
22
  # Encapsulate both the options and trailing arguments passed to a `kbsecret` command.
17
23
  # @example
18
24
  # cmd = KBSecret::CLI.new do
@@ -32,11 +38,7 @@ module KBSecret
32
38
  # cmd.args # => Dreck::Result
33
39
  def initialize(&block)
34
40
  @trailing = ARGV
35
- @opts = nil
36
- @args = nil
37
- instance_eval(&block)
38
- rescue => e
39
- self.class.die "#{e.to_s.capitalize}."
41
+ guard { instance_eval(&block) }
40
42
  end
41
43
 
42
44
  # Parse options for a kbsecret utility, adding some default options for
@@ -92,6 +94,18 @@ module KBSecret
92
94
  def ensure_session!(where = :option)
93
95
  label = where == :option ? @opts[:session] : @args[:session]
94
96
  raise "Unknown session: '#{label}'" unless Config.session? label
97
+ @session = Session.new label: label
98
+ end
99
+
100
+ # "Guard" a block by propagating any exceptions as fatal (unrecoverable)
101
+ # errors.
102
+ # @return [Object] the result of the block
103
+ # @note This should be used to guard chunks of code that are likely to
104
+ # raise exceptions. The amount of code guarded should be minimized.
105
+ def guard
106
+ yield
107
+ rescue => e
108
+ die "#{e.to_s.capitalize}."
95
109
  end
96
110
 
97
111
  # Print an informational message if verbose output has been enabled.
@@ -124,7 +138,6 @@ module KBSecret
124
138
  # @param msg [String] the message to print
125
139
  # @return [void]
126
140
  # @note This method does not return!
127
- # @deprecated use {#die} instead.
128
141
  def die(msg)
129
142
  pretty = "#{"Fatal".red}: #{msg}"
130
143
  abort pretty
@@ -5,6 +5,14 @@ module KBSecret
5
5
  class KBSecretError < RuntimeError
6
6
  end
7
7
 
8
+ # Raised during record loading if a particular file can't be loaded
9
+ class RecordLoadError < KBSecretError
10
+ def initialize(path)
11
+ base = File.basename(path)
12
+ super "Failed to load record in file: #{base}"
13
+ end
14
+ end
15
+
8
16
  # Raised during record creation if an unknown record type is requested.
9
17
  class RecordTypeUnknownError < KBSecretError
10
18
  def initialize(type)
@@ -44,6 +44,8 @@ module KBSecret
44
44
  hsh = JSON.parse(File.read(path), symbolize_names: true)
45
45
  klass = record_classes.find { |c| c.type == hsh[:type].to_sym }
46
46
  klass&.load!(session, hsh)
47
+ rescue
48
+ raise RecordLoadError, path
47
49
  end
48
50
  end
49
51
  end
data/lib/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module KBSecret
4
4
  # kbsecret's current version
5
- VERSION = "0.6.1"
5
+ VERSION = "0.6.2"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kbsecret
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Woodruff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-04 00:00:00.000000000 Z
11
+ date: 2017-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fpm