blobs 0.2.1 → 0.2.3

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: 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: