kbsecret 1.2.0 → 1.3.0.pre.1
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/README.md +5 -5
- data/bin/kbsecret +6 -14
- data/lib/kbsecret/cli/command/abstract.rb +51 -0
- data/lib/kbsecret/cli/command/conf.rb +42 -0
- data/lib/kbsecret/cli/command/cp.rb +54 -0
- data/lib/kbsecret/cli/command/dump_fields.rb +53 -0
- data/lib/kbsecret/cli/command/env.rb +66 -0
- data/lib/kbsecret/cli/command/generator.rb +62 -0
- data/lib/kbsecret/cli/command/generators.rb +37 -0
- data/lib/kbsecret/cli/command/list.rb +48 -0
- data/lib/kbsecret/cli/command/login.rb +66 -0
- data/lib/kbsecret/cli/command/new.rb +82 -0
- data/lib/kbsecret/cli/command/pass.rb +51 -0
- data/lib/kbsecret/cli/command/raw_edit.rb +46 -0
- data/lib/kbsecret/cli/command/rm.rb +58 -0
- data/lib/kbsecret/cli/command/session.rb +128 -0
- data/lib/kbsecret/cli/command/sessions.rb +47 -0
- data/lib/kbsecret/cli/command/stash_file.rb +62 -0
- data/lib/kbsecret/cli/command/todo.rb +78 -0
- data/lib/kbsecret/cli/command.rb +45 -0
- data/lib/kbsecret/cli.rb +6 -4
- data/lib/kbsecret/config.rb +4 -3
- data/lib/kbsecret/record/abstract.rb +2 -2
- data/lib/kbsecret/record.rb +9 -7
- data/lib/kbsecret/version.rb +1 -1
- metadata +22 -20
- data/lib/kbsecret/cli/kbsecret-conf +0 -31
- data/lib/kbsecret/cli/kbsecret-cp +0 -44
- data/lib/kbsecret/cli/kbsecret-dump-fields +0 -39
- data/lib/kbsecret/cli/kbsecret-env +0 -53
- data/lib/kbsecret/cli/kbsecret-generator +0 -42
- data/lib/kbsecret/cli/kbsecret-generators +0 -28
- data/lib/kbsecret/cli/kbsecret-list +0 -36
- data/lib/kbsecret/cli/kbsecret-login +0 -53
- data/lib/kbsecret/cli/kbsecret-new +0 -68
- data/lib/kbsecret/cli/kbsecret-pass +0 -37
- data/lib/kbsecret/cli/kbsecret-raw-edit +0 -31
- data/lib/kbsecret/cli/kbsecret-rm +0 -44
- data/lib/kbsecret/cli/kbsecret-session +0 -105
- data/lib/kbsecret/cli/kbsecret-sessions +0 -38
- data/lib/kbsecret/cli/kbsecret-stash-file +0 -48
- data/lib/kbsecret/cli/kbsecret-todo +0 -47
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: 1.
|
4
|
+
version: 1.3.0.pre.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Woodruff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aruba
|
@@ -225,22 +225,24 @@ files:
|
|
225
225
|
- bin/kbsecret
|
226
226
|
- lib/kbsecret.rb
|
227
227
|
- lib/kbsecret/cli.rb
|
228
|
-
- lib/kbsecret/cli/
|
229
|
-
- lib/kbsecret/cli/
|
230
|
-
- lib/kbsecret/cli/
|
231
|
-
- lib/kbsecret/cli/
|
232
|
-
- lib/kbsecret/cli/
|
233
|
-
- lib/kbsecret/cli/
|
234
|
-
- lib/kbsecret/cli/
|
235
|
-
- lib/kbsecret/cli/
|
236
|
-
- lib/kbsecret/cli/
|
237
|
-
- lib/kbsecret/cli/
|
238
|
-
- lib/kbsecret/cli/
|
239
|
-
- lib/kbsecret/cli/
|
240
|
-
- lib/kbsecret/cli/
|
241
|
-
- lib/kbsecret/cli/
|
242
|
-
- lib/kbsecret/cli/
|
243
|
-
- lib/kbsecret/cli/
|
228
|
+
- lib/kbsecret/cli/command.rb
|
229
|
+
- lib/kbsecret/cli/command/abstract.rb
|
230
|
+
- lib/kbsecret/cli/command/conf.rb
|
231
|
+
- lib/kbsecret/cli/command/cp.rb
|
232
|
+
- lib/kbsecret/cli/command/dump_fields.rb
|
233
|
+
- lib/kbsecret/cli/command/env.rb
|
234
|
+
- lib/kbsecret/cli/command/generator.rb
|
235
|
+
- lib/kbsecret/cli/command/generators.rb
|
236
|
+
- lib/kbsecret/cli/command/list.rb
|
237
|
+
- lib/kbsecret/cli/command/login.rb
|
238
|
+
- lib/kbsecret/cli/command/new.rb
|
239
|
+
- lib/kbsecret/cli/command/pass.rb
|
240
|
+
- lib/kbsecret/cli/command/raw_edit.rb
|
241
|
+
- lib/kbsecret/cli/command/rm.rb
|
242
|
+
- lib/kbsecret/cli/command/session.rb
|
243
|
+
- lib/kbsecret/cli/command/sessions.rb
|
244
|
+
- lib/kbsecret/cli/command/stash_file.rb
|
245
|
+
- lib/kbsecret/cli/command/todo.rb
|
244
246
|
- lib/kbsecret/config.rb
|
245
247
|
- lib/kbsecret/exceptions.rb
|
246
248
|
- lib/kbsecret/generator.rb
|
@@ -268,9 +270,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
268
270
|
version: 2.3.0
|
269
271
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
270
272
|
requirements:
|
271
|
-
- - "
|
273
|
+
- - ">"
|
272
274
|
- !ruby/object:Gem::Version
|
273
|
-
version:
|
275
|
+
version: 1.3.1
|
274
276
|
requirements: []
|
275
277
|
rubyforge_project:
|
276
278
|
rubygems_version: 2.7.3
|
@@ -1,31 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
|
6
|
-
include KBSecret
|
7
|
-
|
8
|
-
cmd = CLI.create do |c|
|
9
|
-
c.slop do |o|
|
10
|
-
o.banner = <<~HELP
|
11
|
-
Usage: kbsecret conf [options]
|
12
|
-
HELP
|
13
|
-
|
14
|
-
o.bool "-c", "--commands", "open the commands config (commands.ini)"
|
15
|
-
o.bool "-d", "--directory", "print the path to the config directory"
|
16
|
-
o.bool "-r", "--record-directory", "print the path to the custom record directory"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
KBSecret::CLI.die "You need to set $EDITOR!" unless ENV["EDITOR"]
|
21
|
-
|
22
|
-
if cmd.opts.commands?
|
23
|
-
exec "#{ENV["EDITOR"]} #{Config::COMMAND_CONFIG_FILE}"
|
24
|
-
elsif cmd.opts.directory?
|
25
|
-
puts Config::CONFIG_DIR
|
26
|
-
elsif cmd.opts.record_directory?
|
27
|
-
puts Config::CUSTOM_TYPES_DIR
|
28
|
-
else
|
29
|
-
exec "#{ENV["EDITOR"]} #{Config::CONFIG_FILE}"
|
30
|
-
end
|
31
|
-
|
@@ -1,44 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
include KBSecret
|
6
|
-
|
7
|
-
cmd = CLI.create do |c|
|
8
|
-
c.slop do |o|
|
9
|
-
o.banner = <<~HELP
|
10
|
-
Usage:
|
11
|
-
kbsecret cp [options] <source> <destination> <record [record ...]>
|
12
|
-
HELP
|
13
|
-
|
14
|
-
o.bool "-f", "--force", "force copying (ignore overwrites)"
|
15
|
-
o.bool "-m", "--move", "delete the record after copying"
|
16
|
-
end
|
17
|
-
|
18
|
-
c.dreck do
|
19
|
-
string :src_sess
|
20
|
-
string :dst_sess
|
21
|
-
list :string, :labels
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
cmd.guard do
|
26
|
-
src_sess = Session[cmd.args[:src_sess]]
|
27
|
-
dst_sess = Session[cmd.args[:dst_sess]]
|
28
|
-
|
29
|
-
selected_records = src_sess.records.select { |r| cmd.args[:labels].include?(r.label) }
|
30
|
-
cmd.die "No such record(s)." if selected_records.empty?
|
31
|
-
|
32
|
-
overlaps = dst_sess.record_labels & selected_records.map(&:label)
|
33
|
-
|
34
|
-
# the code below actually handles the overwriting if necessary, but we fail early here for
|
35
|
-
# friendliness and to avoid half-copying the selected records
|
36
|
-
unless overlaps.empty? || cmd.opts.force?
|
37
|
-
cmd.die "Refusing to overwrite existing record(s) without --force."
|
38
|
-
end
|
39
|
-
|
40
|
-
selected_records.each do |record|
|
41
|
-
dst_sess.import_record(record, overwrite: cmd.opts.force?)
|
42
|
-
src_sess.delete_record(label) if cmd.opts.move?
|
43
|
-
end
|
44
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
|
6
|
-
include KBSecret
|
7
|
-
|
8
|
-
cmd = CLI.create do |c|
|
9
|
-
c.slop do |o|
|
10
|
-
o.banner = <<~HELP
|
11
|
-
Usage:
|
12
|
-
kbsecret dump-fields [options] <record>
|
13
|
-
HELP
|
14
|
-
|
15
|
-
o.string "-s", "--session", "the session to search in", default: :default
|
16
|
-
o.bool "-x", "--terse", "output in field<sep>value format"
|
17
|
-
o.string "-i", "--ifs", "separate terse pairs with this string", default: CLI.ifs
|
18
|
-
end
|
19
|
-
|
20
|
-
c.dreck do
|
21
|
-
string :label
|
22
|
-
end
|
23
|
-
|
24
|
-
c.ensure_session!
|
25
|
-
end
|
26
|
-
|
27
|
-
label = cmd.args[:label]
|
28
|
-
record = cmd.session[label]
|
29
|
-
|
30
|
-
cmd.die "No such record." unless record
|
31
|
-
|
32
|
-
field_values = record.data_fields.map { |f| record.send f }
|
33
|
-
field_pairs = record.data_fields.zip(field_values)
|
34
|
-
|
35
|
-
if cmd.opts.terse?
|
36
|
-
puts field_pairs.map { |f, v| "#{f}#{cmd.opts[:ifs]}#{v}" }.join "\n"
|
37
|
-
else
|
38
|
-
puts field_pairs.map { |f, v| "#{f}: #{v}" }.join "\n"
|
39
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
|
6
|
-
include KBSecret
|
7
|
-
|
8
|
-
cmd = CLI.create do |c|
|
9
|
-
c.slop do |o|
|
10
|
-
o.banner = <<~HELP
|
11
|
-
Usage:
|
12
|
-
kbsecret env [options] <record [record ...]>
|
13
|
-
HELP
|
14
|
-
|
15
|
-
o.string "-s", "--session", "the session to search in", default: :default
|
16
|
-
o.bool "-a", "--all", "retrieve all environment records, not just listed ones"
|
17
|
-
o.bool "-v", "--value-only", "print only the environment value, not the key"
|
18
|
-
o.bool "-n", "--no-export", "print only VAR=val keypairs without `export`"
|
19
|
-
o.bool "-u", "--unescape-plus", "escape any pluses in the variable and/or value"
|
20
|
-
end
|
21
|
-
|
22
|
-
unless c.opts.all?
|
23
|
-
c.dreck do
|
24
|
-
list :string, :labels
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
c.ensure_session!
|
29
|
-
end
|
30
|
-
|
31
|
-
records = cmd.session.records :environment
|
32
|
-
|
33
|
-
selected_records = if cmd.opts.all?
|
34
|
-
records
|
35
|
-
else
|
36
|
-
records.select do |record|
|
37
|
-
cmd.args[:labels].include? record.label
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
cmd.die "No such record(s)." if selected_records.empty?
|
42
|
-
|
43
|
-
env_output = if cmd.opts.no_export?
|
44
|
-
selected_records.map(&:to_assignment).join(" ")
|
45
|
-
elsif cmd.opts.value_only?
|
46
|
-
selected_records.map(&:value).join("\n")
|
47
|
-
else
|
48
|
-
selected_records.map(&:to_export).join("\n")
|
49
|
-
end
|
50
|
-
|
51
|
-
env_output.gsub!("\\+", "+") if cmd.opts.unescape_plus?
|
52
|
-
|
53
|
-
puts env_output
|
@@ -1,42 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
|
6
|
-
include KBSecret
|
7
|
-
|
8
|
-
cmd = CLI.create do |c|
|
9
|
-
c.slop cmds: %w[new rm] do |o|
|
10
|
-
o.banner = <<~HELP
|
11
|
-
Usage:
|
12
|
-
kbsecret generator [options] <new|rm> <generator>
|
13
|
-
HELP
|
14
|
-
|
15
|
-
o.string "-F", "--format", "the format of the secrets generated", default: "hex"
|
16
|
-
o.integer "-l", "--length", "the length, in bytes, of the secrets generated",
|
17
|
-
default: 16
|
18
|
-
o.bool "-f", "--force", "force generator creation (ignore overwrite)"
|
19
|
-
end
|
20
|
-
|
21
|
-
c.dreck do
|
22
|
-
string :command
|
23
|
-
string :generator
|
24
|
-
end
|
25
|
-
|
26
|
-
c.ensure_generator! :argument if c.args[:command] == "rm"
|
27
|
-
end
|
28
|
-
|
29
|
-
case cmd.args[:command]
|
30
|
-
when "new"
|
31
|
-
if Config.generator?(cmd.args[:generator]) && !cmd.opts.force?
|
32
|
-
cmd.die "Refusing to overwrite an existing generator without --force."
|
33
|
-
end
|
34
|
-
|
35
|
-
Config.configure_generator(cmd.args[:generator],
|
36
|
-
format: cmd.opts[:format],
|
37
|
-
length: cmd.opts[:length])
|
38
|
-
when "rm"
|
39
|
-
Config.deconfigure_generator(cmd.args[:generator])
|
40
|
-
else
|
41
|
-
cmd.die "Unknown subcommand: '#{cmd.args[:command]}'."
|
42
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
|
6
|
-
include KBSecret
|
7
|
-
|
8
|
-
cmd = CLI.create do |c|
|
9
|
-
c.slop do |o|
|
10
|
-
o.banner = <<~HELP
|
11
|
-
Usage:
|
12
|
-
kbsecret generators [options]
|
13
|
-
HELP
|
14
|
-
|
15
|
-
o.bool "-a", "--show-all", "show each generator in depth (i.e. metadata)"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
Config[:generators].each do |label, config|
|
20
|
-
puts label
|
21
|
-
|
22
|
-
next unless cmd.opts.show_all?
|
23
|
-
|
24
|
-
puts <<~DETAIL
|
25
|
-
\tFormat: #{config[:format]}
|
26
|
-
\tLength: #{config[:length]}
|
27
|
-
DETAIL
|
28
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
|
6
|
-
include KBSecret
|
7
|
-
|
8
|
-
cmd = CLI.create do |c|
|
9
|
-
c.slop do |o|
|
10
|
-
o.banner = <<~HELP
|
11
|
-
Usage:
|
12
|
-
kbsecret list [options]
|
13
|
-
HELP
|
14
|
-
|
15
|
-
o.string "-s", "--session", "the session to list from", 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
|
19
|
-
|
20
|
-
c.ensure_type! if c.opts[:type]
|
21
|
-
c.ensure_session!
|
22
|
-
end
|
23
|
-
|
24
|
-
records = cmd.session.records cmd.opts[:type]
|
25
|
-
|
26
|
-
records.each do |record|
|
27
|
-
puts record.label
|
28
|
-
|
29
|
-
next unless cmd.opts.show_all?
|
30
|
-
|
31
|
-
puts <<~DETAIL
|
32
|
-
\tType: #{record.type}
|
33
|
-
\tLast changed: #{Time.at(record.timestamp)}
|
34
|
-
\tRaw data: #{record.data}
|
35
|
-
DETAIL
|
36
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
|
6
|
-
include KBSecret
|
7
|
-
|
8
|
-
cmd = CLI.create do |c|
|
9
|
-
c.slop do |o|
|
10
|
-
o.banner = <<~HELP
|
11
|
-
Usage:
|
12
|
-
kbsecret login [options] <record [record ...]>
|
13
|
-
HELP
|
14
|
-
|
15
|
-
o.string "-s", "--session", "the session to search in", default: :default
|
16
|
-
o.bool "-a", "--all", "retrieve all login records, not just listed ones"
|
17
|
-
o.bool "-x", "--terse", "output in label<sep>username<sep>password format"
|
18
|
-
o.string "-i", "--ifs", "separate terse fields with this string", default: CLI.ifs
|
19
|
-
end
|
20
|
-
|
21
|
-
unless c.opts.all?
|
22
|
-
c.dreck do
|
23
|
-
list :string, :labels
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
c.ensure_session!
|
28
|
-
end
|
29
|
-
|
30
|
-
records = cmd.session.records :login
|
31
|
-
|
32
|
-
selected_records = if cmd.opts.all?
|
33
|
-
records
|
34
|
-
else
|
35
|
-
records.select do |record|
|
36
|
-
cmd.args[:labels].include? record.label
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
cmd.die "No such record(s)." if selected_records.empty?
|
41
|
-
|
42
|
-
selected_records.each do |record|
|
43
|
-
if cmd.opts.terse?
|
44
|
-
fields = %i[label username password].map { |m| record.send(m) }
|
45
|
-
puts fields.join(cmd.opts[:ifs])
|
46
|
-
else
|
47
|
-
puts <<~DETAIL
|
48
|
-
Label: #{record.label}
|
49
|
-
\tUsername: #{record.username}
|
50
|
-
\tPassword: #{record.password}
|
51
|
-
DETAIL
|
52
|
-
end
|
53
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
require "abbrev"
|
6
|
-
require "tty-prompt"
|
7
|
-
|
8
|
-
include KBSecret
|
9
|
-
|
10
|
-
cmd = CLI.create do |c|
|
11
|
-
c.slop do |o|
|
12
|
-
o.banner = <<~HELP
|
13
|
-
Usage:
|
14
|
-
kbsecret new [options] <type> <label>
|
15
|
-
HELP
|
16
|
-
|
17
|
-
o.string "-s", "--session", "the session to contain the record", default: :default
|
18
|
-
o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
|
19
|
-
o.bool "-e", "--echo", "echo input to tty (only affects interactive input)"
|
20
|
-
o.bool "-G", "--generate", "generate secret fields (interactive only)"
|
21
|
-
o.string "-g", "--generator", "the generator to use for secret fields",
|
22
|
-
default: :default
|
23
|
-
o.bool "-x", "--terse", "read fields from input in a terse format"
|
24
|
-
o.string "-i", "--ifs", "separate terse fields with this string", default: CLI.ifs
|
25
|
-
end
|
26
|
-
|
27
|
-
c.dreck do
|
28
|
-
string :type
|
29
|
-
string :label
|
30
|
-
end
|
31
|
-
|
32
|
-
c.ensure_generator!
|
33
|
-
c.ensure_type! :argument
|
34
|
-
c.ensure_session!
|
35
|
-
end
|
36
|
-
|
37
|
-
type = cmd.args[:type]
|
38
|
-
label = cmd.args[:label]
|
39
|
-
resolved_type = CLI::TYPE_ALIASES[type]
|
40
|
-
|
41
|
-
# the code below actually handles the overwriting if necessary, but we fail early here
|
42
|
-
# for friendliness and to avoid prompting the user for input unnecessarily
|
43
|
-
if cmd.session.record?(label) && !cmd.opts.force?
|
44
|
-
cmd.die "Refusing to overwrite an existing record without --force."
|
45
|
-
end
|
46
|
-
|
47
|
-
if cmd.opts.generate?
|
48
|
-
generator = cmd.guard { Generator.new cmd.opts[:generator] }
|
49
|
-
end
|
50
|
-
|
51
|
-
fields = if cmd.opts.terse?
|
52
|
-
STDIN.read.chomp.split cmd.opts[:ifs]
|
53
|
-
else
|
54
|
-
prompt = TTY::Prompt.new
|
55
|
-
klass = Record.class_for(resolved_type)
|
56
|
-
klass.external_fields.map do |field|
|
57
|
-
if cmd.opts.generate? && klass.sensitive?(field)
|
58
|
-
generator.secret
|
59
|
-
else
|
60
|
-
prompt.ask "#{field.capitalize}?",
|
61
|
-
echo: !klass.sensitive?(field) || cmd.opts.echo?
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
cmd.guard do
|
67
|
-
cmd.session.add_record resolved_type, label, *fields, overwrite: cmd.opts.force?
|
68
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
require "clipboard"
|
6
|
-
|
7
|
-
include KBSecret
|
8
|
-
|
9
|
-
cmd = CLI.create do |c|
|
10
|
-
c.slop do |o|
|
11
|
-
o.banner = <<~HELP
|
12
|
-
Usage:
|
13
|
-
kbsecret pass [options] <record>
|
14
|
-
HELP
|
15
|
-
|
16
|
-
o.string "-s", "--session", "the session to search in", default: :default
|
17
|
-
o.bool "-c", "--clipboard", "dump the password in the clipboard"
|
18
|
-
end
|
19
|
-
|
20
|
-
c.dreck do
|
21
|
-
string :label
|
22
|
-
end
|
23
|
-
|
24
|
-
c.ensure_session!
|
25
|
-
end
|
26
|
-
|
27
|
-
label = cmd.args[:label]
|
28
|
-
record = cmd.session[label]
|
29
|
-
|
30
|
-
cmd.die "No such record." unless record
|
31
|
-
cmd.die "'#{record}' is not a login record." unless record.type == :login
|
32
|
-
|
33
|
-
if cmd.opts.clipboard?
|
34
|
-
Clipboard.copy record.password
|
35
|
-
else
|
36
|
-
puts record.password
|
37
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
|
6
|
-
include KBSecret
|
7
|
-
|
8
|
-
cmd = CLI.create do |c|
|
9
|
-
c.slop do |o|
|
10
|
-
o.banner = <<~HELP
|
11
|
-
Usage:
|
12
|
-
kbsecret raw-edit [options] <record>
|
13
|
-
HELP
|
14
|
-
|
15
|
-
o.string "-s", "--session", "the session to search in", default: :default
|
16
|
-
end
|
17
|
-
|
18
|
-
c.dreck do
|
19
|
-
string :label
|
20
|
-
end
|
21
|
-
|
22
|
-
c.ensure_session!
|
23
|
-
end
|
24
|
-
|
25
|
-
label = cmd.args[:label]
|
26
|
-
record = cmd.session[label]
|
27
|
-
|
28
|
-
cmd.die "No such record." unless record
|
29
|
-
|
30
|
-
Process.spawn("#{ENV["EDITOR"]} #{record.path}")
|
31
|
-
record.sync! # just to bump the timestamp
|
@@ -1,44 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
require "tty-prompt"
|
6
|
-
|
7
|
-
include KBSecret
|
8
|
-
|
9
|
-
$VERBOSE = nil # tty-prompt blasts us with irrelevant warnings on 2.4
|
10
|
-
|
11
|
-
cmd = CLI.create do |c|
|
12
|
-
c.slop do |o|
|
13
|
-
o.banner = <<~HELP
|
14
|
-
Usage:
|
15
|
-
kbsecret rm [options] <record [record ...]>
|
16
|
-
HELP
|
17
|
-
|
18
|
-
o.string "-s", "--session", "the session containing the record", default: :default
|
19
|
-
o.bool "-i", "--interactive", "ask for confirmation before deleting"
|
20
|
-
end
|
21
|
-
|
22
|
-
c.dreck do
|
23
|
-
list :string, :labels
|
24
|
-
end
|
25
|
-
|
26
|
-
c.ensure_session!
|
27
|
-
end
|
28
|
-
|
29
|
-
records = cmd.session.records
|
30
|
-
|
31
|
-
selected_records = records.select do |record|
|
32
|
-
cmd.args[:labels].include? record.label
|
33
|
-
end
|
34
|
-
|
35
|
-
cmd.die "No such record(s)." if selected_records.empty?
|
36
|
-
|
37
|
-
tty = TTY::Prompt.new
|
38
|
-
|
39
|
-
confirm = if cmd.opts.interactive?
|
40
|
-
tty.yes?("Delete '#{selected_records.join(", ")}' from the #{cmd.session.label} session?")
|
41
|
-
else true
|
42
|
-
end
|
43
|
-
|
44
|
-
selected_records.each { |r| cmd.session.delete_record(r.label) } if confirm
|
@@ -1,105 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
require "kbsecret"
|
5
|
-
|
6
|
-
include KBSecret
|
7
|
-
|
8
|
-
def new_session(label, cmd)
|
9
|
-
if Config.session?(label) && !cmd.opts.force?
|
10
|
-
cmd.die "Refusing to overwrite an existing session without --force."
|
11
|
-
end
|
12
|
-
|
13
|
-
if cmd.opts[:team]
|
14
|
-
teams = Keybase::Local::Team.list_self_memberships.teams
|
15
|
-
|
16
|
-
unless teams.map(&:fq_name).include?(cmd.opts[:team])
|
17
|
-
if cmd.opts.create_team?
|
18
|
-
cmd.guard do
|
19
|
-
Keybase::Local::Team.create_team cmd.opts[:team]
|
20
|
-
Keybase::Local::Team.add_members cmd.opts[:team], users: [{
|
21
|
-
username: Keybase::Local.current_user,
|
22
|
-
role: "admin",
|
23
|
-
}]
|
24
|
-
end
|
25
|
-
else
|
26
|
-
cmd.die "No such team (either nonexistent or non-member)."
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
Config.configure_session(label, team: cmd.opts[:team], root: label)
|
31
|
-
else
|
32
|
-
cmd.die "Missing `-r', `--root' option." unless cmd.opts[:root]
|
33
|
-
|
34
|
-
cmd.opts[:users].each do |user|
|
35
|
-
cmd.die "Nonexistent Keybase user: '#{user}'." unless Keybase::API.user? user
|
36
|
-
end
|
37
|
-
|
38
|
-
unless cmd.opts[:users].include? Keybase::Local.current_user
|
39
|
-
cmd.warn "You didn't include yourself in the user list, but I'll add you."
|
40
|
-
cmd.opts[:users] << Keybase::Local.current_user
|
41
|
-
end
|
42
|
-
|
43
|
-
Config.configure_session(label, users: cmd.opts[:users], root: cmd.opts[:root])
|
44
|
-
|
45
|
-
unless cmd.opts.no_notify? && cmd.opts[:users] != [Keybase::Local.current_user]
|
46
|
-
users = cmd.opts[:users].join(",")
|
47
|
-
|
48
|
-
Keybase::Local::Chat.send_message cmd.opts[:users], <<~MESSAGE
|
49
|
-
You've been added to a KBSecret session!
|
50
|
-
|
51
|
-
To access this session, please run the following:
|
52
|
-
|
53
|
-
```
|
54
|
-
$ kbsecret session new -r '#{cmd.opts[:root]}' -u #{users} <label>
|
55
|
-
```
|
56
|
-
|
57
|
-
If you don't have KBSecret installed, you can install it from `gem`:
|
58
|
-
|
59
|
-
```
|
60
|
-
$ gem install kbsecret
|
61
|
-
```
|
62
|
-
MESSAGE
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def rm_session(label, cmd)
|
68
|
-
cmd.session.unlink! if cmd.opts.delete?
|
69
|
-
Config.deconfigure_session label
|
70
|
-
end
|
71
|
-
|
72
|
-
cmd = CLI.create do |c|
|
73
|
-
c.slop cmds: %w[new rm] do |o|
|
74
|
-
o.banner = <<~HELP
|
75
|
-
Usage:
|
76
|
-
kbsecret session [options] <new|rm> <label>
|
77
|
-
HELP
|
78
|
-
|
79
|
-
o.string "-t", "--team", "the team to create the session under"
|
80
|
-
o.array "-u", "--users", "the Keybase users", default: [Keybase::Local.current_user]
|
81
|
-
o.string "-r", "--root", "the secret root directory"
|
82
|
-
o.bool "-c", "--create-team", "create the Keybase team if it does not exist"
|
83
|
-
o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
|
84
|
-
o.bool "-n", "--no-notify", "do not send a notification to session members"
|
85
|
-
o.bool "-d", "--delete", "unlink the session in addition to deconfiguration"
|
86
|
-
end
|
87
|
-
|
88
|
-
c.dreck do
|
89
|
-
string :command
|
90
|
-
string :session
|
91
|
-
end
|
92
|
-
|
93
|
-
c.ensure_session! :argument if c.args[:command] == "rm"
|
94
|
-
end
|
95
|
-
|
96
|
-
session_label = cmd.args[:session]
|
97
|
-
|
98
|
-
case cmd.args[:command]
|
99
|
-
when "new"
|
100
|
-
new_session session_label, cmd
|
101
|
-
when "rm"
|
102
|
-
rm_session session_label, cmd
|
103
|
-
else
|
104
|
-
cmd.die "Unknown subcommand: '#{cmd.args[:command]}'."
|
105
|
-
end
|