kbsecret 0.6.1 → 0.6.2

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: 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