shhh 1.6.3 → 1.6.4

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: 3719455248b51396f2f9e61a118831781ed9cfde
4
- data.tar.gz: 18fa87873719241498d30f3490bb1db8d5f91f1d
3
+ metadata.gz: d631ceb60ef17845e368b02a7e945245bc547f9f
4
+ data.tar.gz: e34a0ab7746f04d9ffb3da3469248a242fcb5a40
5
5
  SHA512:
6
- metadata.gz: f0009d955c698e4dca1a76dbff0ce0d764d2fd1c624afff258f9900e09ebc01430e3ba3cee3345aa1bb70a81d79fb9e48bafe650a10a080bf68c005aadcbd199
7
- data.tar.gz: 36fbc0bae8fa2c4ced54d8dfe822630b39d84767c1d939fee3dfe7ec749a4df0c94ac1e6b071e1ea64f693cb518ebcfc92b676ad6430318f4e3f6142f6f2c42d
6
+ metadata.gz: 423a1b4c83204f67d41261b628b29965c1f102f3e542c2ffb5e00e4235073c87471d7c4ed44e6e8608f88bb38c4ec03686abae647303c39508d48d0b8f5705d8
7
+ data.tar.gz: 46e5e760fad9a81312614d53bd6cdae611463ee2e9b7c334f2f1f8a8c9db521ee8f8c9d3a4dbf018499fd6ef812f56e8adc23f2dbce7a9aafdb9cabe39b2f853
data/.gitignore CHANGED
@@ -10,4 +10,4 @@
10
10
  /tmp/
11
11
  /data
12
12
  /spec/coverage/
13
- *.enc
13
+ /*.enc
@@ -0,0 +1,35 @@
1
+ require 'coin'
2
+ require 'digest'
3
+ require 'singleton'
4
+ # # configure the URI that the DRb server runs on (defaults to druby://localhost:PORT)
5
+
6
+
7
+ module Shhh
8
+ module App
9
+ class Cache
10
+
11
+ include Singleton
12
+
13
+ class << self
14
+ def configure
15
+ Coin.uri = 'druby://127.0.0.1:24924'
16
+ end
17
+ end
18
+
19
+ self.configure
20
+
21
+ def md5(string)
22
+ Digest::MD5.base64digest(string)
23
+ end
24
+
25
+ def [] (key)
26
+ Coin.read(md5(key))
27
+ end
28
+
29
+ def []=(key, value)
30
+ Coin.write(md5(key), value)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
@@ -1,4 +1,5 @@
1
1
  require_relative 'decryptor'
2
+ require 'shhh/app/cache'
2
3
  module Shhh
3
4
  module App
4
5
  module PrivateKey
@@ -10,6 +11,7 @@ module Shhh
10
11
  def initialize(encrypted_key, input_handler)
11
12
  self.encrypted_key = encrypted_key
12
13
  self.input_handler = input_handler
14
+ @cache_checked = false
13
15
  end
14
16
 
15
17
  def key
@@ -18,7 +20,12 @@ module Shhh
18
20
  if should_decrypt?
19
21
  begin
20
22
  retries ||= 0
21
- decrypted_key = decrypt(password)
23
+
24
+ p = password
25
+ decrypted_key = decrypt(p)
26
+ # if the password is valid, let's add it to the cache.
27
+ Shhh::App::Cache.instance[encrypted_key] = p
28
+
22
29
  rescue ::OpenSSL::Cipher::CipherError => e
23
30
  input_handler.puts 'Invalid password. Please try again.'
24
31
  ((retries += 1) < 3) ? retry : raise(Shhh::Errors::InvalidPasswordPrivateKey.new('Invalid password.'))
@@ -35,15 +42,24 @@ module Shhh
35
42
  encrypted_key && (encrypted_key.length > 32)
36
43
  end
37
44
 
38
-
39
45
  def decrypt(password)
40
46
  decr_password(encrypted_key, password)
41
47
  end
42
48
 
43
49
  def password
50
+ check_cache || ask_user
51
+ end
52
+
53
+ def ask_user
44
54
  input_handler.ask
45
55
  end
46
56
 
57
+ def check_cache
58
+ return nil if @cache_checked
59
+ @cache_checked = true
60
+ Shhh::App::Cache.instance[encrypted_key]
61
+ end
62
+
47
63
  end
48
64
  end
49
65
  end
@@ -15,8 +15,8 @@ module Shhh
15
15
 
16
16
  def initialize(file:, key_id:, key_type:)
17
17
  @file = file
18
- @key_id = key_id
19
- @key_type = key_type.to_sym
18
+ @key_id = key_id
19
+ @key_type = key_type.to_sym
20
20
  @app_args = { file: file, key_type => key_id, decrypt: true }
21
21
  @application = Shhh::Application.new(self.app_args)
22
22
  end
data/lib/shhh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Shhh
2
- VERSION = '1.6.3'
2
+ VERSION = '1.6.4'
3
3
  end
data/shhh.gemspec CHANGED
@@ -35,6 +35,7 @@ Thank you for installing Shhh!
35
35
  spec.add_dependency 'activesupport'
36
36
  spec.add_dependency 'highline', '~> 1.7'
37
37
  spec.add_dependency 'clipboard', '~> 1.1'
38
+ spec.add_dependency 'coin'
38
39
 
39
40
  spec.add_development_dependency 'codeclimate-test-reporter'
40
41
  spec.add_development_dependency 'bundler', '~> 1.12'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shhh
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.3
4
+ version: 1.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Gredeskoul
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-22 00:00:00.000000000 Z
11
+ date: 2016-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: require_dir
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '1.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: coin
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: codeclimate-test-reporter
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -195,6 +209,7 @@ files:
195
209
  - lib/shhh.rb
196
210
  - lib/shhh/app.rb
197
211
  - lib/shhh/app/args.rb
212
+ - lib/shhh/app/cache.rb
198
213
  - lib/shhh/app/cli.rb
199
214
  - lib/shhh/app/commands.rb
200
215
  - lib/shhh/app/commands/command.rb
@@ -218,9 +233,6 @@ files:
218
233
  - lib/shhh/app/output/file.rb
219
234
  - lib/shhh/app/output/noop.rb
220
235
  - lib/shhh/app/output/stdout.rb
221
- - lib/shhh/app/password/cache.rb
222
- - lib/shhh/app/password/cache/client.rb
223
- - lib/shhh/app/password/cache/server.rb
224
236
  - lib/shhh/app/private_key/base64_decoder.rb
225
237
  - lib/shhh/app/private_key/decryptor.rb
226
238
  - lib/shhh/app/private_key/detector.rb
@@ -1,14 +0,0 @@
1
- module Shhh
2
- module App
3
- module Password
4
- module Cache
5
- SERVER = {
6
- host: '127.0.0.1',
7
- port: 8787
8
- }
9
- end
10
- end
11
- end
12
- end
13
-
14
- Shhh.dir_r 'shhh/app/password'
@@ -1,46 +0,0 @@
1
- require 'drb/drb'
2
- module Shhh
3
- module App
4
- module Password
5
- module Cache
6
- class Client
7
- # The URI to connect to
8
-
9
- attr_accessor :uri, :host, :port
10
- attr_accessor :config
11
-
12
- def initialize(host: nil,
13
- port: nil,
14
- config: {})
15
- self.config =config
16
- self.host = host
17
- self.port = port
18
- end
19
-
20
- def uri
21
- return uri if uri
22
- template = 'druby://<%= host %>:<%= port %>>'
23
- renderer = ERB.new template
24
- self.uri = renderer.result(binding)
25
- end
26
-
27
- def start
28
- raise NoMethodError, 'not implemented'
29
- # Start a local DRbServer to handle callbacks.
30
-
31
- # Not necessary for this small example, but will be required
32
- # as soon as we pass a non-marshallable object as an argument
33
- # to a dRuby call.
34
-
35
- # Note: this must be called at least once per process to take any effect.
36
- # This is particularly important if your application forks.
37
- DRb.start_service
38
- # timeserver = DRbObject.new_with_uri(SERVER_URI)
39
- # puts timeserver.get_current_time
40
- # sleep 10
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,33 +0,0 @@
1
- require 'drb/drb'
2
- require 'singleton'
3
- module Shhh
4
- module App
5
- module Password
6
- module Cache
7
- URI='druby://localhost:8787'
8
-
9
- class Server
10
- include Singleton
11
-
12
- def lookup(key)
13
- raise NoMethodError, 'not implemented'
14
- return 'tasty bisquits'
15
- end
16
-
17
- FRONT_OBJECT=self.instance
18
-
19
- def boot
20
- raise NoMethodError, 'not implemented'
21
- # The object that handles requests on the server
22
-
23
- $SAFE = 1 # disable eval() and friends
24
-
25
- DRb.start_service(URI, FRONT_OBJECT)
26
- # Wait for the drb server thread to finish before exiting.
27
- DRb.thread.join
28
- end
29
- end
30
- end
31
- end
32
- end
33
- end