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