kbsecret 0.4.4 → 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 +4 -4
- data/bin/kbsecret-dump-fields +21 -15
- data/bin/kbsecret-env +24 -19
- data/bin/kbsecret-list +16 -14
- data/bin/kbsecret-login +28 -22
- data/bin/kbsecret-new +35 -31
- data/bin/kbsecret-new-session +21 -19
- data/bin/kbsecret-pass +23 -17
- data/bin/kbsecret-raw-edit +17 -11
- data/bin/kbsecret-rm +19 -14
- data/bin/kbsecret-rm-session +18 -14
- data/bin/kbsecret-sessions +13 -10
- data/bin/kbsecret-stash-file +24 -16
- data/bin/kbsecret-todo +24 -19
- data/lib/kbsecret.rb +1 -1
- data/lib/kbsecret/cli.rb +69 -7
- metadata +22 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95555b8ca2d5833158c8575fb15a5de20f03e954
|
4
|
+
data.tar.gz: 1bf659569930104b29a28057750260d8ae868b24
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 595437bc9f394bfed347a23c05fdb480a329b40230aceeddeec4592bb2c1523cadace82c4f694b85722e3f6d29d7e46239ed9bef6db143db206617d5fd217723
|
7
|
+
data.tar.gz: ca76b4d7e0709eebe3b1260572ac3d4e84b872487532909cce88523d19e4a0f5e9a5e8375222d619caffa70c534ea28841a30ff7e868fecfb30434a47361b9fe
|
data/bin/kbsecret-dump-fields
CHANGED
@@ -3,22 +3,28 @@
|
|
3
3
|
|
4
4
|
require "kbsecret"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
6
|
+
cmd = KBSecret::CLI.new do
|
7
|
+
slop do |o|
|
8
|
+
o.banner = <<~EOS
|
9
|
+
Dump all fields for the given record.
|
10
|
+
|
11
|
+
Usage:
|
12
|
+
kbsecret dump-fields [--session <name>] <label>
|
13
|
+
EOS
|
14
|
+
|
15
|
+
o.string "-s", "--session", "the session name", default: :default
|
16
|
+
o.bool "-x", "--terse", "output in field:value format"
|
17
|
+
o.string "-i", "--ifs", "separate terse pairs with this string", default: ":"
|
18
|
+
end
|
19
|
+
|
20
|
+
dreck do
|
21
|
+
string :label
|
22
|
+
end
|
17
23
|
end
|
18
24
|
|
19
|
-
session = KBSecret::CLI.ensure_session opts[:session]
|
25
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
20
26
|
|
21
|
-
label =
|
27
|
+
label = cmd.args[:label]
|
22
28
|
record = session[label]
|
23
29
|
|
24
30
|
KBSecret::CLI.die "No such record." unless record
|
@@ -26,8 +32,8 @@ KBSecret::CLI.die "No such record." unless record
|
|
26
32
|
field_values = record.class.data_fields.map { |f| record.send f }
|
27
33
|
field_pairs = record.class.data_fields.zip(field_values)
|
28
34
|
|
29
|
-
if opts.terse?
|
30
|
-
puts field_pairs.map { |f, v| "#{f}#{opts[:ifs]}#{v}" }.join "\n"
|
35
|
+
if cmd.opts.terse?
|
36
|
+
puts field_pairs.map { |f, v| "#{f}#{cmd.opts[:ifs]}#{v}" }.join "\n"
|
31
37
|
else
|
32
38
|
puts field_pairs.map { |f, v| "#{f}: #{v}" }.join "\n"
|
33
39
|
end
|
data/bin/kbsecret-env
CHANGED
@@ -3,37 +3,42 @@
|
|
3
3
|
|
4
4
|
require "kbsecret"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
6
|
+
cmd = KBSecret::CLI.new do
|
7
|
+
slop do |o|
|
8
|
+
o.banner = <<~EOS
|
9
|
+
Retrieve environment records in a source-able format.
|
10
|
+
|
11
|
+
Usage:
|
12
|
+
kbsecret env [--session <name>] [--all] <label1 label2 ...>
|
13
|
+
|
14
|
+
Examples:
|
15
|
+
kbsecret env --all
|
16
|
+
kbsecret env staging beta
|
17
|
+
EOS
|
18
|
+
|
19
|
+
o.string "-s", "--session", "the session name", default: :default
|
20
|
+
o.bool "-a", "--all", "retrieve all environment records, not just listed ones"
|
21
|
+
o.bool "-v", "--value-only", "print only the environment value, not the key"
|
22
|
+
end
|
17
23
|
|
18
|
-
|
19
|
-
|
20
|
-
|
24
|
+
dreck do
|
25
|
+
list :string, :labels
|
26
|
+
end
|
21
27
|
end
|
22
28
|
|
23
|
-
session = KBSecret::CLI.ensure_session opts[:session]
|
24
|
-
|
29
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
25
30
|
records = session.records :environment
|
26
31
|
|
27
|
-
selected_records = if opts.all?
|
32
|
+
selected_records = if cmd.opts.all?
|
28
33
|
records
|
29
34
|
else
|
30
35
|
records.select do |record|
|
31
|
-
|
36
|
+
cmd.args[:labels].include? record.label
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
35
40
|
selected_records.each do |record|
|
36
|
-
if opts.value_only?
|
41
|
+
if cmd.opts.value_only?
|
37
42
|
puts record.value
|
38
43
|
else
|
39
44
|
puts record.to_export
|
data/bin/kbsecret-list
CHANGED
@@ -3,27 +3,29 @@
|
|
3
3
|
|
4
4
|
require "kbsecret"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
6
|
+
cmd = KBSecret::CLI.new do
|
7
|
+
slop do |o|
|
8
|
+
o.banner = <<~EOS
|
9
|
+
List all secrets known to the specified session (or the default session).
|
10
|
+
|
11
|
+
Usage:
|
12
|
+
kbsecret list [--session <name>] [--show-all]
|
13
|
+
EOS
|
14
|
+
|
15
|
+
o.string "-s", "--session", "the session name", default: :default
|
16
|
+
o.string "-t", "--type", "the type of secrets to list", default: nil
|
17
|
+
o.bool "-a", "--show-all", "show everything in each secret (i.e. metadata)"
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
|
-
session = KBSecret::CLI.ensure_session opts[:session]
|
21
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
20
22
|
|
21
|
-
records = session.records opts[:type]
|
23
|
+
records = session.records cmd.opts[:type]
|
22
24
|
|
23
25
|
records.each do |record|
|
24
26
|
puts record.label
|
25
27
|
|
26
|
-
next unless opts.show_all?
|
28
|
+
next unless cmd.opts.show_all?
|
27
29
|
|
28
30
|
puts <<~EOS
|
29
31
|
\tType: #{record.type}
|
data/bin/kbsecret-login
CHANGED
@@ -3,39 +3,45 @@
|
|
3
3
|
|
4
4
|
require "kbsecret"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
Examples:
|
14
|
-
kbsecret login --terse --ifs "*" gmail
|
15
|
-
kbsecret login gmail netflix
|
16
|
-
EOS
|
17
|
-
|
18
|
-
o.string "-s", "--session", "the session name", default: :default
|
19
|
-
o.bool "-a", "--all", "retrieve all login records, not just listed ones"
|
20
|
-
o.bool "-x", "--terse", "output in label:username:password format"
|
21
|
-
o.string "-i", "--ifs", "separate terse fields with this string", default: ":"
|
22
|
-
end
|
6
|
+
cmd = KBSecret::CLI.new do
|
7
|
+
slop do |o|
|
8
|
+
o.banner = <<~EOS
|
9
|
+
Retrieve login records.
|
10
|
+
|
11
|
+
Usage:
|
12
|
+
kbsecret login [--session <name>] <label1 label2 ...>
|
23
13
|
|
24
|
-
|
14
|
+
Examples:
|
15
|
+
kbsecret login --terse --ifs "*" gmail
|
16
|
+
kbsecret login gmail netflix
|
17
|
+
EOS
|
18
|
+
|
19
|
+
o.string "-s", "--session", "the session name", default: :default
|
20
|
+
o.bool "-a", "--all", "retrieve all login records, not just listed ones"
|
21
|
+
o.bool "-x", "--terse", "output in label:username:password format"
|
22
|
+
o.string "-i", "--ifs", "separate terse fields with this string", default: ":"
|
23
|
+
end
|
25
24
|
|
25
|
+
dreck do
|
26
|
+
list :string, :labels
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
26
31
|
records = session.records :login
|
27
|
-
|
32
|
+
|
33
|
+
selected_records = if cmd.opts.all?
|
28
34
|
records
|
29
35
|
else
|
30
36
|
records.select do |record|
|
31
|
-
|
37
|
+
cmd.args[:labels].include? record.label
|
32
38
|
end
|
33
39
|
end
|
34
40
|
|
35
41
|
selected_records.each do |record|
|
36
|
-
if opts.terse?
|
42
|
+
if cmd.opts.terse?
|
37
43
|
fields = %i[label username password].map { |m| record.send(m) }
|
38
|
-
puts fields.join(opts[:ifs])
|
44
|
+
puts fields.join(cmd.opts[:ifs])
|
39
45
|
else
|
40
46
|
puts <<~EOS
|
41
47
|
Label: #{record.label}
|
data/bin/kbsecret-new
CHANGED
@@ -8,34 +8,40 @@ require "tty-prompt"
|
|
8
8
|
# allows for abbreviated types (e.g., `kbsecret new env ...`)
|
9
9
|
TYPE_ALIASES = Abbrev.abbrev(KBSecret::Record.record_types).freeze
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
cmd = KBSecret::CLI.new do
|
12
|
+
slop do |o|
|
13
|
+
o.banner = <<~EOS
|
14
|
+
Create a new secret record.
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
Usage:
|
17
|
+
kbsecret new [options] <type> <label>
|
18
|
+
kbsecret new [options] --args <type> <label> <fields>
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
o.string "-s", "--session", "the session name", default: :default
|
25
|
-
o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
|
26
|
-
o.bool "-a", "--args", "use trailing arguments as fields, even with a tty"
|
27
|
-
o.bool "-e", "--echo", "echo input to tty (only affects interactive input)"
|
28
|
-
end
|
20
|
+
Examples:
|
21
|
+
kbsecret new login gmail
|
22
|
+
kbsecret new environment foo-api
|
23
|
+
EOS
|
29
24
|
|
30
|
-
session
|
25
|
+
o.string "-s", "--session", "the session name", default: :default
|
26
|
+
o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
|
27
|
+
o.bool "-a", "--args", "use trailing arguments as fields, even with a tty"
|
28
|
+
o.bool "-e", "--echo", "echo input to tty (only affects interactive input)"
|
29
|
+
end
|
31
30
|
|
32
|
-
|
31
|
+
dreck do
|
32
|
+
string :type
|
33
|
+
string :label
|
34
|
+
list :string, :fields
|
35
|
+
end
|
36
|
+
end
|
33
37
|
|
34
|
-
|
38
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
35
39
|
|
40
|
+
type = cmd.args[:type]
|
41
|
+
label = cmd.args[:label]
|
36
42
|
resolved_type = TYPE_ALIASES[type]
|
37
43
|
|
38
|
-
if session.record?(label) && !opts.force?
|
44
|
+
if session.record?(label) && !cmd.opts.force?
|
39
45
|
KBSecret::CLI.die "Refusing to overwrite an existing record without --force."
|
40
46
|
end
|
41
47
|
|
@@ -46,17 +52,15 @@ unless KBSecret::Record.type?(resolved_type)
|
|
46
52
|
EOS
|
47
53
|
end
|
48
54
|
|
49
|
-
fields =
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
fields = opts.args
|
59
|
-
end
|
55
|
+
fields = if $stdin.tty? && !cmd.opts.args?
|
56
|
+
prompt = TTY::Prompt.new
|
57
|
+
klass = KBSecret::Record.class_for(resolved_type)
|
58
|
+
klass.data_fields.map do |field|
|
59
|
+
prompt.ask("#{field.capitalize}?", echo: cmd.opts.echo?)
|
60
|
+
end
|
61
|
+
else
|
62
|
+
cmd.args[:fields]
|
63
|
+
end
|
60
64
|
|
61
65
|
begin
|
62
66
|
session.add_record(resolved_type, label, *fields)
|
data/bin/kbsecret-new-session
CHANGED
@@ -4,32 +4,34 @@
|
|
4
4
|
require "keybase"
|
5
5
|
require "kbsecret"
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
7
|
+
cmd = KBSecret::CLI.new do
|
8
|
+
slop do |o|
|
9
|
+
o.banner = <<~EOS
|
10
|
+
Create a new session.
|
11
|
+
|
12
|
+
Usage:
|
13
|
+
kbsecret new-session --label <label> --users <user1,...> --root <dir>
|
14
|
+
|
15
|
+
Example:
|
16
|
+
kbsecret new-session -l dev -u me,otherperson -r devsecrets
|
17
|
+
EOS
|
18
|
+
|
19
|
+
o.string "-l", "--label", "the session label", default: :default
|
20
|
+
o.array "-u", "--users", "the keybase users", default: [Keybase.current_user]
|
21
|
+
o.string "-r", "--root", "the secret root directory", default: "kbsecret"
|
22
|
+
o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
|
23
|
+
end
|
22
24
|
end
|
23
25
|
|
24
|
-
session_label = opts[:label]
|
26
|
+
session_label = cmd.opts[:label]
|
25
27
|
|
26
|
-
if KBSecret::Config.session?(session_label) && !opts.force?
|
28
|
+
if KBSecret::Config.session?(session_label) && !cmd.opts.force?
|
27
29
|
KBSecret::CLI.die "Refusing to overwrite an existing session without --force."
|
28
30
|
end
|
29
31
|
|
30
32
|
session_hash = {
|
31
|
-
users: opts[:users],
|
32
|
-
root: opts[:root],
|
33
|
+
users: cmd.opts[:users],
|
34
|
+
root: cmd.opts[:root],
|
33
35
|
}
|
34
36
|
|
35
37
|
KBSecret::Config.configure_session(session_label, session_hash)
|
data/bin/kbsecret-pass
CHANGED
@@ -4,30 +4,36 @@
|
|
4
4
|
require "kbsecret"
|
5
5
|
require "clipboard"
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
7
|
+
cmd = KBSecret::CLI.new do
|
8
|
+
slop do |o|
|
9
|
+
o.banner = <<~EOS
|
10
|
+
Retrieve a login record's password.
|
11
|
+
|
12
|
+
Usage:
|
13
|
+
kbsecret pass [--session <name>] [--clipboard] <label>
|
14
|
+
|
15
|
+
Examples:
|
16
|
+
kbsecret pass gmail | xclip
|
17
|
+
kbsecret pass --clipboard gmail
|
18
|
+
EOS
|
19
|
+
|
20
|
+
o.string "-s", "--session", "the session name", default: :default
|
21
|
+
o.bool "-c", "--clipboard", "dump the password in the clipboard"
|
22
|
+
end
|
23
|
+
|
24
|
+
dreck do
|
25
|
+
string :label
|
26
|
+
end
|
21
27
|
end
|
22
28
|
|
23
|
-
session = KBSecret::CLI.ensure_session opts[:session]
|
24
|
-
label =
|
29
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
30
|
+
label = cmd.args[:label]
|
25
31
|
record = session[label]
|
26
32
|
|
27
33
|
KBSecret::CLI.die "No such record." unless record
|
28
34
|
KBSecret::CLI.die "'#{record}' is not a login record." unless record.type == :login
|
29
35
|
|
30
|
-
if opts.clipboard?
|
36
|
+
if cmd.opts.clipboard?
|
31
37
|
Clipboard.copy record.password
|
32
38
|
else
|
33
39
|
puts record.password
|
data/bin/kbsecret-raw-edit
CHANGED
@@ -3,22 +3,28 @@
|
|
3
3
|
|
4
4
|
require "kbsecret"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
cmd = KBSecret::CLI.new do
|
7
|
+
slop do |o|
|
8
|
+
o.banner = <<~EOS
|
9
|
+
Edit the raw JSON of a record in $EDITOR.
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
Usage:
|
12
|
+
kbsecret raw-edit [--session <name>] <label>
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
Examples:
|
15
|
+
kbsecret raw-edit gmail
|
16
|
+
EOS
|
16
17
|
|
17
|
-
|
18
|
+
o.string "-s", "--session", "the session name", default: :default
|
19
|
+
end
|
20
|
+
|
21
|
+
dreck do
|
22
|
+
string :label
|
23
|
+
end
|
18
24
|
end
|
19
25
|
|
20
|
-
session = KBSecret::CLI.ensure_session opts[:session]
|
21
|
-
label =
|
26
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
27
|
+
label = cmd.args[:label]
|
22
28
|
record = session[label]
|
23
29
|
|
24
30
|
KBSecret::CLI.die "No such record." unless record
|
data/bin/kbsecret-rm
CHANGED
@@ -6,28 +6,33 @@ require "tty-prompt"
|
|
6
6
|
|
7
7
|
$VERBOSE = nil # tty-prompt blasts us with irrelevant warnings on 2.4
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
9
|
+
cmd = KBSecret::CLI.new do
|
10
|
+
slop do |o|
|
11
|
+
o.banner = <<~EOS
|
12
|
+
Delete a record.
|
13
|
+
|
14
|
+
Usage:
|
15
|
+
kbsecret rm [--session <name>] [--interactive] <label>
|
16
|
+
EOS
|
17
|
+
|
18
|
+
o.string "-s", "--session", "the session name", default: :default
|
19
|
+
o.bool "-i", "--interactive", "ask for confirmation before deleting"
|
20
|
+
end
|
21
|
+
|
22
|
+
dreck do
|
23
|
+
string :label
|
24
|
+
end
|
19
25
|
end
|
20
26
|
|
21
|
-
|
22
|
-
|
23
|
-
label = opts.args.shift
|
27
|
+
label = cmd.args[:label]
|
28
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
24
29
|
|
25
30
|
KBSecret::CLI.die "I need the label of a record to delete." unless label
|
26
31
|
KBSecret::CLI.die "I can't delete a nonexistent record." unless session.record? label
|
27
32
|
|
28
33
|
tty = TTY::Prompt.new
|
29
34
|
|
30
|
-
confirm = if opts.interactive?
|
35
|
+
confirm = if cmd.opts.interactive?
|
31
36
|
tty.yes?("Delete '#{label}' from the #{session.label} session?")
|
32
37
|
else true
|
33
38
|
end
|
data/bin/kbsecret-rm-session
CHANGED
@@ -3,26 +3,30 @@
|
|
3
3
|
|
4
4
|
require "kbsecret"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
cmd = KBSecret::CLI.new do
|
7
|
+
slop do |o|
|
8
|
+
o.banner = <<~EOS
|
9
|
+
Deconfigure (and optionally delete) a session.
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
Usage:
|
12
|
+
kbsecret rm-session --delete <label>
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
Example:
|
15
|
+
kbsecret rm-session old-keys
|
16
|
+
kbsecret rm-session --delete even-older-keys
|
17
|
+
EOS
|
17
18
|
|
18
|
-
|
19
|
-
end
|
19
|
+
o.bool "-d", "--delete", "unlink the session in addition to deconfiguration"
|
20
|
+
end
|
20
21
|
|
21
|
-
|
22
|
+
dreck do
|
23
|
+
string :label
|
24
|
+
end
|
25
|
+
end
|
22
26
|
|
23
|
-
|
27
|
+
label = cmd.args[:label]
|
24
28
|
|
25
29
|
session = KBSecret::CLI.ensure_session label
|
26
|
-
session.unlink! if opts.delete?
|
30
|
+
session.unlink! if cmd.opts.delete?
|
27
31
|
|
28
32
|
KBSecret::Config.deconfigure_session label
|
data/bin/kbsecret-sessions
CHANGED
@@ -3,24 +3,27 @@
|
|
3
3
|
|
4
4
|
require "kbsecret"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
cmd = KBSecret::CLI.new do
|
7
|
+
slop do |o|
|
8
|
+
o.banner = <<~EOS
|
9
|
+
List all available sessions.
|
10
|
+
The sessions listed can be passed to other commands via the -s flag.
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
Usage:
|
13
|
+
kbsecret sessions [--show-all]
|
14
|
+
EOS
|
14
15
|
|
15
|
-
|
16
|
+
o.bool "-a", "--show-all", "show each session in depth (i.e. metadata)"
|
17
|
+
end
|
16
18
|
end
|
17
19
|
|
18
20
|
KBSecret::Config.session_labels.each do |sess_name|
|
19
21
|
session_hash = KBSecret::Config.session(sess_name)
|
20
|
-
session
|
22
|
+
session = KBSecret::Session.new label: sess_name
|
23
|
+
|
21
24
|
puts sess_name
|
22
25
|
|
23
|
-
next unless opts.show_all?
|
26
|
+
next unless cmd.opts.show_all?
|
24
27
|
|
25
28
|
puts <<~EOS
|
26
29
|
\tUsers: #{session_hash[:users].join(", ")}
|
data/bin/kbsecret-stash-file
CHANGED
@@ -3,27 +3,35 @@
|
|
3
3
|
|
4
4
|
require "kbsecret"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
6
|
+
cmd = KBSecret::CLI.new do
|
7
|
+
slop do |o|
|
8
|
+
o.banner = <<~EOS
|
9
|
+
Stash the given file (or stdin) as an unstructured record.
|
10
|
+
|
11
|
+
Usage:
|
12
|
+
kbsecret stash-file <label> [file]
|
13
|
+
|
14
|
+
Example:
|
15
|
+
kbsecret stash-file foo ~/foo
|
16
|
+
echo "using stdin" | kbsecret stash-file from-stdin
|
17
|
+
EOS
|
18
|
+
|
19
|
+
o.string "-s", "--session", "the session name", default: :default
|
20
|
+
end
|
21
|
+
|
22
|
+
dreck errors: false do
|
23
|
+
string :label
|
24
|
+
string :filename
|
25
|
+
end
|
19
26
|
end
|
20
27
|
|
21
|
-
session
|
22
|
-
label
|
28
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
29
|
+
label = cmd.args[:label]
|
30
|
+
filename = cmd.args[:filename]
|
23
31
|
|
24
32
|
KBSecret::CLI.die "Missing a record label to create." unless label
|
25
33
|
|
26
|
-
contents = if filename.
|
34
|
+
contents = if filename.empty? || filename == "-"
|
27
35
|
STDIN.read
|
28
36
|
elsif File.file?(filename)
|
29
37
|
File.read(filename)
|
data/bin/kbsecret-todo
CHANGED
@@ -3,33 +3,38 @@
|
|
3
3
|
|
4
4
|
require "kbsecret"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
6
|
+
cmd = KBSecret::CLI.new do
|
7
|
+
slop cmds: %w[start suspend complete] do |o|
|
8
|
+
o.banner = <<~EOS
|
9
|
+
Manage 'to do' records.
|
10
|
+
|
11
|
+
Usage:
|
12
|
+
kbsecret todo <start|suspend|complete> <label>
|
13
|
+
|
14
|
+
Examples:
|
15
|
+
kbsecret todo start unit-tests
|
16
|
+
kbsecret todo suspend laundry
|
17
|
+
kbsecret todo complete shopping
|
18
|
+
EOS
|
19
|
+
|
20
|
+
o.string "-s", "--session", "the session name", default: :default
|
21
|
+
end
|
22
|
+
|
23
|
+
dreck do
|
24
|
+
string :command
|
25
|
+
string :label
|
26
|
+
end
|
20
27
|
end
|
21
28
|
|
22
|
-
session
|
23
|
-
|
24
|
-
|
25
|
-
KBSecret::CLI.die "Missing subcommand." unless command && label
|
29
|
+
session = KBSecret::CLI.ensure_session cmd.opts[:session]
|
30
|
+
label = cmd.args[:label]
|
26
31
|
|
27
32
|
todo = session[label]
|
28
33
|
|
29
34
|
KBSecret::CLI.die "No such record." unless todo
|
30
35
|
KBSecret::CLI.die "'#{todo}' is not a todo record." unless todo.type == :todo
|
31
36
|
|
32
|
-
case command
|
37
|
+
case cmd.args[:command]
|
33
38
|
when "start"
|
34
39
|
KBSecret::CLI.die "That task is already started!" if todo.started?
|
35
40
|
todo.start!
|
data/lib/kbsecret.rb
CHANGED
@@ -11,7 +11,7 @@ require_relative "kbsecret/cli"
|
|
11
11
|
# The primary namespace for kbsecret.
|
12
12
|
module KBSecret
|
13
13
|
# kbsecret's current version
|
14
|
-
VERSION = "0.
|
14
|
+
VERSION = "0.5.0"
|
15
15
|
|
16
16
|
# fail very early if the user doesn't have keybase and KBFS running
|
17
17
|
raise Keybase::KeybaseNotRunningError unless Keybase.running?
|
data/lib/kbsecret/cli.rb
CHANGED
@@ -1,22 +1,83 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
3
|
+
require "colored2"
|
4
4
|
require "slop"
|
5
|
+
require "dreck"
|
5
6
|
|
6
7
|
module KBSecret
|
7
8
|
# An encapsulation of useful methods for kbsecret's CLI.
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
class CLI
|
10
|
+
# @return [Slop::Result] the result of option parsing
|
11
|
+
attr_reader :opts
|
12
|
+
|
13
|
+
# @return [Dreck::Result] the result of trailing argument parsing
|
14
|
+
attr_reader :args
|
15
|
+
|
16
|
+
# Encapsulate both the options and trailing arguments passed to a `kbsecret` command.
|
17
|
+
# @example
|
18
|
+
# cmd = KBSecret::CLI.new do
|
19
|
+
# slop do |o|
|
20
|
+
# o.bool "-f", "--foo", "whatever"
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# dreck do
|
24
|
+
# string :name
|
25
|
+
# end
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
# cmd.opts # => Slop::Result
|
29
|
+
# cmd.args # => Dreck::Result
|
30
|
+
def initialize(&block)
|
31
|
+
@trailing = ARGV
|
32
|
+
@opts = nil
|
33
|
+
@args = nil
|
34
|
+
instance_eval(&block)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Parse options for a kbsecret utility, adding some default options for
|
38
|
+
# introspection and help output.
|
39
|
+
# @param cmds [Array<String>] additional commands to print in `--introspect-flags`
|
40
|
+
# @param errors [Boolean] whether or not to produce Slop errors
|
41
|
+
# @return [Slop::Result] the result of argument parsing
|
42
|
+
# @note This should be called within the block passed to {initialize}.
|
43
|
+
def slop(cmds: [], errors: false)
|
44
|
+
@opts = Slop.parse suppress_errors: !errors do |o|
|
45
|
+
yield o
|
46
|
+
|
47
|
+
o.on "-h", "--help" do
|
48
|
+
puts o
|
49
|
+
exit
|
50
|
+
end
|
51
|
+
|
52
|
+
o.on "--introspect-flags" do
|
53
|
+
comp = o.options.flat_map(&:flags) + cmds
|
54
|
+
puts comp.join "\n"
|
55
|
+
exit
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
@trailing = @opts.args
|
60
|
+
end
|
13
61
|
|
62
|
+
# Parse trailing arguments for a kbsecret utility, using the elements remaining
|
63
|
+
# after options have been removed and interpreted via {slop}.
|
64
|
+
# @param errors [Boolean] whether or not to produce (strict) Dreck errors
|
65
|
+
# @note *If* {slop} is called, it must be called before this.
|
66
|
+
def dreck(errors: true, &block)
|
67
|
+
@args = Dreck.parse @trailing, strict: errors do
|
68
|
+
instance_eval(&block)
|
69
|
+
end
|
70
|
+
rescue => e
|
71
|
+
KBSecret::CLI.die "#{e.to_s.capitalize}."
|
72
|
+
end
|
73
|
+
|
74
|
+
class << self
|
14
75
|
# Print an error message and terminate.
|
15
76
|
# @param msg [String] the message to print
|
16
77
|
# @return [void]
|
17
78
|
# @note This method does not return!
|
18
79
|
def die(msg)
|
19
|
-
pretty = "#{
|
80
|
+
pretty = "#{"Fatal".red}: #{msg}"
|
20
81
|
abort pretty
|
21
82
|
end
|
22
83
|
|
@@ -35,6 +96,7 @@ module KBSecret
|
|
35
96
|
# @param cmds [Array<String>] additional commands to print in `--introspect-flags`
|
36
97
|
# @param errors [Boolean] whether or not to produce Slop errors
|
37
98
|
# @return [Slop::Result] the result of argument parsing
|
99
|
+
# @deprecated Use {#initialize} instead.
|
38
100
|
def slop(cmds: [], errors: false)
|
39
101
|
Slop.parse suppress_errors: !errors do |o|
|
40
102
|
yield o
|
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.
|
4
|
+
version: 0.5.0
|
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-
|
11
|
+
date: 2017-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clipboard
|
@@ -25,33 +25,47 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: colored2
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '3.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '3.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: dreck
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.0.4
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.0.4
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: keybase-unofficial
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.8
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.0.8
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: slop
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|