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 +4 -4
- data/blobs.gemspec +3 -3
- data/lib/blobs.rb +68 -23
- data/lib/blobs/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9239dbb94d2fbc57e472c5305f5e8cdd3516c647
|
4
|
+
data.tar.gz: 7b8d34bc71691d89e2dac419261d4c07a34878d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
25
|
-
spec.
|
26
|
-
spec.
|
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
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
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 "
|
142
|
+
raise "Key file couldn't be decrypted!"
|
137
143
|
end
|
138
144
|
else
|
139
|
-
|
140
|
-
@
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
f.
|
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
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.
|
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-
|
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: :
|
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: :
|
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: :
|
48
|
+
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|