sym 2.6.2 → 2.6.3

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: c169c37700945822d66dd59d354351489dc8f0c3
4
- data.tar.gz: 96d3d0f19ddd0c2c853bbedb6aa66e315214a8a0
3
+ metadata.gz: b8adac417a1a9a351450a8ae059f225888e7b879
4
+ data.tar.gz: 63fc6a18b5f455433960d47f74cbd1132b645fa4
5
5
  SHA512:
6
- metadata.gz: 9fb78214630982559137dea9f572833ca31a51b0bf1b91605af3a6ede7412533d997660298c7176c43741f03e35e1a6cc613697e9993da3d78e3ccddabe7d3cb
7
- data.tar.gz: 68d3c33eca5d9093ac3a3896271864edf063c18a4f8a8b2aa06d2cb9beb6f9200471124412a156c4c8f839fe773d8559384ddfe0f5dec82e1e5ef60158a40385
6
+ metadata.gz: 93d4ea799ed150b26039848545401fa53818f348f8f9255b983213e30b05f241c3510b320e21507c52756b520972586788f380c45c34fd9714dac16859e4a5c3
7
+ data.tar.gz: a7052d5ed8d08a02e0dc80dfb2bb9fcd00f50ffbb01a2a70b40a74e222051c9c74b840ca7678f4ac6e7b3f460fa195307d073c20247d4f16b0b46cd69f5bb713
@@ -1,12 +1,14 @@
1
1
  language: ruby
2
+ cache: bundler
2
3
  env:
3
- - CODECLIMATE_REPO_TOKEN=c71874cc22acffe1e2543d3388d3a96c73a65f0cfe17169dadd8de4a6c062c39
4
+ - CODECLIMATE_REPO_TOKEN=c71874cc22acffe1e2543d3388d3a96c73a65f0cfe17169dadd8de4a6c062c39 TEST_DRB=true
4
5
  services:
5
6
  - memcached
6
7
  rvm:
7
- - 2.4.0
8
+ - 2.2.6
8
9
  - 2.3.3
9
- script: rake
10
+ - 2.4.0
11
+ - jruby-9.1.7.0
10
12
  notifications:
11
13
  email:
12
14
  recipients:
@@ -2,7 +2,57 @@
2
2
 
3
3
  ## [HEAD](https://github.com/kigster/sym/tree/HEAD)
4
4
 
5
- [Changes since the last tag](https://github.com/kigster/sym/compare/v2.5.1...HEAD)
5
+ [Changes since the last tag](https://github.com/kigster/sym/compare/v2.6.3...HEAD)
6
+
7
+ ## [v2.6.3](https://github.com/kigster/sym/tree/v2.6.3) (2017-03-13)
8
+ [Full Changelog](https://github.com/kigster/sym/compare/v2.6.2...v2.6.3)
9
+
10
+ * Much faster unit tests thanks to running Aruba tests in-process
11
+ * Better error reporting, and catching the case when STDIN is not a TTY
12
+ and yet password is required to decrypt the key.
13
+
14
+ ## [v2.6.2](https://github.com/kigster/sym/tree/v2.6.2) (2017-03-12)
15
+ [Full Changelog](https://github.com/kigster/sym/compare/v2.6.1...v2.6.2)
16
+
17
+ * Updating gem description for RubyGems.
18
+
19
+ ## [v2.6.1](https://github.com/kigster/sym/tree/v2.6.1) (2017-03-12)
20
+ [Full Changelog](https://github.com/kigster/sym/compare/v2.6.0...v2.6.1)
21
+
22
+ * Mostly updating gem descriptions and README
23
+
24
+ ## [v2.6.0](https://github.com/kigster/sym/tree/v2.6.0) (2017-03-12)
25
+ [Full Changelog](https://github.com/kigster/sym/compare/v2.5.3...v2.6.0)
26
+
27
+ * Added `Sym::MagicFile` API for easy access to encrypted files.
28
+ * Moving output processing into the `Sym::Application` class.
29
+
30
+ ## [v2.5.3](https://github.com/kigster/sym/tree/v2.5.3) (2017-03-11)
31
+ [Full Changelog](https://github.com/kigster/sym/compare/v2.5.2...v2.5.3)
32
+
33
+ * Added a "\n" to all printouts to STDOUT as long as it's a TTY
34
+
35
+ ## [v2.5.2](https://github.com/kigster/sym/tree/v2.5.2) (2017-03-07)
36
+ [Full Changelog](https://github.com/kigster/sym/compare/v2.5.1...v2.5.2)
37
+
38
+ * Minor bug fixes around `symit` bash script, and `--bash-support` flag.
39
+
40
+ ## [v2.5.1](https://github.com/kigster/sym/tree/v2.5.0) (2017-03-07)
41
+ [Full Changelog](https://github.com/kigster/sym/compare/v2.5.0...v2.5.1)
42
+
43
+ * Moved `symit` into `bin/` folder, and now installing it into `~/.sym.symit` with `-B/--bash-support` flag.
44
+ * `symit` now works as a bash function installed together with the completion.
45
+ * Updated `Sym::Constants` module.
46
+
47
+ ## [v2.5.0](https://github.com/kigster/sym/tree/v2.5.0) (2017-03-04)
48
+ [Full Changelog](https://github.com/kigster/sym/compare/v2.4.3...v2.5.0)
49
+
50
+ * Updated README
51
+ * Remove `-M` flag; make `SYM_ARGS` environment be only used when `-A` flag is supplied
52
+ * Change `--bash-completion` to use `-B`
53
+ * Major fix up for sym.completion
54
+ ## [v2.6.1](https://github.com/kigster/sym/tree/v2.6.1) (2017-03-11)
55
+ [Full Changelog](https://github.com/kigster/sym/compare/v2.6.0...v2.6.1)
6
56
 
7
57
  ## [v2.6.0](https://github.com/kigster/sym/tree/v2.6.0) (2017-03-11)
8
58
  [Full Changelog](https://github.com/kigster/sym/compare/v2.5.3...v2.6.0)
data/README.md CHANGED
@@ -25,6 +25,16 @@
25
25
 
26
26
  </div>
27
27
 
28
+ ## Supported Ruby Versions
29
+
30
+ Sym currently builds and runs on the following ruby versions, which can be verified on Travis CI:
31
+ [![Build Status](https://travis-ci.org/kigster/sym.svg?branch=master)](https://travis-ci.org/kigster/sym)
32
+
33
+ * 2.2.5
34
+ * 2.3.3
35
+ * 2.4.0
36
+ * jruby-9.1.7.0
37
+
28
38
  ### Motivation
29
39
 
30
40
  The main goal when writing this tool was to streamline and simplify handling of sensitive data in a trasparent and easy to use way without sacrificing security.
@@ -17,12 +17,18 @@ module Sym
17
17
  module App
18
18
  class << self
19
19
  attr_accessor :exit_code
20
+ attr_accessor :stdin, :stdout, :stderr
21
+
20
22
  end
21
23
 
22
24
  self.exit_code = 0
23
25
 
26
+ self.stdin = STDIN
27
+ self.stdout = STDOUT
28
+ self.stderr = STDERR
29
+
24
30
  def self.out
25
- STDERR
31
+ self.stderr
26
32
  end
27
33
 
28
34
  def self.log(level, *args, **opts)
@@ -42,18 +48,18 @@ module Sym
42
48
  error_type = "#{(type || exception.class.name)}"
43
49
  error_details = (details || exception.message)
44
50
 
51
+ operation = command ? "to #{command.class.short_name.to_s.humanize.downcase}" : ''
52
+ reason = exception.message if exception
53
+
45
54
  if exception && (config && config[:trace] || reason == 'Unknown Error')
46
- lines << "#{error_type.red.underlined}: #{error_details.white.on.red}\n"
55
+ lines << "#{error_type.red.on.white.bold}:\n#{error_details.white.on.red}\n" + ''.normal
47
56
  lines << exception.backtrace.join("\n").red.bold if config[:trace]
48
57
  lines << "\n"
58
+ else
59
+ lines << "| SYM Error #{operation} → |".white.on.red + (reason ? " #{reason} ".bold.black.on.white : " #{error_details}")[0..70] + ' '.normal + "\n"
60
+ lines << "#{comments}" if comments
49
61
  end
50
62
 
51
- operation = command ? "to #{command.class.short_name.to_s.humanize.downcase}" : ''
52
- reason = exception.message if reason.nil? && exception
53
-
54
- lines << " error #{operation} → ".white.on.red+ " #{reason}".bold.red if reason
55
- lines << "#{comments}" if comments
56
-
57
63
  error_report = lines.compact.join("\n") || 'Undefined error'
58
64
 
59
65
  self.out.puts(error_report) if error_report.present?
@@ -56,11 +56,21 @@ module Sym
56
56
  # brings in #parse(Array[String] args)
57
57
  include CLISlop
58
58
 
59
- attr_accessor :opts, :application, :outputs
59
+ attr_accessor :opts, :application, :outputs, :stdin, :stdout, :stderr, :kernel
60
60
 
61
- def initialize(argv)
62
- begin
63
61
 
62
+ def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = nil)
63
+
64
+ self.stdin = stdin
65
+ self.stdout = stdout
66
+ self.stderr = stderr
67
+ self.kernel = kernel
68
+
69
+ Sym::App.stdin = stdin
70
+ Sym::App.stdout = stdout
71
+ Sym::App.stderr = stderr
72
+
73
+ begin
64
74
  # Re-map any legacy options to the new options
65
75
  self.opts = parse(argv)
66
76
  if opts[:sym_args]
@@ -69,7 +79,7 @@ module Sym
69
79
  end
70
80
 
71
81
  # Disable coloring if requested, or if piping STDOUT
72
- if opts[:no_color] || !STDOUT.tty?
82
+ if opts[:no_color] || !self.stdout.tty?
73
83
  Colored2.disable! # reparse options without the colors to create new help msg
74
84
  self.opts = parse(argv)
75
85
  end
@@ -80,7 +90,7 @@ module Sym
80
90
  return
81
91
  end
82
92
 
83
- self.application = ::Sym::Application.new(opts)
93
+ self.application = ::Sym::Application.new(opts, stdin, stdout, stderr, kernel)
84
94
  end
85
95
 
86
96
  def append_sym_args(argv)
@@ -95,6 +105,10 @@ module Sym
95
105
  ENV[Sym::Constants::ENV_ARGS_VARIABLE_NAME]
96
106
  end
97
107
 
108
+ def execute!
109
+ execute
110
+ end
111
+
98
112
  def execute
99
113
  return Sym::App.exit_code if Sym::App.exit_code != 0
100
114
  result = application.execute
@@ -106,12 +120,15 @@ module Sym
106
120
  end
107
121
 
108
122
  def command
109
- @command ||= self.application&.command
123
+ @command ||= self.application.command if self.application
110
124
  end
111
125
 
112
126
  def output_proc(proc = nil)
113
- self.application&.output = proc if proc
114
- self.application&.output
127
+ if self.application
128
+ self.application.output = proc if proc
129
+ return self.application.output
130
+ end
131
+ nil
115
132
  end
116
133
 
117
134
  def opts_present
@@ -50,7 +50,7 @@ module Sym
50
50
  extend Forwardable
51
51
 
52
52
  attr_accessor :application
53
- def_delegators :@application, :opts, :opts_original, :key
53
+ def_delegators :@application, :opts, :opts_slop, :key, :stdin, :stdout, :stderr, :kernel
54
54
 
55
55
  def initialize(application)
56
56
  self.application = application
@@ -61,7 +61,7 @@ module Sym
61
61
  end
62
62
 
63
63
  def content
64
- @content ||= (opts[:string] || (opts[:file].eql?('-') ? STDIN.read : ::File.read(opts[:file]).chomp))
64
+ @content ||= (opts[:string] || (opts[:file].eql?('-') ? stdin.read : ::File.read(opts[:file]).chomp))
65
65
  end
66
66
 
67
67
  def to_s
@@ -23,7 +23,7 @@ module Sym
23
23
  add_to_keychain_if_needed(the_key)
24
24
  the_key
25
25
  rescue Sym::Errors::PasswordsDontMatch, Sym::Errors::PasswordTooShort => e
26
- STDERR.puts e.message.bold
26
+ stderr.puts e.message.bold
27
27
  retry if (retries += 1) < 3
28
28
  end
29
29
  end
@@ -15,6 +15,7 @@ module Sym
15
15
  if Sym.default_key? && Sym.default_key == self.key
16
16
  raise 'Refusing to import key specified in the default key file ' + Sym.default_key_file.italic
17
17
  end
18
+ raise Sym::Errors::NoPrivateKeyFound.new("Unable to resolve private key from argument '#{opts[:key]}'") if self.key.nil?
18
19
  add_to_keychain_if_needed(self.key)
19
20
  self.key unless opts[:quiet]
20
21
  end
@@ -11,6 +11,7 @@ module Sym
11
11
 
12
12
  def execute
13
13
  retries ||= 0
14
+ raise Sym::Errors::NoPrivateKeyFound.new("Unable to resolve private key from argument '#{opts[:key]}'") if self.key.nil?
14
15
 
15
16
  the_key = self.key
16
17
 
@@ -24,7 +25,7 @@ module Sym
24
25
 
25
26
  the_key
26
27
  rescue Sym::Errors::PasswordsDontMatch, Sym::Errors::PasswordTooShort => e
27
- STDERR.puts e.message.bold
28
+ stderr.puts e.message.bold
28
29
  retry if (retries += 1) < 3
29
30
  end
30
31
 
@@ -1,5 +1,6 @@
1
1
  require 'sym/app/commands/base_command'
2
2
  require 'sym/app/keychain'
3
+ require 'sym/errors'
3
4
  module Sym
4
5
  module App
5
6
  module Commands
@@ -9,6 +10,7 @@ module Sym
9
10
  try_after :show_examples, :generate_key, :encrypt, :decrypt, :password_protect_key, :keychain_add_key
10
11
 
11
12
  def execute
13
+ raise Sym::Errors::NoPrivateKeyFound.new("Unable to resolve private key from argument '#{opts[:key]}'") if self.key.nil?
12
14
  self.key
13
15
  end
14
16
  end
@@ -7,7 +7,7 @@ module Sym
7
7
  required_options :help, ->(opts) { opts.keys.all? { |k| !opts[k] } }
8
8
 
9
9
  def execute
10
- opts_original.to_s(prefix: ' ' * 2)
10
+ opts_slop.to_s(prefix: ' ' * 2)
11
11
  end
12
12
  end
13
13
  end
@@ -4,22 +4,31 @@ module Sym
4
4
  module App
5
5
  module Input
6
6
  class Handler
7
+ attr_accessor :stdin, :stdout, :stderr, :kernel
8
+
9
+ def initialize(stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = nil)
10
+ self.stdin = stdin
11
+ self.stdout = stdout
12
+ self.stderr = stderr
13
+ self.kernel = kernel
14
+ end
7
15
 
8
16
  def ask
9
17
  retries ||= 0
10
18
  prompt('Password: ', :green)
11
19
  rescue ::OpenSSL::Cipher::CipherError
12
- STDERR.puts 'Invalid password. Please try again.'
20
+ stderr.puts 'Invalid password. Please try again.'
13
21
  retry if (retries += 1) < 3
14
22
  nil
15
23
  end
16
24
 
17
25
  def puts(*args)
18
- STDERR.puts args
26
+ stderr.puts args
19
27
  end
20
28
 
21
29
  def prompt(message, color)
22
- HighLine.new(STDIN, STDERR).ask(message.bold) { |q| q.echo = '•'.send(color) }
30
+ raise Sym::Errors::CantReadPasswordNoTTY.new('key requires a password, however STDIN is not a TTY') unless stdin.tty?
31
+ HighLine.new(stdin, stderr).ask(message.bold) { |q| q.echo = '•'.send(color) }
23
32
  end
24
33
 
25
34
  def new_password
@@ -4,10 +4,14 @@ module Sym
4
4
  module Output
5
5
  class Base
6
6
 
7
- attr_accessor :opts
8
-
9
- def initialize(opts)
10
- self.opts = opts
7
+ attr_accessor :opts, :stdin, :stdout, :stderr, :kernel
8
+
9
+ def initialize(opts, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = nil)
10
+ self.opts = opts
11
+ self.stdin = stdin
12
+ self.stdout = stdout
13
+ self.stderr = stderr
14
+ self.kernel = kernel
11
15
  end
12
16
 
13
17
  @outputs = []
@@ -6,8 +6,8 @@ module Sym
6
6
  required_option nil
7
7
  def output_proc
8
8
  ->(argument) do
9
- printf '%s', argument
10
- printf "\n" if STDOUT.tty?
9
+ self.stdout.printf '%s', argument
10
+ self.stdout.printf "\n" if self.stdout.tty?
11
11
  end
12
12
  end
13
13
  end
@@ -1,6 +1,5 @@
1
1
  require 'forwardable'
2
2
  require 'dalli'
3
- require 'sym/app/password/cache'
4
3
 
5
4
  module Sym
6
5
  module App
@@ -5,12 +5,21 @@ require 'openssl'
5
5
  require 'json'
6
6
 
7
7
  module Sym
8
+ # Main Application controller class for Sym.
9
+ #
10
+ # Accepts a hash with CLI options set (as symbols), for example
11
+ #
12
+ # Example
13
+ # =======
14
+ #
15
+ # app = Sym::Application.new( encrypt: true, file: '/tmp/secrets.yml', output: '/tmp/secrets.yml.enc')
16
+ # result = app.execute
17
+ #
18
+ #
8
19
  class Application
9
20
 
10
21
  attr_accessor :opts,
11
- :opts_original,
12
- :opts,
13
- :provided_options,
22
+ :opts_slop,
14
23
  :args,
15
24
  :action,
16
25
  :key,
@@ -19,11 +28,18 @@ module Sym
19
28
  :key_handler,
20
29
  :output,
21
30
  :result,
22
- :password_cache
31
+ :password_cache,
32
+ :stdin, :stdout, :stderr, :kernel
23
33
 
24
- def initialize(opts)
25
- self.opts_original = opts
26
- self.opts = opts.is_a?(Hash) ? opts : opts.to_hash
34
+ def initialize(opts, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = nil)
35
+
36
+ self.stdin = stdin
37
+ self.stdout = stdout
38
+ self.stderr = stderr
39
+ self.kernel = kernel
40
+
41
+ self.opts_slop = opts.clone
42
+ self.opts = opts.is_a?(Hash) ? opts : opts.to_hash
27
43
 
28
44
  process_negated_option(opts[:negate]) if opts[:negate]
29
45
 
@@ -36,32 +52,11 @@ module Sym
36
52
  initialize_input_handler
37
53
  end
38
54
 
39
- def execute!
40
- initialize_key_source
41
- unless command
42
- raise Sym::Errors::InsufficientOptionsError,
43
- " Can not determine what to do
44
- from the options: \ n " +
45
- " #{self.provided_options.inspect.green.bold}\n" +
46
- "and flags #{self.provided_flags.to_s.green.bold}"
47
- end
48
- log :info, "command located is #{command.class.name.blue.bold}"
49
- self.result = command.execute.tap do |result|
50
- log :info, "result is #{result.nil? ? 'nil' : result[0..10].to_s.blue.bold }..." if opts[:trace]
51
- end
52
- end
53
-
54
- def process_output(result)
55
- unless result.is_a?(Hash)
56
- self.output.call(result)
57
- result
58
- else
59
- result
60
- end
61
- end
62
-
55
+ # Main action method — it looksup the command, and executes it, translating
56
+ # various exception conditions into meaningful error messages.
63
57
  def execute
64
58
  process_output(execute!)
59
+
65
60
  rescue ::OpenSSL::Cipher::CipherError => e
66
61
  { reason: 'Invalid key provided',
67
62
  exception: e }
@@ -88,42 +83,65 @@ module Sym
88
83
  @command
89
84
  end
90
85
 
91
- def log(*args)
92
- Sym::App.log(*args, **opts)
86
+ def provided_flags
87
+ provided_flags = provided_options
88
+ provided_flags.delete_if { |k, v| ![false, true].include?(v) }
89
+ provided_flags.keys
93
90
  end
94
91
 
95
- def editor
96
- editors_to_try.find { |editor| File.exist?(editor) }
92
+ def provided_value_options
93
+ provided = provided_options(safe: true)
94
+ provided.delete_if { |k, v| [false, true].include?(v) }
95
+ provided
97
96
  end
98
97
 
99
- def provided_options
98
+ def provided_options(**opts)
100
99
  provided_opts = self.opts.clone
101
100
  provided_opts.delete_if { |k, v| !v }
102
- provided_opts
101
+ if opts[:safe]
102
+ provided_options.map do |k, v|
103
+ k == :key && [44, 45].include?(v.size) ?
104
+ [k, '[reducted]'] :
105
+ [k, v]
106
+ end.to_h
107
+ else
108
+ provided_opts
109
+ end
103
110
  end
104
111
 
105
- def provided_safe_options
106
- provided_options.map do |k, v|
107
- k == :key && [44, 45].include?(v.size) ?
108
- [k, '[reducted]'] :
109
- [k, v]
110
- end.to_h
112
+ def editor
113
+ editors_to_try.find { |editor| File.exist?(editor) }
111
114
  end
112
115
 
113
- def provided_flags
114
- provided_flags = provided_options
115
- provided_flags.delete_if { |k, v| ![false, true].include?(v) }
116
- provided_flags.keys
116
+ def process_output(result)
117
+ unless result.is_a?(Hash)
118
+ self.output.call(result)
119
+ result
120
+ else
121
+ result
122
+ end
117
123
  end
118
124
 
119
- def provided_value_options
120
- provided = provided_safe_options
121
- provided.delete_if { |k, v| [false, true].include?(v) }
122
- provided
123
- end
125
+ private
124
126
 
127
+ def execute!
128
+ initialize_key_source
129
+ unless command
130
+ raise Sym::Errors::InsufficientOptionsError,
131
+ " Can not determine what to do
132
+ from the options: \ n " +
133
+ " #{self.provided_options.inspect.green.bold}\n" +
134
+ "and flags #{self.provided_flags.to_s.green.bold}"
135
+ end
136
+ log :info, "command located is #{command.class.name.blue.bold}"
137
+ self.result = command.execute.tap do |result|
138
+ log :info, "result is #{result.nil? ? 'nil' : result[0..10].to_s.blue.bold }..." if opts[:trace]
139
+ end
140
+ end
125
141
 
126
- private
142
+ def log(*args)
143
+ Sym::App.log(*args, **opts)
144
+ end
127
145
 
128
146
  def editors_to_try
129
147
  [
@@ -145,10 +163,10 @@ module Sym
145
163
  unless output_klass && output_klass.is_a?(Class)
146
164
  raise "Can not determine output type from arguments #{provided_options}"
147
165
  end
148
- self.output = output_klass.new(opts).output_proc
166
+ self.output = output_klass.new(opts, stdin, stdout, stderr, kernel).output_proc
149
167
  end
150
168
 
151
- def initialize_input_handler(handler = ::Sym::App::Input::Handler.new)
169
+ def initialize_input_handler(handler = ::Sym::App::Input::Handler.new(stdin, stdout, stderr, kernel))
152
170
  self.input_handler = handler
153
171
  end
154
172
 
@@ -191,7 +209,7 @@ module Sym
191
209
  # If we are encrypting or decrypting, and no data has been provided, check if we
192
210
  # should read from STDIN
193
211
  def initialize_data_source
194
- if self.action && opts[:string].nil? && opts[:file].nil? && !(STDIN.tty?)
212
+ if self.action && opts[:string].nil? && opts[:file].nil? && !(self.stdin.tty?)
195
213
  opts[:file] = '-'
196
214
  end
197
215
  end
@@ -201,10 +219,9 @@ module Sym
201
219
  # In any case, attempt to initialize the key one way or another.
202
220
  def initialize_key_source
203
221
  detect_key_source
204
-
205
222
  if args.require_key? && !self.key
206
223
  log :error, 'Unable to determine the key, which appears to be required with current args'
207
- raise Sym::Errors::NoPrivateKeyFound, 'Private key is required when ' + provided_flags.join(', ') << 'ing.'
224
+ raise Sym::Errors::NoPrivateKeyFound, 'Private key is required when ' + (self.action ? self.action.to_s + 'ypting' : provided_flags.join(', '))
208
225
  end
209
226
  log :debug, "initialize_key_source: detected key ends with [...#{(key ? key[-5..-1] : 'nil').bold.magenta}]"
210
227
  log :debug, "opts: #{self.provided_value_options.to_s.green.bold}"
@@ -11,6 +11,7 @@ module Sym
11
11
  class NoPasswordProvided < Sym::Errors::PasswordError; end
12
12
  class PasswordsDontMatch < Sym::Errors::PasswordError; end
13
13
  class PasswordTooShort < Sym::Errors::PasswordError; end
14
+ class CantReadPasswordNoTTY < Sym::Errors::PasswordError; end
14
15
 
15
16
  class EditorExitedAbnormally < Sym::Errors::Error; end
16
17
 
@@ -1,5 +1,5 @@
1
1
  module Sym
2
- VERSION = '2.6.2'
2
+ VERSION = '2.6.3'
3
3
  DESCRIPTION = <<-eof
4
4
  Sym is a ruby library (gem) that offers both the command line interface (CLI) and a set of rich Ruby APIs, which make it rather trivial to add encryption and decryption of sensitive data to your development or deployment flow. As a layer of additional security, you can encrypt the private key itself with a password. Unlike many other existing encryption tools, Sym focuses on getting out of the way — by offering its streamlined interface, hoping to make encryption of application secrets nearly completely transparent to the developers. For the data encryption Sym uses a symmetric 256-bit key with the AES-256-CBC cipher, same cipher as used by the US Government. For password-protecting the key Sym uses AES-128-CBC cipher. The resulting data is zlib-compressed and base64-encoded. The keys are also base64 encoded for easy copying/pasting/etc.
5
5
 
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.6.2
4
+ version: 2.6.3
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-03-12 00:00:00.000000000 Z
11
+ date: 2017-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colored2