kbsecret 0.7.0 → 0.7.1

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