kbsecret 0.5.4 → 0.5.5

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: d434d011a5ebe51e4a0f41d54841808ba134cccb
4
- data.tar.gz: caed655325cafac65f949dd221cb67eec29693a6
3
+ metadata.gz: a3c46fd341e3a2db07a7278ce4ef7e5e5f99f1ee
4
+ data.tar.gz: 9e236b7d3ad0c3396c76c85b3aa12b7f253376b9
5
5
  SHA512:
6
- metadata.gz: 483587fd9c6d2053bc579035c581119780e531acb57970378202d77749043e4e6f0b9384ac2a62b6df217e9f04c46b95b56d732b0ca82e39d690d8e1030ce566
7
- data.tar.gz: c0d70ec9cd4d87c49ee2286f7d445298cbe2d7849d2090f09d5e501d79d74d24d78785d93920a65ae89b0816a30ac5169bc29d92fad180477f0812169549e356
6
+ metadata.gz: 2ebe7c26ed449cb6ba40979682f36efd77315c16e4b09ccaa5148665eda1b86a933c2a5f1362c598494f538729e13a65e2cd83a3dca880a94485dfd8294578fe
7
+ data.tar.gz: 8adbafa4fec10a672742c4f3a4e44e4bedd802ee20c0b38bab67b18f7de8c7bdd4d43f0f1bd84d0fdfcb572ce430dec9bf76279cc0906472b11234952258338d
data/README.md CHANGED
@@ -34,7 +34,7 @@ $ bundle install --path vendor/bundle
34
34
  $ RUBYLIB=./lib PATH=./bin:${PATH} bundle exec ./bin/kbsecret help
35
35
  ```
36
36
 
37
- You can also build installation packages:
37
+ You can also build (very experimental) installation packages:
38
38
 
39
39
  ```bash
40
40
  $ bundle exec make deb # for apt/dpkg based systems
@@ -115,4 +115,4 @@ Please feel free to contribute completion scripts for other shells!
115
115
  * zsh/fish completions
116
116
  * facility for moving sessions (add users, change session label, etc)
117
117
  * glob for available sessions instead of requiring explicit configuration
118
- * complete general record unit tests, individual unit tests for record types and utilities
118
+ * unit tests for command-line utilities
data/bin/kbsecret CHANGED
@@ -15,7 +15,9 @@ end.freeze
15
15
 
16
16
  ALIASES = Hash.new { |_, k| k }.update(
17
17
  "--help" => "help",
18
- "-h" => "help"
18
+ "-h" => "help",
19
+ "--version" => "version",
20
+ "-v" => "version"
19
21
  ).freeze
20
22
 
21
23
  ALL_CMDS = (ALIASES.keys + BUILTIN_CMDS + EXT_CMDS).freeze
@@ -3,7 +3,9 @@
3
3
 
4
4
  require "kbsecret"
5
5
 
6
- cmd = KBSecret::CLI.new do
6
+ include KBSecret
7
+
8
+ cmd = CLI.new do
7
9
  slop do |o|
8
10
  o.banner = <<~EOS
9
11
  Dump all fields for the given record.
@@ -14,7 +16,7 @@ cmd = KBSecret::CLI.new do
14
16
 
15
17
  o.string "-s", "--session", "the session name", default: :default
16
18
  o.bool "-x", "--terse", "output in field:value format"
17
- o.string "-i", "--ifs", "separate terse pairs with this string", default: ":"
19
+ o.string "-i", "--ifs", "separate terse pairs with this string", default: CLI.ifs
18
20
  end
19
21
 
20
22
  dreck do
@@ -22,12 +24,12 @@ cmd = KBSecret::CLI.new do
22
24
  end
23
25
  end
24
26
 
25
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
27
+ session = CLI.ensure_session cmd.opts[:session]
26
28
 
27
29
  label = cmd.args[:label]
28
30
  record = session[label]
29
31
 
30
- KBSecret::CLI.die "No such record." unless record
32
+ CLI.die "No such record." unless record
31
33
 
32
34
  field_values = record.class.data_fields.map { |f| record.send f }
33
35
  field_pairs = record.class.data_fields.zip(field_values)
data/bin/kbsecret-env CHANGED
@@ -3,7 +3,9 @@
3
3
 
4
4
  require "kbsecret"
5
5
 
6
- cmd = KBSecret::CLI.new do
6
+ include KBSecret
7
+
8
+ cmd = CLI.new do
7
9
  slop do |o|
8
10
  o.banner = <<~EOS
9
11
  Retrieve environment records in a source-able format.
@@ -26,7 +28,7 @@ cmd = KBSecret::CLI.new do
26
28
  end
27
29
  end
28
30
 
29
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
31
+ session = CLI.ensure_session cmd.opts[:session]
30
32
  records = session.records :environment
31
33
 
32
34
  selected_records = if cmd.opts.all?
data/bin/kbsecret-list CHANGED
@@ -3,7 +3,9 @@
3
3
 
4
4
  require "kbsecret"
5
5
 
6
- cmd = KBSecret::CLI.new do
6
+ include KBSecret
7
+
8
+ cmd = CLI.new do
7
9
  slop do |o|
8
10
  o.banner = <<~EOS
9
11
  List all secrets known to the specified session (or the default session).
@@ -18,7 +20,7 @@ cmd = KBSecret::CLI.new do
18
20
  end
19
21
  end
20
22
 
21
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
23
+ session = CLI.ensure_session cmd.opts[:session]
22
24
 
23
25
  records = session.records cmd.opts[:type]
24
26
 
data/bin/kbsecret-login CHANGED
@@ -3,7 +3,9 @@
3
3
 
4
4
  require "kbsecret"
5
5
 
6
- cmd = KBSecret::CLI.new do
6
+ include KBSecret
7
+
8
+ cmd = CLI.new do
7
9
  slop do |o|
8
10
  o.banner = <<~EOS
9
11
  Retrieve login records.
@@ -19,7 +21,7 @@ cmd = KBSecret::CLI.new do
19
21
  o.string "-s", "--session", "the session name", default: :default
20
22
  o.bool "-a", "--all", "retrieve all login records, not just listed ones"
21
23
  o.bool "-x", "--terse", "output in label:username:password format"
22
- o.string "-i", "--ifs", "separate terse fields with this string", default: ":"
24
+ o.string "-i", "--ifs", "separate terse fields with this string", default: CLI.ifs
23
25
  end
24
26
 
25
27
  dreck do
@@ -27,7 +29,7 @@ cmd = KBSecret::CLI.new do
27
29
  end
28
30
  end
29
31
 
30
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
32
+ session = CLI.ensure_session cmd.opts[:session]
31
33
  records = session.records :login
32
34
 
33
35
  selected_records = if cmd.opts.all?
data/bin/kbsecret-new CHANGED
@@ -5,10 +5,12 @@ require "kbsecret"
5
5
  require "abbrev"
6
6
  require "tty-prompt"
7
7
 
8
+ include KBSecret
9
+
8
10
  # allows for abbreviated types (e.g., `kbsecret new env ...`)
9
- TYPE_ALIASES = Abbrev.abbrev(KBSecret::Record.record_types).freeze
11
+ TYPE_ALIASES = Abbrev.abbrev(Record.record_types).freeze
10
12
 
11
- cmd = KBSecret::CLI.new do
13
+ cmd = CLI.new do
12
14
  slop do |o|
13
15
  o.banner = <<~EOS
14
16
  Create a new secret record.
@@ -35,19 +37,19 @@ cmd = KBSecret::CLI.new do
35
37
  end
36
38
  end
37
39
 
38
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
40
+ session = CLI.ensure_session cmd.opts[:session]
39
41
 
40
42
  type = cmd.args[:type]
41
43
  label = cmd.args[:label]
42
44
  resolved_type = TYPE_ALIASES[type]
43
45
 
44
46
  if session.record?(label) && !cmd.opts.force?
45
- KBSecret::CLI.die "Refusing to overwrite an existing record without --force."
47
+ CLI.die "Refusing to overwrite an existing record without --force."
46
48
  end
47
49
 
48
50
  fields = if $stdin.tty? && !cmd.opts.args?
49
51
  prompt = TTY::Prompt.new
50
- klass = KBSecret::Record.class_for(resolved_type)
52
+ klass = Record.class_for(resolved_type)
51
53
  klass.data_fields.map do |field|
52
54
  prompt.ask("#{field.capitalize}?", echo: cmd.opts.echo?)
53
55
  end
@@ -58,5 +60,5 @@ fields = if $stdin.tty? && !cmd.opts.args?
58
60
  begin
59
61
  session.add_record(resolved_type, label, *fields)
60
62
  rescue => e
61
- KBSecret::CLI.die "#{e}."
63
+ CLI.die "#{e}."
62
64
  end
@@ -4,7 +4,9 @@
4
4
  require "keybase"
5
5
  require "kbsecret"
6
6
 
7
- cmd = KBSecret::CLI.new do
7
+ include KBSecret
8
+
9
+ cmd = CLI.new do
8
10
  slop do |o|
9
11
  o.banner = <<~EOS
10
12
  Create a new session.
@@ -25,8 +27,8 @@ end
25
27
 
26
28
  session_label = cmd.opts[:label]
27
29
 
28
- if KBSecret::Config.session?(session_label) && !cmd.opts.force?
29
- KBSecret::CLI.die "Refusing to overwrite an existing session without --force."
30
+ if Config.session?(session_label) && !cmd.opts.force?
31
+ CLI.die "Refusing to overwrite an existing session without --force."
30
32
  end
31
33
 
32
34
  session_hash = {
@@ -34,4 +36,4 @@ session_hash = {
34
36
  root: cmd.opts[:root],
35
37
  }
36
38
 
37
- KBSecret::Config.configure_session(session_label, session_hash)
39
+ Config.configure_session(session_label, session_hash)
data/bin/kbsecret-pass CHANGED
@@ -4,7 +4,9 @@
4
4
  require "kbsecret"
5
5
  require "clipboard"
6
6
 
7
- cmd = KBSecret::CLI.new do
7
+ include KBSecret
8
+
9
+ cmd = CLI.new do
8
10
  slop do |o|
9
11
  o.banner = <<~EOS
10
12
  Retrieve a login record's password.
@@ -26,12 +28,12 @@ cmd = KBSecret::CLI.new do
26
28
  end
27
29
  end
28
30
 
29
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
31
+ session = CLI.ensure_session cmd.opts[:session]
30
32
  label = cmd.args[:label]
31
33
  record = session[label]
32
34
 
33
- KBSecret::CLI.die "No such record." unless record
34
- KBSecret::CLI.die "'#{record}' is not a login record." unless record.type == :login
35
+ CLI.die "No such record." unless record
36
+ CLI.die "'#{record}' is not a login record." unless record.type == :login
35
37
 
36
38
  if cmd.opts.clipboard?
37
39
  Clipboard.copy record.password
@@ -3,7 +3,9 @@
3
3
 
4
4
  require "kbsecret"
5
5
 
6
- cmd = KBSecret::CLI.new do
6
+ include KBSecret
7
+
8
+ cmd = CLI.new do
7
9
  slop do |o|
8
10
  o.banner = <<~EOS
9
11
  Edit the raw JSON of a record in $EDITOR.
@@ -23,11 +25,11 @@ cmd = KBSecret::CLI.new do
23
25
  end
24
26
  end
25
27
 
26
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
28
+ session = CLI.ensure_session cmd.opts[:session]
27
29
  label = cmd.args[:label]
28
30
  record = session[label]
29
31
 
30
- KBSecret::CLI.die "No such record." unless record
32
+ CLI.die "No such record." unless record
31
33
 
32
34
  Process.spawn("#{ENV["EDITOR"]} #{record.path}")
33
35
  record.sync! # just to bump the timestamp
data/bin/kbsecret-rm CHANGED
@@ -4,9 +4,11 @@
4
4
  require "kbsecret"
5
5
  require "tty-prompt"
6
6
 
7
+ include KBSecret
8
+
7
9
  $VERBOSE = nil # tty-prompt blasts us with irrelevant warnings on 2.4
8
10
 
9
- cmd = KBSecret::CLI.new do
11
+ cmd = CLI.new do
10
12
  slop do |o|
11
13
  o.banner = <<~EOS
12
14
  Delete a record.
@@ -25,10 +27,10 @@ cmd = KBSecret::CLI.new do
25
27
  end
26
28
 
27
29
  label = cmd.args[:label]
28
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
30
+ session = CLI.ensure_session cmd.opts[:session]
29
31
 
30
- KBSecret::CLI.die "I need the label of a record to delete." unless label
31
- KBSecret::CLI.die "I can't delete a nonexistent record." unless session.record? label
32
+ CLI.die "I need the label of a record to delete." unless label
33
+ CLI.die "I can't delete a nonexistent record." unless session.record? label
32
34
 
33
35
  tty = TTY::Prompt.new
34
36
 
@@ -3,7 +3,9 @@
3
3
 
4
4
  require "kbsecret"
5
5
 
6
- cmd = KBSecret::CLI.new do
6
+ include KBSecret
7
+
8
+ cmd = CLI.new do
7
9
  slop do |o|
8
10
  o.banner = <<~EOS
9
11
  Deconfigure (and optionally delete) a session.
@@ -26,7 +28,7 @@ end
26
28
 
27
29
  label = cmd.args[:label]
28
30
 
29
- session = KBSecret::CLI.ensure_session label
31
+ session = CLI.ensure_session label
30
32
  session.unlink! if cmd.opts.delete?
31
33
 
32
- KBSecret::Config.deconfigure_session label
34
+ Config.deconfigure_session label
@@ -3,7 +3,9 @@
3
3
 
4
4
  require "kbsecret"
5
5
 
6
- cmd = KBSecret::CLI.new do
6
+ include KBSecret
7
+
8
+ cmd = CLI.new do
7
9
  slop do |o|
8
10
  o.banner = <<~EOS
9
11
  List all available sessions.
@@ -17,9 +19,9 @@ cmd = KBSecret::CLI.new do
17
19
  end
18
20
  end
19
21
 
20
- KBSecret::Config.session_labels.each do |sess_name|
21
- session_hash = KBSecret::Config.session(sess_name)
22
- session = KBSecret::Session.new label: sess_name
22
+ Config.session_labels.each do |sess_name|
23
+ session_hash = Config.session(sess_name)
24
+ session = Session.new label: sess_name
23
25
 
24
26
  puts sess_name
25
27
 
@@ -3,7 +3,9 @@
3
3
 
4
4
  require "kbsecret"
5
5
 
6
- cmd = KBSecret::CLI.new do
6
+ include KBSecret
7
+
8
+ cmd = CLI.new do
7
9
  slop do |o|
8
10
  o.banner = <<~EOS
9
11
  Stash the given file (or stdin) as an unstructured record.
@@ -25,18 +27,18 @@ cmd = KBSecret::CLI.new do
25
27
  end
26
28
  end
27
29
 
28
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
30
+ session = CLI.ensure_session cmd.opts[:session]
29
31
  label = cmd.args[:label]
30
32
  filename = cmd.args[:filename]
31
33
 
32
- KBSecret::CLI.die "Missing a record label to create." unless label
34
+ CLI.die "Missing a record label to create." unless label
33
35
 
34
36
  contents = if filename.empty? || filename == "-"
35
37
  STDIN.read
36
38
  elsif File.file?(filename)
37
39
  File.read(filename)
38
40
  else
39
- KBSecret::CLI.die "That file doesn't exist."
41
+ CLI.die "That file doesn't exist."
40
42
  end
41
43
 
42
44
  session.add_record(:unstructured, label, contents)
data/bin/kbsecret-todo CHANGED
@@ -3,7 +3,9 @@
3
3
 
4
4
  require "kbsecret"
5
5
 
6
- cmd = KBSecret::CLI.new do
6
+ include KBSecret
7
+
8
+ cmd = CLI.new do
7
9
  slop cmds: %w[start suspend complete] do |o|
8
10
  o.banner = <<~EOS
9
11
  Manage 'to do' records.
@@ -26,27 +28,27 @@ cmd = KBSecret::CLI.new do
26
28
  end
27
29
  end
28
30
 
29
- session = KBSecret::CLI.ensure_session cmd.opts[:session]
31
+ session = CLI.ensure_session cmd.opts[:session]
30
32
  label = cmd.args[:label]
31
33
 
32
34
  todo = session[label]
33
35
 
34
- KBSecret::CLI.die "No such record." unless todo
35
- KBSecret::CLI.die "'#{todo}' is not a todo record." unless todo.type == :todo
36
+ CLI.die "No such record." unless todo
37
+ CLI.die "'#{todo}' is not a todo record." unless todo.type == :todo
36
38
 
37
39
  case cmd.args[:command]
38
40
  when "start"
39
- KBSecret::CLI.die "That task is already started!" if todo.started?
41
+ CLI.die "That task is already started!" if todo.started?
40
42
  todo.start!
41
43
  puts "#{todo.label}: '#{todo.todo}' marked as started at #{todo.start}"
42
44
  when "suspend"
43
- KBSecret::CLI.die "That task is already suspended!" if todo.suspended?
45
+ CLI.die "That task is already suspended!" if todo.suspended?
44
46
  todo.suspend!
45
47
  puts "#{todo.label}: '#{todo.todo}' marked as suspended at #{todo.stop}"
46
48
  when "complete"
47
- KBSecret::CLI.die "That task is already completed!" if todo.completed?
49
+ CLI.die "That task is already completed!" if todo.completed?
48
50
  todo.complete!
49
51
  puts "#{todo.label}: '#{todo.todo}' marked as completed at #{todo.stop}"
50
52
  else
51
- KBSecret::CLI.die "Unknown action: #{command}."
53
+ CLI.die "Unknown action: #{command}."
52
54
  end
data/lib/kbsecret/cli.rb CHANGED
@@ -91,6 +91,13 @@ module KBSecret
91
91
  Session.new label: sess_label
92
92
  end
93
93
 
94
+ # Finds a reasonable default field separator by checking the environment first
95
+ # and then falling back to ":".
96
+ # @return [String] the field separator
97
+ def ifs
98
+ ENV["IFS"] || ":"
99
+ end
100
+
94
101
  # Parse arguments for a kbsecret utility, adding some default options for
95
102
  # introspection and help output.
96
103
  # @param cmds [Array<String>] additional commands to print in `--introspect-flags`
data/lib/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module KBSecret
4
4
  # kbsecret's current version
5
- VERSION = "0.5.4"
5
+ VERSION = "0.5.5"
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.5.4
4
+ version: 0.5.5
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-06-24 00:00:00.000000000 Z
11
+ date: 2017-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fpm
@@ -153,20 +153,20 @@ dependencies:
153
153
  description: Manages your passwords, environment, and more via KBFS.
154
154
  email: william@tuffbizz.com
155
155
  executables:
156
- - kbsecret-sessions
157
- - kbsecret-raw-edit
158
- - kbsecret-stash-file
159
- - kbsecret-new-session
160
- - kbsecret-new
161
- - kbsecret-dump-fields
156
+ - kbsecret-pass
157
+ - kbsecret
162
158
  - kbsecret-rm
163
- - kbsecret-list
164
159
  - kbsecret-login
160
+ - kbsecret-raw-edit
165
161
  - kbsecret-todo
166
- - kbsecret-pass
167
- - kbsecret-env
162
+ - kbsecret-new
163
+ - kbsecret-dump-fields
164
+ - kbsecret-stash-file
168
165
  - kbsecret-rm-session
169
- - kbsecret
166
+ - kbsecret-env
167
+ - kbsecret-new-session
168
+ - kbsecret-list
169
+ - kbsecret-sessions
170
170
  extensions: []
171
171
  extra_rdoc_files: []
172
172
  files: