kbsecret 0.4.4 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|