kbsecret 0.7.0 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bd4688af12e409cc9c13577ff5e2471773504790
4
- data.tar.gz: d72010806cfb3e8f132b3aeae87f53664e34235a
3
+ metadata.gz: 123474c33b029cd6b8934c0e19aaed74979e097c
4
+ data.tar.gz: f5c40ef2c8e2fba8973c4ff3034998e8c89080a3
5
5
  SHA512:
6
- metadata.gz: c520121a121d1a83583391546502e7491a831d090cfb3edc968ec1a6205639f82cc954e0a9793f6b33764c7e5ee61d94c5d85ef3edab634e43efcaa3953d943e
7
- data.tar.gz: 0bbbabee51ef4a1e2676b5251d25bce45157be2d3f69e9c4e34ba82c3cddba779a6b9c247a5f3576444711d8333ba824bacaffc49d1c5b603aa4db521082c7e9
6
+ metadata.gz: 3b1fbd12a21eb016fbe174d72433ffc501284fc0edb43d8c47914f38ae76804927a449b696bb05205e203e795cdc2fe9c870ac1ffe5eab305d12c0c4c398bc3a
7
+ data.tar.gz: '0168fee1a6e9baf4b875b7883f351f5d9378733074e6d165309e69339f52da479ed8244774451067e4eeeade851b3602363e835ff2174302f7714043ca9fcb5b'
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
- kbsecret
1
+ KBSsecret
2
2
  ========
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/kbsecret.svg)](https://badge.fury.io/rb/kbsecret)
5
5
 
6
6
  *Note*: This is still a work in process. Use it with caution.
7
7
 
8
- kbsecret is a combined library/utility that provides a secret management
8
+ KBSecret is a combined library/utility that provides a secret management
9
9
  interface for [KBFS](https://keybase.io/docs/kbfs) and
10
10
  [Keybase](https://keybase.io/).
11
11
 
@@ -20,12 +20,12 @@ interface for [KBFS](https://keybase.io/docs/kbfs) and
20
20
 
21
21
  ### Installation
22
22
 
23
- kbsecret is available via [RubyGems](https://rubygems.org/gems/kbsecret):
23
+ KBSecret is available via [RubyGems](https://rubygems.org/gems/kbsecret):
24
24
 
25
25
  ```bash
26
26
  $ gem install kbsecret
27
27
 
28
- # or, install the prerelease:
28
+ # or, install the latest prerelease:
29
29
 
30
30
  $ gem install --pre kbsecret
31
31
  ```
@@ -91,7 +91,7 @@ export BRAND_NEW_API='0xBADBEEF'
91
91
 
92
92
  ### Manual Pages
93
93
 
94
- kbsecret's manual pages can be found online
94
+ KBSecret's manual pages can be found online
95
95
  [here](https://yossarian.net/docs/kbsecret-man/kbsecret.1).
96
96
 
97
97
  If you'd like to generate the roff versions for `man(1)`, you'll need `ronn(1)`:
@@ -103,7 +103,7 @@ $ cp man/*.1 ${YOUR_MAN_DIR}
103
103
 
104
104
  ### Shell Completion
105
105
 
106
- kbsecret provides shell completion functions for bash.
106
+ KBSecret provides shell completion functions for bash.
107
107
 
108
108
  To generate them:
109
109
 
@@ -17,9 +17,15 @@ cmd = CLI.create do |c|
17
17
  o.array "-u", "--users", "the keybase users", default: [Keybase.current_user]
18
18
  o.string "-r", "--root", "the secret root directory"
19
19
  o.bool "-f", "--force", "force creation (ignore overwrites, etc.)"
20
+ o.bool "-n", "--no-notify", "do not send a notification to session members"
20
21
  end
21
22
  end
22
23
 
24
+ unless cmd.opts[:users].include? Keybase.current_user
25
+ cmd.warn "You didn't include yourself in the user list, but I'll add you."
26
+ cmd.opts[:users] << Keybase.current_user
27
+ end
28
+
23
29
  session_label = cmd.opts[:label]
24
30
 
25
31
  if Config.session?(session_label) && !cmd.opts.force?
@@ -32,3 +38,23 @@ session_hash = {
32
38
  }
33
39
 
34
40
  Config.configure_session(session_label, session_hash)
41
+
42
+ unless cmd.opts.no_notify? && cmd.opts[:users] != [Keybase.current_user]
43
+ users = cmd.opts[:users].join(",")
44
+
45
+ Keybase::Chat.send_message cmd.opts[:users], <<~EOM
46
+ You've been added to a KBSecret session!
47
+
48
+ To access this session, please run the following:
49
+
50
+ ```
51
+ $ kbsecret new-session -l '<your label>' -r '#{cmd.opts[:root]}' -u #{users}
52
+ ```
53
+
54
+ If you don't have KBSecret installed, you can install it from `gem`:
55
+
56
+ ```
57
+ $ gem install kbsecret
58
+ ```
59
+ EOM
60
+ end
@@ -47,10 +47,6 @@ module KBSecret
47
47
  # configuration defaults
48
48
  # @api private
49
49
  DEFAULT_CONFIG = {
50
- session_root: File.join("/keybase/private/",
51
- Keybase.current_user,
52
- "kbsecret"),
53
-
54
50
  mount: "/keybase",
55
51
  sessions: DEFAULT_SESSION,
56
52
  generators: DEFAULT_GENERATOR,
@@ -149,7 +145,6 @@ module KBSecret
149
145
  @config[:sessions].merge!(DEFAULT_SESSION)
150
146
  @config[:generators].merge!(DEFAULT_GENERATOR)
151
147
 
152
- FileUtils.mkdir_p @config[:session_root]
153
148
  sync!
154
149
  end
155
150
  end
@@ -27,6 +27,13 @@ module KBSecret
27
27
  end
28
28
  end
29
29
 
30
+ # Raised during session load if an error occurs.
31
+ class SessionLoadError < KBSecretError
32
+ def initialize(msg)
33
+ super "Session loading failure: #{msg}"
34
+ end
35
+ end
36
+
30
37
  # Raised during session lookup if an unknown session is requested.
31
38
  class SessionUnknownError < KBSecretError
32
39
  def initialize(sess)
@@ -6,6 +6,10 @@ module KBSecret
6
6
  module Record
7
7
  # Represents a record containing an environment variable and value.
8
8
  class Environment < Abstract
9
+ # @!attribute variable
10
+ # @return [String] the environment variable
11
+ # @!attribute value
12
+ # @return [String] the value of the environment value
9
13
  data_field :variable, sensitive: false
10
14
  data_field :value
11
15
 
@@ -4,6 +4,10 @@ module KBSecret
4
4
  module Record
5
5
  # Represents a record containing a login (username, password) pair.
6
6
  class Login < Abstract
7
+ # @!attribute username
8
+ # @return [String] the username
9
+ # @!attribute password
10
+ # @return [String] the password
7
11
  data_field :username, sensitive: false
8
12
  data_field :password
9
13
  end
@@ -4,6 +4,10 @@ module KBSecret
4
4
  module Record
5
5
  # Represents a record containing a code snippet and its description.
6
6
  class Snippet < Abstract
7
+ # @!attribute code
8
+ # @return [String] the code snippet
9
+ # @!attribute description
10
+ # @return [String] the description of the code snippet
7
11
  data_field :code, sensitive: false
8
12
  data_field :description, sensitive: false
9
13
  end
@@ -16,6 +16,17 @@ module KBSecret
16
16
  # The stop time is the date and time at which the item was *either*
17
17
  # last suspended via {#suspend!} *or* finished via {#complete!}.
18
18
  class Todo < Abstract
19
+ # @!attribute todo
20
+ # @return [String] the todo message
21
+ # @!attribute status
22
+ # @return [String] the todo record's status (one of "started", "suspended", or "complete")
23
+ # @note This is an internal field.
24
+ # @!attribute start
25
+ # @return [String] a string representation of the record's (last) start time
26
+ # @note This is an internal field.
27
+ # @!attribute stop
28
+ # @return [String] a string representation of the record's (last) stop time
29
+ # @note This is an internal field.
19
30
  data_field :todo, sensitive: false
20
31
  data_field :status, sensitive: false, internal: true
21
32
  data_field :start, sensitive: false, internal: true
@@ -4,6 +4,8 @@ module KBSecret
4
4
  module Record
5
5
  # Represents a record containing unstructured text.
6
6
  class Unstructured < Abstract
7
+ # @!attribute text
8
+ # @return [String] the unstructured text of the record
7
9
  data_field :text, sensitive: false
8
10
  end
9
11
  end
@@ -17,6 +17,7 @@ module KBSecret
17
17
  attr_reader :directory
18
18
 
19
19
  # @param label [String, Symbol] the label of the session to initialize
20
+ # @raise [SessionLoadError] if the session has no users or any invalid Keybase users
20
21
  # @note This does not *create* a new session, but loads one already
21
22
  # specified in {Config::CONFIG_FILE}. To *create* a new session,
22
23
  # see {Config.configure_session}.
@@ -24,7 +25,13 @@ module KBSecret
24
25
  @label = label.to_sym
25
26
  @config = Config.session(@label)
26
27
 
27
- @directory = rel_path config[:root], mkdir: true
28
+ raise SessionLoadError, "no users in session" if @config[:users].empty?
29
+
30
+ @config[:users].each do |user|
31
+ raise SessionLoadError, "unknown Keybase user: '#{user}'" unless Keybase::API.user? user
32
+ end
33
+
34
+ @directory = rel_path mkdir: true
28
35
  @records = load_records!
29
36
  end
30
37
 
@@ -57,9 +64,9 @@ module KBSecret
57
64
  # @param label [String, Symbol] the new record's label
58
65
  # @param args [Array<String>] the record-type specific arguments
59
66
  # @return [void]
60
- # @raise UnknownRecordTypeError if the requested type does not exist
67
+ # @raise [UnknownRecordTypeError] if the requested type does not exist
61
68
  # in {Record.record_types}
62
- # @raise RecordCreationArityError if the number of specified record
69
+ # @raise [RecordCreationArityError] if the number of specified record
63
70
  # arguments does not match the record type's constructor
64
71
  def add_record(type, label, *args)
65
72
  klass = Record.class_for(type.to_sym)
@@ -116,13 +123,14 @@ module KBSecret
116
123
  end
117
124
  end
118
125
 
119
- # @param rel [String, Symbol] the "root" of the session
120
126
  # @param mkdir [Boolean] whether or not to make the session directory
121
127
  # @return [String] the fully qualified path to the session
122
128
  # @api private
123
- def rel_path(rel, mkdir: false)
124
- # /keybase/private/[username]/kbsecret/[session]
125
- path = File.join(Config[:session_root], rel)
129
+ def rel_path(mkdir: false)
130
+ # /keybase/private/[u1,u2,...,uN]/kbsecret/[session]
131
+ path = File.join(Config[:mount], "private",
132
+ Keybase::U[@config[:users]],
133
+ "kbsecret", @config[:root])
126
134
 
127
135
  FileUtils.mkdir_p path if mkdir
128
136
 
data/lib/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module KBSecret
4
4
  # kbsecret's current version
5
- VERSION = "0.7.0"
5
+ VERSION = "0.7.1"
6
6
  end
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.7.0
4
+ version: 0.7.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: 2017-07-15 00:00:00.000000000 Z
11
+ date: 2017-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fpm
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.0.8
117
+ version: 0.1.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.0.8
124
+ version: 0.1.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: slop
127
127
  requirement: !ruby/object:Gem::Requirement