blobs 0.2.1 → 0.2.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: 95fb83597fc2fa8e6aa7697afe9e4382567bf4b0
4
- data.tar.gz: 87e9c4fee33667503ed9bbfc1377869264c6d940
3
+ metadata.gz: 9239dbb94d2fbc57e472c5305f5e8cdd3516c647
4
+ data.tar.gz: 7b8d34bc71691d89e2dac419261d4c07a34878d7
5
5
  SHA512:
6
- metadata.gz: f6756952be28d39aa7b728a6b603ee8407c6d0a99b81714c0c24bcb27420c538ca76062ebd68acc1965665c3a7443f2e18dec2a473abea9d05c5470c0a306483
7
- data.tar.gz: 9a71066718c58035869de344b593f2655f9d48a3f7502a3be3245ef68ab53f7d9daf50218d78cef103150ea281c0deaa9b352e58a1267b61e4fb94bc46e11f2f
6
+ metadata.gz: 9548525b231d3442372092c0dae225c61a63c1cfe25e44584c2b296813fee54af0c43d05e6ed5f2bb4c6cacc2fe2ee37d5b73c194ba29594b550d9cc07331234
7
+ data.tar.gz: 1eb56940949b69a4458c2aa43bc69b81c9736b16be994472d44516513aecd00a5665013ff789fc59e9cfcb9b9c3e8abf4268767652e9075f48bdfd487bcb674e
data/blobs.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.14"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "httparty", "~> 0.13.7"
24
+ spec.add_dependency "bundler", "~> 1.14"
25
+ spec.add_dependency "rake", "~> 10.0"
26
+ spec.add_dependency "httparty", "~> 0.13.7"
27
27
  end
data/lib/blobs.rb CHANGED
@@ -4,6 +4,10 @@ require 'openssl'
4
4
  require 'base64'
5
5
  require 'securerandom'
6
6
  require 'cgi'
7
+ require 'yaml'
8
+
9
+ # ENV['BLOB_STORE_API_BASE_URL'] = 'http://localhost'
10
+ # ENV['MASTER_ACCESS_TOKEN'] = '6CU3xfUOtvvVBRPPOe5ShlCOAZ0Ht5k9'
7
11
 
8
12
  module Blobs
9
13
  DEBUG = false
@@ -89,6 +93,14 @@ module Blobs
89
93
  response.parsed_response
90
94
  end
91
95
 
96
+ def user_token
97
+ Base64.decode64(self.current_user['userToken'])
98
+ end
99
+
100
+ def export_key_file(key_file = "#{ENV['HOME']}/.blobs.key")
101
+ decrypt_file("#{key_file}.enc", key_file)
102
+ end
103
+
92
104
  private
93
105
  def sha256(str)
94
106
  Base64.encode64(Digest::SHA256.digest(str)).strip
@@ -110,41 +122,36 @@ module Blobs
110
122
  decipher.update(Base64.decode64(enc_str).strip) + decipher.final
111
123
  end
112
124
 
113
- def user_token
114
- Base64.decode64(self.current_user['userToken'])
115
- end
116
-
117
125
  def encryption_key
118
126
  return @encryption_key if @encryption_key
119
127
 
120
- cipher = OpenSSL::Cipher::AES256.new :CBC
121
128
  key_file = "#{ENV['HOME']}/.blobs.key"
122
- if File.file?(key_file)
123
- enc_str = File.read(key_file)
124
- cipher.decrypt
125
- cipher.key = user_token
126
- if (json_str = cipher.update(Base64.strict_decode64(enc_str).strip) + cipher.final)
127
- json = JSON.parse(json_str)
128
- if json['key'] and json['iv']
129
- @iv = Base64.decode64(json['iv']).strip
130
- @encryption_key = Base64.decode64(json['key']).strip
129
+ if File.file?("#{key_file}.enc")
130
+ if decrypt_file("#{key_file}.enc", key_file)
131
+ key_file_contents = File.read(key_file)
132
+ key_file_yml = YAML.load(Base64.strict_decode64(key_file_contents))
133
+ if key_file_yml[:key] and key_file_yml[:iv]
134
+ @iv = key_file_yml[:iv]
135
+ @encryption_key = key_file_yml[:key]
136
+ File.delete(key_file)
131
137
  return @encryption_key
132
138
  else
133
139
  raise "Key file is corrupt!"
134
140
  end
135
141
  else
136
- raise "Can't read key file!"
142
+ raise "Key file couldn't be decrypted!"
137
143
  end
138
144
  else
139
- @encryption_key = Digest::SHA256.digest(rand(32**32).to_s(32))
140
- @iv = cipher.random_iv
141
- key_file_json = { key: Base64.encode64(@encryption_key).strip, iv: Base64.encode64(@iv).strip }
142
- File.open(key_file,"w") do |f|
143
- cipher.encrypt
144
- cipher.key = user_token
145
- enc_json = Base64.strict_encode64(cipher.update(key_file_json.to_json) + cipher.final).strip
146
- f.write(enc_json)
145
+ cipher = OpenSSL::Cipher::AES256.new :CBC
146
+ @encryption_key = Digest::SHA256.hexdigest(cipher.random_key)[0..31]
147
+ @iv = Digest::SHA256.hexdigest(cipher.random_iv)[0..15]
148
+ key_file_yml = { key: @encryption_key, iv: @iv }
149
+ File.open(key_file, 'wb') do |f|
150
+ enc = Base64.strict_encode64(key_file_yml.to_yaml)
151
+ f.write(enc)
152
+ f.close
147
153
  end
154
+ File.delete(key_file) if encrypt_file(key_file)
148
155
  end
149
156
  @encryption_key
150
157
  end
@@ -152,5 +159,43 @@ module Blobs
152
159
  def get_iv
153
160
  @iv
154
161
  end
162
+
163
+ def encrypt_file(file_path)
164
+ raise 'No user token!' unless self.user_token
165
+
166
+ cipher = OpenSSL::Cipher::AES256.new :CBC
167
+ cipher.encrypt
168
+ cipher.key = self.user_token
169
+
170
+ buf = ""
171
+ File.open("#{file_path}.enc", 'wb') do |outf|
172
+ File.open(file_path, 'rb') do |inf|
173
+ while inf.read(4096, buf)
174
+ outf << cipher.update(buf)
175
+ end
176
+ outf << cipher.final
177
+ end
178
+ end
179
+ true
180
+ end
181
+
182
+ def decrypt_file(file_path, dec_file_path)
183
+ raise 'No user token!' unless self.user_token
184
+
185
+ cipher = OpenSSL::Cipher::AES256.new :CBC
186
+ cipher.decrypt
187
+ cipher.key = self.user_token
188
+
189
+ buf = ""
190
+ File.open(dec_file_path, 'wb') do |outf|
191
+ File.open(file_path, 'rb') do |inf|
192
+ while inf.read(4096, buf)
193
+ outf << cipher.update(buf)
194
+ end
195
+ outf << cipher.final
196
+ end
197
+ end
198
+ true
199
+ end
155
200
  end
156
201
  end
data/lib/blobs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Blobs
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blobs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oliver Kiessler
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-22 00:00:00.000000000 Z
11
+ date: 2017-07-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -17,7 +17,7 @@ dependencies:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.14'
20
- type: :development
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
@@ -31,7 +31,7 @@ dependencies:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
- type: :development
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
@@ -45,7 +45,7 @@ dependencies:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.13.7
48
- type: :development
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements: