sym 2.0.3 → 2.1.0

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: 9d1c0e747eef0d680cc7a8f69f01173744c4e29d
4
- data.tar.gz: 194dc2f5f74011848f9673bf2d4e5b018baa166f
3
+ metadata.gz: 36befc7ec0737c70c0744632ffd3d161797bf169
4
+ data.tar.gz: 060b3db5e9073057911ada5f5dedcc81ab40cab5
5
5
  SHA512:
6
- metadata.gz: b7bb4fed47d8a416622963d25209033dcf444f505db8c16edd08be6ef8a16beee92762e678cfb6f75f0588c92c2b0ebdb1058e5dd9c96e4382c598cac6a28550
7
- data.tar.gz: 3df569a2f8ea1995401c0e916dbfd34bcf8bcb41ca6747fe51918fbe7dc89e3025f8aa4c90dc05997676d5507ea4bba126c5c7e60ea870597d4a0fdd2819daa1
6
+ metadata.gz: 6b511d18b5cb0d30e57ee5636ba140910831dbe8d21bed29277d314c9d18807505140e7e298ef1da4fb03d0c5a7f9740dfacaab0e18404f05e510c5aafa1e8a8
7
+ data.tar.gz: f66653d1548d9e4daa92e8edd9f1efa081f840fb1b6fc6e51b7e93c4577d16ac5f3712b7773faeef232c1583f875b8d6aab266b22d4ba90227c10423ebc84e1c
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --format progress
2
2
  --color
3
+ --order rand
@@ -1,3 +1,17 @@
1
+ **2.1.0** (January 22, 2017)
2
+
3
+ * Added two sub-commands to handle updating and moving existing keys:
4
+ - adding a password to an existing key
5
+ - adding an existing key to the keychain.
6
+
7
+ To add a password to an existing key:
8
+
9
+ > `sym [ -k key | -K keyfile | -i | -x <name> ] -p `
10
+
11
+ To add existing key to a keychain:
12
+
13
+ > `sym [ -k key | -K keyfile | -i ] -x <name> `
14
+
1
15
  **2.0.3** (January 22, 2017)
2
16
 
3
17
  * Removed clipboard copy functionality, as it's easy to achieve with `pbcopy`.
data/README.md CHANGED
@@ -73,9 +73,7 @@ Or install it into the global namespace with `gem install` command:
73
73
 
74
74
  After gem installation, an message will tell you to install bash completion into to your `~/.bashrc` or equivalent:
75
75
 
76
- ```bash
77
- sym --bash-completion ~/.bashrc
78
- ```
76
+ sym --bash-completion ~/.bashrc
79
77
 
80
78
  Should you choose to install it (this part is optional), you will be able to use "tab-tab" after typing `sym` and you'll be able to choose from all supported flags.
81
79
 
@@ -119,7 +117,7 @@ Or save it to a file:
119
117
 
120
118
  Or create a password-protected key, and save it to a file:
121
119
 
122
- sym -gcp -o ~/.secret
120
+ sym -gp -o ~/.secret
123
121
  # New Password: ••••••••••
124
122
  # Confirm Password: ••••••••••
125
123
 
@@ -147,30 +145,43 @@ Now, whenever you need to encrypt something, in addition to the `-k` and `-K` yo
147
145
 
148
146
  Finally, you can delete a key from KeyChain access by running:
149
147
 
150
- sym --keychain-del staging
148
+ keychain <name> delete
151
149
 
152
150
  #### KeyChain Key Management
153
151
 
154
- Another tiny executable supplied with this library is called `keychain`
152
+ `keychain` is an additional script installed with the gem, that can be used to read (find), update (add), and delete keychain entries used by `sym`.
155
153
 
156
- ```bash
157
- Usage: keychain item [ add <contents> | find | delete ]
158
- ```
159
- You can use this to add an existing key that can be used with the `sym` later. Of course you can also use the tool to find or delete it.
154
+ It's help message is self-explanatory:
155
+
156
+ Usage: keychain <name> [ add <contents> | find | delete ]
157
+
158
+ #### Moving a Key to Keychain
159
+
160
+ You can easily move a key to a keychain by combinding -k or -K to read the key, and -x to write it.
161
+
162
+ sym -k $mykey -x mykey
163
+
164
+ #### Adding Password to Existing Key
165
+
166
+ You can add a password to a key by combining one of the key description flags (-k, -K, -i) and then also -p.
167
+
168
+ sym -k $mykey -p -x moo
169
+
170
+ The above example will take an unencrypted key passed in $k, ask for a password and save password protected key into the keychain with name "moo".
160
171
 
161
172
  #### Encryption and Decryption
162
173
 
163
174
  This may be a good time to take a look at the full help message for the `sym` tool, shown naturally with a `-h` or `--help` option.
164
175
 
165
176
  ```
166
- Sym (2.0.2) – encrypt/decrypt data with a private key
177
+ Sym (2.0.0) – encrypt/decrypt data with a private key
167
178
 
168
179
  Usage:
169
180
  # Generate a new key:
170
181
  sym -g [ -c ] [ -p ] [ -x keychain ] [ -o keyfile | -q | ]
171
182
 
172
183
  # Encrypt/Decrypt
173
- sym [ -d | -e ] [ -f <file> | -s <string> ]
184
+ sym [ -d | -e ] [ -f <file> | -s <string> ]
174
185
  [ -k key | -K keyfile | -x keychain | -i ]
175
186
  [ -o <output file> ]
176
187
 
@@ -182,24 +193,28 @@ Modes:
182
193
  -d, --decrypt decrypt mode
183
194
  -t, --edit decrypt, open an encr. file in an $EDITOR
184
195
 
185
- Create a new private key:
196
+ Create a private key:
186
197
  -g, --generate generate a new private key
187
198
  -p, --password encrypt the key with a password
199
+ -c, --copy copy the new key to the clipboard
188
200
  -x, --keychain [key-name] add to (or read from) the OS-X Keychain
201
+
202
+ Password Caching:
189
203
  -M, --password-timeout [timeout] when passwords expire (in seconds)
190
- -P, --no-password-cache disables caching of key passwords
204
+ -P, --no-password-cache disables key password caching
191
205
 
192
- Read existing private key from:
206
+ Provide a private key:
193
207
  -i, --interactive Paste or type the key interactively
194
208
  -k, --private-key [key] private key as a string
195
209
  -K, --keyfile [key-file] private key from a file
196
210
 
197
- Data to Encrypt/Decrypt:
211
+ Data:
198
212
  -s, --string [string] specify a string to encrypt/decrypt
199
213
  -f, --file [file] filename to read from
200
214
  -o, --output [file] filename to write to
201
215
 
202
216
  Flags:
217
+ --keychain-del [key-name] delete keychain entry with that name
203
218
  -b, --backup create a backup file in the edit mode
204
219
  -v, --verbose show additional information
205
220
  -T, --trace print a backtrace of any errors
@@ -207,9 +222,6 @@ Flags:
207
222
  -V, --version print library version
208
223
  -N, --no-color disable color output
209
224
 
210
- Utility:
211
- -a, --bash-completion [file] append shell completion to a file
212
-
213
225
  Help & Examples:
214
226
  -E, --examples show several examples
215
227
  -L, --language natural language examples
@@ -51,6 +51,11 @@ module Sym
51
51
  end
52
52
  end
53
53
 
54
- require 'sym/app/short_name'
55
54
  require 'sym/version'
56
- require_dir 'sym/app'
55
+ require 'sym/app/short_name'
56
+
57
+ require 'sym/app/args'
58
+ require 'sym/app/cli'
59
+ require 'sym/app/commands'
60
+ require 'sym/app/keychain'
61
+ require 'sym/app/output'
@@ -40,7 +40,7 @@ module Sym
40
40
  # instance. See there for more details.
41
41
  #
42
42
  # Subsequently, +#run+ method handles the finding of the appropriate
43
- # {Sym::App::Commands::Command} subclass to respond to user's request.
43
+ # {Sym::App::Commands::BaseCommand} subclass to respond to user's request.
44
44
  # Command registry, sorting, command dependencies, and finding them is
45
45
  # done by the {Sym::App::Coommands} module.
46
46
  #
@@ -143,41 +143,42 @@ module Sym
143
143
  o.separator ' '
144
144
  o.separator 'Create a new private key:'.yellow
145
145
 
146
- o.bool '-g', '--generate', ' generate a new private key'
147
- o.bool '-p', '--password', ' encrypt the key with a password'
146
+ o.bool '-g', '--generate', ' generate a new private key'
147
+ o.bool '-p', '--password', ' encrypt the key with a password'
148
148
 
149
149
  if Sym::App.is_osx?
150
150
  o.string '-x', '--keychain', '[key-name] '.blue + 'add to (or read from) the OS-X Keychain'
151
151
  end
152
152
 
153
- o.integer '-M', '--password-timeout', '[timeout]'.blue + ' when passwords expire (in seconds)'
154
- o.bool '-P', '--no-password-cache', ' disables caching of key passwords'
153
+ o.integer '-M', '--password-timeout', '[timeout]'.blue + ' when passwords expire (in seconds)'
154
+ o.bool '-P', '--no-password-cache', ' disables caching of key passwords'
155
155
 
156
156
  o.separator ' '
157
157
  o.separator 'Read existing private key from:'.yellow
158
- o.bool '-i', '--interactive', ' Paste or type the key interactively'
159
- o.string '-k', '--private-key', '[key] '.blue + ' private key as a string'
160
- o.string '-K', '--keyfile', '[key-file]'.blue + ' private key from a file'
158
+ o.bool '-i', '--interactive', ' Paste or type the key interactively'
159
+ o.string '-k', '--private-key', '[key] '.blue + ' private key as a string'
160
+ o.string '-K', '--keyfile', '[key-file]'.blue + ' private key from a file'
161
161
  o.separator ' '
162
162
  o.separator 'Data to Encrypt/Decrypt:'.yellow
163
- o.string '-s', '--string', '[string]'.blue + ' specify a string to encrypt/decrypt'
164
- o.string '-f', '--file', '[file] '.blue + ' filename to read from'
165
- o.string '-o', '--output', '[file] '.blue + ' filename to write to'
163
+ o.string '-s', '--string', '[string]'.blue + ' specify a string to encrypt/decrypt'
164
+ o.string '-f', '--file', '[file] '.blue + ' filename to read from'
165
+ o.string '-o', '--output', '[file] '.blue + ' filename to write to'
166
166
  o.separator ' '
167
167
  o.separator 'Flags:'.yellow
168
- o.bool '-b', '--backup', ' create a backup file in the edit mode'
169
- o.bool '-v', '--verbose', ' show additional information'
170
- o.bool '-T', '--trace', ' print a backtrace of any errors'
171
- o.bool '-q', '--quiet', ' silence all output'
172
- o.bool '-V', '--version', ' print library version'
173
- o.bool '-N', '--no-color', ' disable color output'
168
+ o.bool '-b', '--backup', ' create a backup file in the edit mode'
169
+ o.bool '-v', '--verbose', ' show additional information'
170
+ o.bool '-T', '--trace', ' print a backtrace of any errors'
171
+ o.bool '-D', '--debug', ' print debugging information'
172
+ o.bool '-q', '--quiet', ' silence all output'
173
+ o.bool '-V', '--version', ' print library version'
174
+ o.bool '-N', '--no-color', ' disable color output'
174
175
  o.separator ' '
175
176
  o.separator 'Utility:'.yellow
176
- o.string '-a', '--bash-completion', '[file]'.blue + ' append shell completion to a file'
177
+ o.string '-a', '--bash-completion', '[file]'.blue + ' append shell completion to a file'
177
178
  o.separator ' '
178
179
  o.separator 'Help & Examples:'.yellow
179
- o.bool '-E', '--examples', ' show several examples'
180
- o.bool '-h', '--help', ' show help'
180
+ o.bool '-E', '--examples', ' show several examples'
181
+ o.bool '-h', '--help', ' show help'
181
182
 
182
183
  end
183
184
  end
@@ -4,7 +4,6 @@ require 'pp'
4
4
  module Sym
5
5
  module App
6
6
  module Commands
7
-
8
7
  class DependencyResolver < Hash
9
8
  include TSort
10
9
  alias tsort_each_node each_key
@@ -53,4 +52,14 @@ module Sym
53
52
  end
54
53
  end
55
54
 
56
- require_dir 'sym/app/commands'
55
+ require 'sym/app/commands/base_command'
56
+ require 'sym/app/commands/bash_completion'
57
+ require 'sym/app/commands/encrypt_decrypt'
58
+ require 'sym/app/commands/generate_key'
59
+ require 'sym/app/commands/keychain_add_key'
60
+ require 'sym/app/commands/open_editor'
61
+ require 'sym/app/commands/password_protect_key'
62
+ require 'sym/app/commands/print_key'
63
+ require 'sym/app/commands/show_examples'
64
+ require 'sym/app/commands/show_help'
65
+ require 'sym/app/commands/show_version'
@@ -6,7 +6,7 @@ require 'active_support/inflector'
6
6
  module Sym
7
7
  module App
8
8
  module Commands
9
- class Command
9
+ class BaseCommand
10
10
 
11
11
  def self.inherited(klass)
12
12
  klass.instance_eval do
@@ -46,6 +46,8 @@ module Sym
46
46
  end
47
47
  end
48
48
 
49
+ include Sym
50
+
49
51
  attr_accessor :application
50
52
 
51
53
  def initialize(application)
@@ -71,6 +73,25 @@ module Sym
71
73
  "#{self.class.short_name.to_s.bold.yellow}, with options: #{application.args.argv.join(' ').gsub(/--/, '').bold.green}"
72
74
  end
73
75
 
76
+ def create_key
77
+ self.class.create_private_key
78
+ end
79
+
80
+ def add_to_keychain_if_needed(key)
81
+ if opts[:keychain] && Sym::App.is_osx?
82
+ Sym::App::KeyChain.new(opts[:keychain], opts).add(key)
83
+ else
84
+ key
85
+ end
86
+ end
87
+
88
+ def encrypt_password_if_needed(key)
89
+ if opts[:password]
90
+ encr_password(key, application.input_handler.new_password)
91
+ else
92
+ key
93
+ end
94
+ end
74
95
  end
75
96
  end
76
97
  end
@@ -1,8 +1,8 @@
1
- require_relative 'command'
1
+ require 'sym/app/commands/base_command'
2
2
  module Sym
3
3
  module App
4
4
  module Commands
5
- class BashCompletion < Command
5
+ class BashCompletion < BaseCommand
6
6
 
7
7
  required_options [:bash_completion]
8
8
  try_after :generate_key, :open_editor, :encrypt_decrypt
@@ -1,8 +1,8 @@
1
- require_relative 'command'
1
+ require 'sym/app/commands/base_command'
2
2
  module Sym
3
3
  module App
4
4
  module Commands
5
- class EncryptDecrypt < Command
5
+ class EncryptDecrypt < BaseCommand
6
6
  include Sym
7
7
 
8
8
  required_options [ :private_key, :keyfile, :keychain, :interactive ],
@@ -1,23 +1,20 @@
1
- require_relative 'command'
1
+ require 'sym/app/commands/base_command'
2
2
  require 'sym/app/keychain'
3
3
  module Sym
4
4
  module App
5
5
  module Commands
6
- class GenerateKey < Command
7
- include Sym
6
+ class GenerateKey < BaseCommand
8
7
 
9
8
  required_options :generate
10
9
 
11
10
  def execute
12
- retries ||= 0
13
- new_private_key = self.class.create_private_key
14
- new_private_key = encr_password(new_private_key,
15
- application.input_handler.new_password) if opts[:password]
11
+ retries ||= 0
16
12
 
17
- Sym::App::KeyChain.new(opts[:keychain], opts).
18
- add(new_private_key) if opts[:keychain] && Sym::App.is_osx?
13
+ the_key = create_key
14
+ the_key = encrypt_password_if_needed(the_key)
15
+ add_to_keychain_if_needed(the_key)
19
16
 
20
- new_private_key
17
+ the_key
21
18
  rescue Sym::Errors::PasswordsDontMatch, Sym::Errors::PasswordTooShort => e
22
19
  STDERR.puts e.message.bold
23
20
  retry if (retries += 1) < 3
@@ -0,0 +1,19 @@
1
+ require 'sym/app/commands/base_command'
2
+ require 'sym/app/keychain'
3
+ module Sym
4
+ module App
5
+ module Commands
6
+ class KeychainAddKey < BaseCommand
7
+
8
+ required_options [:private_key, :keyfile, :interactive],
9
+ :keychain
10
+
11
+ try_after :generate_key, :encrypt_decrypt, :password_protect_key
12
+
13
+ def execute
14
+ add_to_keychain_if_needed(self.key)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -3,11 +3,11 @@ require 'fileutils'
3
3
  require 'tempfile'
4
4
  require 'sym'
5
5
  require 'sym/errors'
6
- require_relative 'command'
6
+ require 'sym/app/commands/base_command'
7
7
  module Sym
8
8
  module App
9
9
  module Commands
10
- class OpenEditor < Command
10
+ class OpenEditor < BaseCommand
11
11
  include Sym
12
12
 
13
13
  required_options [ :private_key, :keyfile, :keychain, :interactive ],
@@ -0,0 +1,29 @@
1
+ require 'sym/app/commands/base_command'
2
+
3
+ module Sym
4
+ module App
5
+ module Commands
6
+ class PasswordProtectKey < BaseCommand
7
+
8
+ required_options [:private_key, :keyfile, :keychain, :interactive],
9
+ :password
10
+
11
+ try_after :generate_key, :encrypt_decrypt
12
+
13
+ def execute
14
+ retries ||= 0
15
+
16
+ the_key = self.key
17
+ the_key = encrypt_password_if_needed(the_key)
18
+ add_to_keychain_if_needed(the_key)
19
+
20
+ the_key
21
+ rescue Sym::Errors::PasswordsDontMatch, Sym::Errors::PasswordTooShort => e
22
+ STDERR.puts e.message.bold
23
+ retry if (retries += 1) < 3
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,11 +1,13 @@
1
- require_relative 'command'
1
+ require 'sym/app/commands/base_command'
2
2
  require 'sym/app/keychain'
3
3
  module Sym
4
4
  module App
5
5
  module Commands
6
- class PrintKey < Command
6
+ class PrintKey < BaseCommand
7
7
  required_options [ :keychain, :keyfile ]
8
8
 
9
+ try_after :generate_key, :encrypt_decrypt, :password_protect_key, :keychain_add_key
10
+
9
11
  def execute
10
12
  self.key
11
13
  end
@@ -1,9 +1,9 @@
1
1
  require 'colored2'
2
- require_relative 'command'
2
+ require 'sym/app/commands/base_command'
3
3
  module Sym
4
4
  module App
5
5
  module Commands
6
- class ShowExamples < Command
6
+ class ShowExamples < BaseCommand
7
7
  required_options :examples
8
8
  try_after :show_help
9
9
 
@@ -11,8 +11,8 @@ module Sym
11
11
  output = []
12
12
 
13
13
  output << example(comment: 'generate a new private key into an environment variable:',
14
- command: 'export KEY=$(sym -g)',
15
- echo: 'echo $KEY',
14
+ command: 'export mykey=$(sym -g)',
15
+ echo: 'echo $mykey',
16
16
  result: '75ngenJpB6zL47/8Wo7Ne6JN1pnOsqNEcIqblItpfg4='.green)
17
17
 
18
18
  output << example(comment: 'generate a new password-protected key & save to a file',
@@ -21,19 +21,19 @@ module Sym
21
21
  result: 'Confirm Password : ' + '••••••••••'.green)
22
22
 
23
23
  output << example(comment: 'encrypt a plain text string with a key, and save the output to a file',
24
- command: 'sym -e -s ' + '"secret string"'.bold.yellow + ' -k $KEY -o file.enc',
24
+ command: 'sym -e -s ' + '"secret string"'.bold.yellow + ' -k $mykey -o file.enc',
25
25
  echo: 'cat file.enc',
26
26
  result: 'Y09MNDUyczU1S0UvelgrLzV0RTYxZz09CkBDMEw4Q0R0TmpnTm9md1QwNUNy%T013PT0K'.green)
27
27
 
28
28
  output << example(comment: 'decrypt a previously encrypted string:',
29
- command: 'sym -d -s $(cat file.enc) -k $KEY',
29
+ command: 'sym -d -s $(cat file.enc) -k $mykey',
30
30
  result: 'secret string'.green)
31
31
 
32
32
  output << example(comment: 'encrypt sym.yml and save it to sym.enc:',
33
- command: 'sym -e -f sym.yml -o sym.enc -k $KEY')
33
+ command: 'sym -e -f sym.yml -o sym.enc -k $mykey')
34
34
 
35
35
  output << example(comment: 'decrypt an encrypted file and print it to STDOUT:',
36
- command: 'sym -df sym.enc -k $KEY')
36
+ command: 'sym -df sym.enc -k $mykey')
37
37
 
38
38
  output << example(comment: 'edit an encrypted file in $EDITOR, ask for key, create file backup',
39
39
  command: 'sym -tibf ecrets.enc',
@@ -1,8 +1,8 @@
1
- require_relative 'command'
1
+ require 'sym/app/commands/base_command'
2
2
  module Sym
3
3
  module App
4
4
  module Commands
5
- class ShowHelp < Command
5
+ class ShowHelp < BaseCommand
6
6
 
7
7
  required_options :help, ->(opts) { opts.to_hash.keys.all? { |k| !opts[k] } }
8
8
  try_after :generate_key, :open_editor, :encrypt_decrypt
@@ -1,8 +1,8 @@
1
- require_relative 'command'
1
+ require 'sym/app/commands/base_command'
2
2
  module Sym
3
3
  module App
4
4
  module Commands
5
- class ShowVersion < Command
5
+ class ShowVersion < BaseCommand
6
6
  required_options :version
7
7
  try_after :show_help
8
8
  def execute
@@ -1,6 +1,6 @@
1
1
  require 'colored2'
2
2
  require 'sym'
3
- require_dir 'sym/app'
3
+ require 'sym/app'
4
4
 
5
5
  module Sym
6
6
  class Application
@@ -40,7 +40,6 @@ module Sym
40
40
  self.key = Sym::App::PrivateKey::Handler.new(opts, input_handler, password_cache).key
41
41
  raise Sym::Errors::NoPrivateKeyFound.new('Private key is required') unless self.key
42
42
  end
43
-
44
43
  unless command
45
44
  raise Sym::Errors::InsufficientOptionsError.new(
46
45
  'Can not determine what to do from the options ' + opts_hash.keys.reject { |k| !opts[k] }.to_s)
@@ -1,5 +1,5 @@
1
1
  require 'base64'
2
- require_relative 'configuration'
2
+ require 'sym/configuration'
3
3
 
4
4
  module Sym
5
5
 
@@ -1,10 +1,10 @@
1
- require_relative 'errors'
1
+ require 'sym/errors'
2
2
  require 'base64'
3
3
  require 'zlib'
4
4
 
5
- require_relative 'data/wrapper_struct'
6
- require_relative 'data/encoder'
7
- require_relative 'data/decoder'
5
+ require 'sym/data/wrapper_struct'
6
+ require 'sym/data/encoder'
7
+ require 'sym/data/decoder'
8
8
 
9
9
  module Sym
10
10
  # This module is responsible for taking arbitrary data of any format, and safely compressing
@@ -1,3 +1,3 @@
1
1
  module Sym
2
- VERSION = '2.0.3'
2
+ VERSION = '2.1.0'
3
3
  end
@@ -0,0 +1,113 @@
1
+ ## Sym
2
+
3
+ > Sym is a versatile encryption gem, based on the symmetric encryption cipher provided by the OpenSSL. It provides easy to remember commands to manage encryption key: you can generate a key, import an existing key, password protect an open key, store the key in OS-X KeyChain, and use it for encryption/decryption later. The key is used to encrypt, decrypt and edit any sensitive information, such application secrets.
4
+
5
+ ### Complete Usage
6
+
7
+ sym [ global options ] [ sub command ] [ command options ]
8
+
9
+ ##### Global Options
10
+
11
+ ```bash
12
+ -M, ——password-timeout [timeout] when passwords expire (in seconds)
13
+ -P, ——no-password-cache disables caching of key passwords
14
+ -v, ——verbose show additional information
15
+ -T, ——trace print a backtrace of any errors
16
+ -q, ——quiet silence all output
17
+ -V, ——version print library version
18
+ -N, ——no-color disable color output
19
+ ```
20
+
21
+ ##### Help & Examples:
22
+
23
+ ```bash
24
+ -h, ——help show help
25
+ -l, ——long show help and detailed examples
26
+ ```
27
+
28
+ ##### Commands
29
+
30
+ # Genereate new key
31
+ sym key ——save [ key-source ]
32
+
33
+ # Copy existing key, optionally password-protected:
34
+ sym key ——save [ key-source ] ——key [ key-source ] [ -p ]
35
+
36
+ # Delete existing key:
37
+ sym key ——rm [ key-source ]
38
+
39
+ sym decrypt ——key | -k key-source
40
+ ——data | -d data-source
41
+ ——to | -t data-source | ——in-place
42
+
43
+ sym encrypt ——key | -k key-source
44
+ ——data | -d data-source
45
+ ——to | -t data-source | ——in-place
46
+
47
+ sym edit ——data | -d data-source
48
+ ——key | -k key-source
49
+ ——bak | -b data-backup-source
50
+
51
+ sym recrypt ——data | -d data-source
52
+ ——key | -k key-source
53
+ ——save | -s key-source
54
+
55
+ sym install bash-completion
56
+
57
+ sym --help | -h
58
+
59
+ sym command --help | -h
60
+
61
+ sym examples
62
+
63
+
64
+ ##### Arguments via Environment
65
+
66
+ export SYM_ARGS_KEY='@file "~/.sym.key"'
67
+ export SYM_ARGS_DATA='@file "~/.sym.key"'
68
+
69
+ ##### Subcommands
70
+
71
+ When loading the commands, we use the hierarchical loading:
72
+
73
+ require 'sym/app/cmd'
74
+ require 'sym/app/cmd/bash'
75
+ require 'sym/app/cmd/bash/completion'
76
+
77
+
78
+ ### Reading and Writing Data and Keys
79
+
80
+ The new CLI for Sym uses a consistent naming for reading in the data and the key, and for writing out the key and/or data. The scheme is based on URI.
81
+
82
+ Each URI type is supported by a corresponding plugin, and new ones can be easily defined.
83
+
84
+ Some examples:
85
+
86
+ ```bash
87
+ ——key-in string://234234234 # read from the literal data
88
+ ——key-out file://home/kig/.mykey # read/write from/to file
89
+ ——key-in env://MY_VARIABLE # read from environment variable
90
+ ——key-out stdio:// # read/write using stdin/out
91
+
92
+ --data-in https://mysite.com/remote/secrets.json.enc
93
+ --data-out file:///usr/local/etc/secrets.json
94
+ ```
95
+
96
+ Below is the list of supported types planned for 3.0:
97
+
98
+ #### Supported Types
99
+
100
+ ```bash
101
+ URI: Read? Write? Delete?
102
+
103
+ string://value yes
104
+ env://variable yes
105
+ stdio:// yes
106
+ shell://command yes yes yes
107
+ file://filename yes yes yes
108
+ keychain://name yes yes yes
109
+ redis://127.0.0.1:6397/1/mykey yes yes yes
110
+ memcached://127.0.0.1:11211/mykey yes yes yes
111
+ scp://user@host/path/file yes yes yes
112
+ http[s]://user@host/path/file yes yes yes
113
+ ```
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.required_ruby_version = '>= 2.2'
30
30
  spec.post_install_message = <<-EOF
31
31
  Thank you for installing this gem!
32
+
32
33
  To enable bash command line completion, please run the following
33
34
  command, which appends sym's shell completion to the specified file:
34
35
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sym
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Gredeskoul
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-22 00:00:00.000000000 Z
11
+ date: 2017-01-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colored2
@@ -216,11 +216,13 @@ files:
216
216
  - lib/sym/app/args.rb
217
217
  - lib/sym/app/cli.rb
218
218
  - lib/sym/app/commands.rb
219
+ - lib/sym/app/commands/base_command.rb
219
220
  - lib/sym/app/commands/bash_completion.rb
220
- - lib/sym/app/commands/command.rb
221
221
  - lib/sym/app/commands/encrypt_decrypt.rb
222
222
  - lib/sym/app/commands/generate_key.rb
223
+ - lib/sym/app/commands/keychain_add_key.rb
223
224
  - lib/sym/app/commands/open_editor.rb
225
+ - lib/sym/app/commands/password_protect_key.rb
224
226
  - lib/sym/app/commands/print_key.rb
225
227
  - lib/sym/app/commands/show_examples.rb
226
228
  - lib/sym/app/commands/show_help.rb
@@ -250,11 +252,12 @@ files:
250
252
  - lib/sym/extensions/class_methods.rb
251
253
  - lib/sym/extensions/instance_methods.rb
252
254
  - lib/sym/version.rb
255
+ - sym-3.0-cli.md
253
256
  - sym.gemspec
254
257
  homepage: https://github.com/kigster/sym
255
258
  licenses: []
256
259
  metadata: {}
257
- post_install_message: "Thank you for installing this gem! \nTo enable bash command
260
+ post_install_message: "Thank you for installing this gem! \n\nTo enable bash command
258
261
  line completion, please run the following \ncommand, which appends sym's shell completion
259
262
  to the specified file:\n\n sym --bash-completion ~/.bash_profile \n\n(or any other
260
263
  shell initialization file of your preference).\n\nThank you for checking out Sym
@@ -274,7 +277,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
277
  version: '0'
275
278
  requirements: []
276
279
  rubyforge_project:
277
- rubygems_version: 2.5.2
280
+ rubygems_version: 2.6.8
278
281
  signing_key:
279
282
  specification_version: 4
280
283
  summary: Easy to use symmetric encryption library & CLI with a strong aes-256-cbc