kbsecret 0.9.4 → 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cd2a0e23781f3ff9dee95614c891c6189b0f2c55
4
- data.tar.gz: da14eb5eaff0117faf18f3f1f12930d1c9119137
3
+ metadata.gz: a93f10c5ff4add094ea83dc950239250ffda4e31
4
+ data.tar.gz: 3d8ddfe46e26ed3751d541b762c56804fb194c35
5
5
  SHA512:
6
- metadata.gz: 1b45a84051c81d24ec69163ec858d7a2cb05d6ce97141497747429816aab6dde958db5580b31f6ed57be33517356efc73a4300d08487f7bb84cdf5f29ad7d761
7
- data.tar.gz: 76b13c940c7d334d2df583f9ea22a198761690febf2c0dc68aa7cf20a87cc9f6cbb75585ab8dbbed66c0b0b14d9c62d1e1deaf87f3a2720cd581a4b1da12ffa4
6
+ metadata.gz: d92789c5a47dfccb4422545b9bdf5c7bfc3d086599783336c982cc02a2e37749bab41e9cfc5579db9a3451b726683e044d3efaa302eefd3e5e79d2037af31719
7
+ data.tar.gz: 2fc805de715e71bbfc577f9f1258b9b2b46d5cad421126173afd6d8d3864b386e8da035c6b3e99caaa5e361f86d49abfec5e4a93a982dad050ce9e5b0318d5be
data/README.md CHANGED
@@ -50,7 +50,7 @@ $ cp man/*.1 ${YOUR_MAN_DIR}
50
50
 
51
51
  ### Shell Completion
52
52
 
53
- KBSecret provides shell completion functions for bash and zsh.
53
+ KBSecret provides shell completion functions for bash, zsh, and fish.
54
54
 
55
55
  To generate the completions for Bash:
56
56
 
@@ -64,6 +64,8 @@ $ cp completions/kbsecret.bash ${YOUR_COMPLETION_DIR}
64
64
  To use the completions for zsh, add the completions directory to your `$fpath` or copy the
65
65
  `completions/_kbsecret` file to any of the directories in it.
66
66
 
67
+ To use the fish completions, copy `completions/kbsecret.fish` to your `~/.config/fish/completions` folder.
68
+
67
69
  Please feel free to contribute completion scripts for other shells!
68
70
 
69
71
  ### Contributing
@@ -78,6 +80,8 @@ If you have an idea for a new feature, please suggest it! Pull requests are also
78
80
  If you'd like help or would just like to chat about KBSecret's development, please
79
81
  join us in `#kbsecret` on Freenode.
80
82
 
83
+ We also have a Keybase team. Please let us know on IRC if you'd like to be added to it.
84
+
81
85
  ## Licensing
82
86
 
83
87
  KBSecret is licensed under the MIT License.
@@ -12,7 +12,7 @@ require_relative "kbsecret/cli"
12
12
 
13
13
  # The primary namespace for {KBSecret}.
14
14
  module KBSecret
15
- # fail very early if the user doesn't have keybase and KBFS running
15
+ # fail very early if the user doesn't have Keybase running and KBFS mounted
16
16
  raise Keybase::Local::Exceptions::KeybaseNotRunningError unless Keybase::Local.running?
17
- raise Keybase::Local::Exceptions::KBFSNotRunningError unless Dir.exist?(Config[:mount])
17
+ raise Keybase::Local::Exceptions::KBFSNotRunningError unless Keybase::Local::KBFS.mounted?
18
18
  end
@@ -8,6 +8,7 @@ require "abbrev"
8
8
  module KBSecret
9
9
  # An encapsulation of useful methods for kbsecret's CLI.
10
10
  # Most methods in this class assume that they are being called from the context of
11
+ # a command-line utility.
11
12
  class CLI
12
13
  # Abbreviations for record types (e.g., `env` for `environment`).
13
14
  TYPE_ALIASES = Hash.new { |_, k| k }.update(Abbrev.abbrev(Record.record_types)).freeze
@@ -37,12 +37,14 @@ selected_records = if cmd.opts.all?
37
37
  end
38
38
  end
39
39
 
40
- selected_records.each do |record|
41
- if cmd.opts.value_only?
42
- puts record.value
43
- elsif cmd.opts.no_export?
44
- puts record.to_assignment
45
- else
46
- puts record.to_export
47
- end
48
- end
40
+ cmd.die "No such record(s)." if selected_records.empty?
41
+
42
+ env_output = if cmd.opts.no_export?
43
+ selected_records.map(&:to_assignment).join(" ")
44
+ elsif cmd.opts.value_only?
45
+ selected_records.map(&:value).join("\n")
46
+ else
47
+ selected_records.map(&:to_export).join("\n")
48
+ end
49
+
50
+ puts env_output
@@ -9,7 +9,7 @@ cmd = CLI.create do |c|
9
9
  c.slop cmds: %w[new rm] do |o|
10
10
  o.banner = <<~HELP
11
11
  Usage:
12
- kbsecret new-generator [options] <new|rm> <generator>
12
+ kbsecret generator [options] <new|rm> <generator>
13
13
  HELP
14
14
 
15
15
  o.string "-F", "--format", "the format of the secrets generated", default: "hex"
@@ -37,6 +37,8 @@ selected_records = if cmd.opts.all?
37
37
  end
38
38
  end
39
39
 
40
+ cmd.die "No such record(s)." if selected_records.empty?
41
+
40
42
  selected_records.each do |record|
41
43
  if cmd.opts.terse?
42
44
  fields = %i[label username password].map { |m| record.send(m) }
@@ -12,12 +12,10 @@ cmd = CLI.create do |c|
12
12
  o.banner = <<~HELP
13
13
  Usage:
14
14
  kbsecret new [options] <type> <label>
15
- kbsecret new [options] --args <type> <label> <fields>
16
15
  HELP
17
16
 
18
17
  o.string "-s", "--session", "the session to contain the record", default: :default
19
18
  o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
20
- o.bool "-a", "--args", "use trailing arguments as fields, even with a tty"
21
19
  o.bool "-e", "--echo", "echo input to tty (only affects interactive input)"
22
20
  o.bool "-G", "--generate", "generate secret fields (interactive only)"
23
21
  o.string "-g", "--generator", "the generator to use for secret fields",
@@ -29,7 +27,6 @@ cmd = CLI.create do |c|
29
27
  c.dreck do
30
28
  string :type
31
29
  string :label
32
- list :string, :fields if c.opts.args?
33
30
  end
34
31
 
35
32
  c.ensure_generator!
@@ -49,28 +46,19 @@ if cmd.opts.generate?
49
46
  generator = cmd.guard { Generator.new cmd.opts[:generator] }
50
47
  end
51
48
 
52
- fields = if ($stdin.tty? && !cmd.opts.args?) || cmd.opts.terse?
49
+ fields = if cmd.opts.terse?
50
+ STDIN.read.chomp.split cmd.opts[:ifs]
51
+ else
53
52
  prompt = TTY::Prompt.new
54
53
  klass = Record.class_for(resolved_type)
55
-
56
- if cmd.opts.terse?
57
- fields = STDIN.read.chomp.split cmd.opts[:ifs]
58
- else
59
- klass.external_fields.map do |field|
60
- if cmd.opts.generate? && klass.sensitive?(field)
61
- generator.secret
62
- else
63
- prompt.ask "#{field.capitalize}?",
64
- echo: !klass.sensitive?(field) || cmd.opts.echo?
65
- end
54
+ klass.external_fields.map do |field|
55
+ if cmd.opts.generate? && klass.sensitive?(field)
56
+ generator.secret
57
+ else
58
+ prompt.ask "#{field.capitalize}?",
59
+ echo: !klass.sensitive?(field) || cmd.opts.echo?
66
60
  end
67
61
  end
68
- else
69
- cmd.warn <<~WARNING
70
- Argument input is dangerous and deprecated, and will be removed by 1.0.
71
- WARNING
72
-
73
- cmd.args[:fields]
74
62
  end
75
63
 
76
64
  cmd.guard { cmd.session.add_record(resolved_type, label, *fields) }
@@ -6,67 +6,6 @@ require "kbsecret"
6
6
 
7
7
  include KBSecret
8
8
 
9
- cmd = CLI.create do |c|
10
- c.slop do |o|
11
- o.banner = <<~HELP
12
- Usage:
13
- kbsecret new-session [options]
14
- HELP
9
+ STDERR.puts "This command has been deprecated in favor of 'kbsecret-session'. It will be removed in release 1.0"
15
10
 
16
- o.string "-t", "--team", "the team to create the session under"
17
- o.string "-l", "--label", "the session label", required: true
18
- o.array "-u", "--users", "the keybase users", default: [Keybase::Local.current_user]
19
- o.string "-r", "--root", "the secret root directory"
20
- o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
21
- o.bool "-n", "--no-notify", "do not send a notification to session members"
22
- end
23
- end
24
-
25
- session_label = cmd.opts[:label]
26
-
27
- if Config.session?(session_label) && !cmd.opts.force?
28
- cmd.die "Refusing to overwrite an existing session without --force."
29
- end
30
-
31
- if cmd.opts[:team]
32
- teams = Keybase::Local::Team.list_memberships["teams"]
33
-
34
- unless teams.any? { |t| t["fq_name"] == cmd.opts[:team] }
35
- cmd.die "No such team (either nonexistent or non-member)."
36
- end
37
-
38
- Config.configure_session(session_label, team: cmd.opts[:team], root: session_label)
39
- else
40
- cmd.die "Missing `-r', `--root' option." unless cmd.opts[:root]
41
-
42
- cmd.opts[:users].each do |user|
43
- cmd.die "Nonexistent Keybase user: '#{user}'." unless Keybase::API.user? user
44
- end
45
-
46
- unless cmd.opts[:users].include? Keybase::Local.current_user
47
- cmd.warn "You didn't include yourself in the user list, but I'll add you."
48
- cmd.opts[:users] << Keybase::Local.current_user
49
- end
50
-
51
- Config.configure_session(session_label, users: cmd.opts[:users], root: cmd.opts[:root])
52
-
53
- unless cmd.opts.no_notify? && cmd.opts[:users] != [Keybase::Local.current_user]
54
- users = cmd.opts[:users].join(",")
55
-
56
- Keybase::Local::Chat.send_message cmd.opts[:users], <<~MESSAGE
57
- You've been added to a KBSecret session!
58
-
59
- To access this session, please run the following:
60
-
61
- ```
62
- $ kbsecret new-session -l '<your label>' -r '#{cmd.opts[:root]}' -u #{users}
63
- ```
64
-
65
- If you don't have KBSecret installed, you can install it from `gem`:
66
-
67
- ```
68
- $ gem install kbsecret
69
- ```
70
- MESSAGE
71
- end
72
- end
11
+ exec "kbsecret", "session", "new", *ARGV
@@ -12,7 +12,7 @@ cmd = CLI.create do |c|
12
12
  c.slop do |o|
13
13
  o.banner = <<~HELP
14
14
  Usage:
15
- kbsecret rm [options] <record>
15
+ kbsecret rm [options] <record [record ...]>
16
16
  HELP
17
17
 
18
18
  o.string "-s", "--session", "the session containing the record", default: :default
@@ -20,21 +20,25 @@ cmd = CLI.create do |c|
20
20
  end
21
21
 
22
22
  c.dreck do
23
- string :label
23
+ list :string, :labels
24
24
  end
25
25
 
26
26
  c.ensure_session!
27
27
  end
28
28
 
29
- label = cmd.args[:label]
29
+ records = cmd.session.records
30
30
 
31
- cmd.die "Can't delete a nonexistent record." unless cmd.session.record? label
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?
32
36
 
33
37
  tty = TTY::Prompt.new
34
38
 
35
39
  confirm = if cmd.opts.interactive?
36
- tty.yes?("Delete '#{label}' from the #{cmd.session.label} session?")
40
+ tty.yes?("Delete '#{selected_records.join(", ")}' from the #{cmd.session.label} session?")
37
41
  else true
38
42
  end
39
43
 
40
- cmd.session.delete_record(label) if confirm
44
+ selected_records.each { |r| cmd.session.delete_record(r.label) } if confirm
@@ -5,25 +5,6 @@ require "kbsecret"
5
5
 
6
6
  include KBSecret
7
7
 
8
- cmd = CLI.create do |c|
9
- c.slop do |o|
10
- o.banner = <<~HELP
11
- Usage:
12
- kbsecret rm-session [options] <session>
13
- HELP
8
+ STDERR.puts "This command has been deprecated in favor of 'kbsecret-session'. It will be removed in release 1.0"
14
9
 
15
- o.bool "-d", "--delete", "unlink the session in addition to deconfiguration"
16
- end
17
-
18
- c.dreck do
19
- string :session
20
- end
21
-
22
- c.ensure_session! :argument
23
- end
24
-
25
- label = cmd.args[:session]
26
-
27
- cmd.session.unlink! if cmd.opts.delete?
28
-
29
- Config.deconfigure_session label
10
+ exec "kbsecret", "session", "rm", *ARGV
@@ -0,0 +1,94 @@
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_memberships["teams"]
15
+
16
+ unless teams.any? { |t| t["fq_name"] == cmd.opts[:team] }
17
+ cmd.die "No such team (either nonexistent or non-member)."
18
+ end
19
+
20
+ Config.configure_session(label, team: cmd.opts[:team], root: label)
21
+ else
22
+ cmd.die "Missing `-r', `--root' option." unless cmd.opts[:root]
23
+
24
+ cmd.opts[:users].each do |user|
25
+ cmd.die "Nonexistent Keybase user: '#{user}'." unless Keybase::API.user? user
26
+ end
27
+
28
+ unless cmd.opts[:users].include? Keybase::Local.current_user
29
+ cmd.warn "You didn't include yourself in the user list, but I'll add you."
30
+ cmd.opts[:users] << Keybase::Local.current_user
31
+ end
32
+
33
+ Config.configure_session(label, users: cmd.opts[:users], root: cmd.opts[:root])
34
+
35
+ unless cmd.opts.no_notify? && cmd.opts[:users] != [Keybase::Local.current_user]
36
+ users = cmd.opts[:users].join(",")
37
+
38
+ Keybase::Local::Chat.send_message cmd.opts[:users], <<~MESSAGE
39
+ You've been added to a KBSecret session!
40
+
41
+ To access this session, please run the following:
42
+
43
+ ```
44
+ $ kbsecret new-session -r '#{cmd.opts[:root]}' -u #{users} <label>
45
+ ```
46
+
47
+ If you don't have KBSecret installed, you can install it from `gem`:
48
+
49
+ ```
50
+ $ gem install kbsecret
51
+ ```
52
+ MESSAGE
53
+ end
54
+ end
55
+ end
56
+
57
+ def rm_session(label, cmd)
58
+ cmd.session.unlink! if cmd.opts.delete?
59
+ Config.deconfigure_session label
60
+ end
61
+
62
+ cmd = CLI.create do |c|
63
+ c.slop cmds: %w[new rm] do |o|
64
+ o.banner = <<~HELP
65
+ Usage:
66
+ kbsecret session [options] <new|rm> <label>
67
+ HELP
68
+
69
+ o.string "-t", "--team", "the team to create the session under"
70
+ o.array "-u", "--users", "the keybase users", default: [Keybase::Local.current_user]
71
+ o.string "-r", "--root", "the secret root directory"
72
+ o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
73
+ o.bool "-n", "--no-notify", "do not send a notification to session members"
74
+ o.bool "-d", "--delete", "unlink the session in addition to deconfiguration"
75
+ end
76
+
77
+ c.dreck do
78
+ string :command
79
+ string :session
80
+ end
81
+
82
+ c.ensure_session! :argument if c.args[:command] == "rm"
83
+ end
84
+
85
+ session_label = cmd.args[:session]
86
+
87
+ case cmd.args[:command]
88
+ when "new"
89
+ new_session session_label, cmd
90
+ when "rm"
91
+ rm_session session_label, cmd
92
+ else
93
+ cmd.die "Unknown subcommand: '#{cmd.args[:command]}'."
94
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module KBSecret
4
4
  # kbsecret's current version
5
- VERSION = "0.9.4"
5
+ VERSION = "0.9.5"
6
6
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kbsecret
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.9.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Woodruff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-11 00:00:00.000000000 Z
11
+ date: 2017-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aruba
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0.pre.alpha.2
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0.pre.alpha.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: fpm
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -66,6 +80,20 @@ dependencies:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
82
  version: 0.7.3
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.51'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.51'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: simplecov
71
99
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +184,14 @@ dependencies:
156
184
  requirements:
157
185
  - - "~>"
158
186
  - !ruby/object:Gem::Version
159
- version: '0.7'
187
+ version: '0.9'
160
188
  type: :runtime
161
189
  prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
164
192
  - - "~>"
165
193
  - !ruby/object:Gem::Version
166
- version: '0.7'
194
+ version: '0.9'
167
195
  - !ruby/object:Gem::Dependency
168
196
  name: slop
169
197
  requirement: !ruby/object:Gem::Requirement
@@ -217,6 +245,7 @@ files:
217
245
  - lib/kbsecret/cli/kbsecret-raw-edit
218
246
  - lib/kbsecret/cli/kbsecret-rm
219
247
  - lib/kbsecret/cli/kbsecret-rm-session
248
+ - lib/kbsecret/cli/kbsecret-session
220
249
  - lib/kbsecret/cli/kbsecret-sessions
221
250
  - lib/kbsecret/cli/kbsecret-stash-file
222
251
  - lib/kbsecret/cli/kbsecret-todo