encrypted_s3_copy 0.0.6 → 0.0.7

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: b37ebdcd5efbb338fba9f0d725ea7db0b5135c7a
4
- data.tar.gz: 121c6d046e41c227f6a817ca9ca5cd172e3a6360
3
+ metadata.gz: bd0ff5fcab6597788f33cf6ddf805f3158189c03
4
+ data.tar.gz: 25b15f638ca1ff29652a8f71981c6cc99b763c30
5
5
  SHA512:
6
- metadata.gz: feed4d462ee04a808334ac9c9c1d88fa9b3566b5ff126fb033989212da7d58f4900af0d777bad404b109e026adf6a6e2c3c0ad4484d6dfe2d285c5c821a5bcdf
7
- data.tar.gz: df2dcb38312ef95b5ad1b909f39040ddf87b68e1f3efeb53b8462bfc78c0703ebba4e4cbc9197c278e928afc402e88802f46ce9834be0e6fe95576f7b734e649
6
+ metadata.gz: ea8cf92dfd4044e832d4a3e6bd008611600a96cceb483e42463bd0bd72029ec48f372649439c12a47e0654040a2d6c8440b75ff4b35dadf1dd00f1e10b767aa3
7
+ data.tar.gz: 8890b9d079aa0def0ec3907e737b3ca96c16c7238a70a6fd0af1e05f0d5dabae04d73652f001ca482011a3a4bb409f34491ce1b18e8d0be427b8113a6c904cfc
data/README.md CHANGED
@@ -25,7 +25,7 @@ command options
25
25
 
26
26
  For client side encryption of AWS S3, generate symmetric key and save to file.
27
27
 
28
- $ generate_symmetric_key -k /path/to/symmetric_key/file
28
+ $ aes_key_gen -k /path/to/symmetric_key/file
29
29
 
30
30
  ### Upload or download encrypted file from/to AWS S3
31
31
 
@@ -20,9 +20,9 @@ Gem::Specification.new do |spec|
20
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency "aws-sdk", "~> 1.50"
23
+ spec.add_dependency "aws-sdk", "~> 1.30"
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.6"
25
+ spec.add_development_dependency "bundler", "~> 1.5"
26
26
  spec.add_development_dependency "rake"
27
27
  spec.add_development_dependency "rspec", ">= 2.99"
28
28
  end
@@ -8,11 +8,17 @@ module EncryptedS3Copy
8
8
  class Client
9
9
  # s3://(a_bucket)/(path/to/target_file)
10
10
  S3_PATH = /^s3:\/\/([^\/]+)\/(.+)/
11
+
12
+ def initialize(opts={})
13
+ @source = opts[:source_path]
14
+ @dest = opts[:destination_path]
15
+ set_s3_encryption_key(opts[:key_file_path]) if opts[:key_file_path]
16
+ end
17
+
11
18
  def before
12
19
  opt = OptionParser.new
13
20
  opt.on('-k', '--key-file=KEY_FILE_PATH') do |path|
14
- encoded_key = File.read(path)
15
- AWS.config(s3_encryption_key: Base64.decode64(encoded_key.chomp))
21
+ set_s3_encryption_key(path)
16
22
  end
17
23
  opt.on('-s', '--source=SOURCE_PATH') do |path|
18
24
  @source = path
@@ -31,8 +37,6 @@ class Client
31
37
  handle
32
38
  end
33
39
 
34
- private
35
-
36
40
  def handle
37
41
  if !(@source =~ S3_PATH) && @dest =~ S3_PATH
38
42
  if @is_recursive
@@ -52,12 +56,19 @@ class Client
52
56
  end
53
57
  end
54
58
 
59
+ private
60
+
61
+ def set_s3_encryption_key(path)
62
+ encoded_key = File.read(path)
63
+ AWS.config(s3_encryption_key: Base64.decode64(encoded_key.chomp))
64
+ end
65
+
55
66
  def recursive_download(bucket_name, suffix)
56
67
  suffix += '/' unless suffix =~ /\/$/
57
68
 
58
69
  s3_objects = get_s3_objects(bucket_name)
59
70
  s3_objects.with_prefix(suffix).each do |obj|
60
- next if obj.content_length < 1
71
+ next if obj.key =~ /\/$/
61
72
  single_download(obj)
62
73
  end
63
74
  end
@@ -1,3 +1,3 @@
1
1
  module EncryptedS3Copy
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -1,5 +1,6 @@
1
+ require 'spec_helper'
1
2
  # require 'simplecov'
2
- require_relative '../../lib/encrypted_s3_copy/client'
3
+ # require_relative '../../lib/encrypted_s3_copy/client'
3
4
 
4
5
  describe EncryptedS3Copy::Client do
5
6
  let(:bucket_name) { 'test_bkt' }
@@ -103,7 +104,7 @@ describe EncryptedS3Copy::Client do
103
104
  expect(subject).to receive(:single_upload).with('dest', 'dir/file02.txt')
104
105
  expect(subject).to receive(:single_upload).
105
106
  with('dest', 'dir/dir2/file01.txt')
106
- subject.send(:handle)
107
+ subject.handle
107
108
  end
108
109
  end
109
110
 
@@ -130,13 +131,6 @@ describe EncryptedS3Copy::Client do
130
131
  allow(s3_file03_double).to receive(:key).and_return('dir/test/myfile')
131
132
  allow(s3_file04_double).to receive(:key).and_return('hoge.txt')
132
133
 
133
- allow(s3_dir01_double).to receive(:content_length).and_return(0)
134
- allow(s3_dir02_double).to receive(:content_length).and_return(0)
135
- allow(s3_file01_double).to receive(:content_length).and_return(10)
136
- allow(s3_file02_double).to receive(:content_length).and_return(10)
137
- allow(s3_file03_double).to receive(:content_length).and_return(10)
138
- allow(s3_file04_double).to receive(:content_length).and_return(10)
139
-
140
134
  allow(subject).to receive(:get_s3_objects).with('dest').
141
135
  and_return(s3_objects_double)
142
136
 
@@ -156,7 +150,7 @@ describe EncryptedS3Copy::Client do
156
150
 
157
151
  expect(file_double).to receive(:write).with(chunk_double).exactly(4).times
158
152
 
159
- subject.send(:handle)
153
+ subject.handle
160
154
  end
161
155
  end
162
156
  end
@@ -173,7 +167,7 @@ describe EncryptedS3Copy::Client do
173
167
  end
174
168
  it 'should get bucket object' do
175
169
  expect(subject).to receive(:get_s3_object).with(bucket_name, dest_s3_suffix)
176
- subject.send(:handle)
170
+ subject.handle
177
171
  end
178
172
  context 'when destination path is directory path' do
179
173
  let(:remote_dest_path) { "s3://#{bucket_name}/#{dest_s3_suffix}" }
@@ -185,20 +179,20 @@ describe EncryptedS3Copy::Client do
185
179
  it 'should complement file name' do
186
180
  expected_dest = dest_s3_suffix + 'source_file_name'
187
181
  expect(subject).to receive(:get_s3_object).with(bucket_name, expected_dest)
188
- subject.send(:handle)
182
+ subject.handle
189
183
  end
190
184
  end
191
185
  it 'should open source file' do
192
186
  expect(File).to receive(:open).with(local_source_path)
193
- subject.send(:handle)
187
+ subject.handle
194
188
  end
195
189
  it 'should write file contents to s3 object' do
196
190
  expect(obj_double).to receive(:write).with(file_double)
197
- subject.send(:handle)
191
+ subject.handle
198
192
  end
199
193
  it 'should close file pointer' do
200
194
  expect(file_double).to receive(:close)
201
- subject.send(:handle)
195
+ subject.handle
202
196
  end
203
197
  end
204
198
 
@@ -211,16 +205,16 @@ describe EncryptedS3Copy::Client do
211
205
  end
212
206
  it 'should execute single_download' do
213
207
  expect(subject).to receive(:single_download)
214
- subject.send(:handle)
208
+ subject.handle
215
209
  end
216
210
  it 'should get bucket' do
217
211
  expect(subject).to receive(:get_s3_object)
218
- subject.send(:handle)
212
+ subject.handle
219
213
  end
220
214
  context 'when destination path is full path' do
221
215
  it 'should open local destination file' do
222
216
  expect(File).to receive(:open).with(local_dest_path, 'wb')
223
- subject.send(:handle)
217
+ subject.handle
224
218
  end
225
219
  end
226
220
  context 'when destination path is directory path' do
@@ -228,19 +222,19 @@ describe EncryptedS3Copy::Client do
228
222
  it 'should complement file name' do
229
223
  expected_dest = local_dest_path + 'source_file_name'
230
224
  expect(File).to receive(:open).with(expected_dest, 'wb')
231
- subject.send(:handle)
225
+ subject.handle
232
226
  end
233
227
  end
234
228
  it 'should read s3 object' do
235
229
  allow(File).to receive(:open).and_yield(file_double)
236
230
  expect(obj_double).to receive(:read)
237
- subject.send(:handle)
231
+ subject.handle
238
232
  end
239
233
  it 'should write contents of s3 object to local file' do
240
234
  allow(File).to receive(:open).and_yield(file_double)
241
235
  allow(obj_double).to receive(:read).and_yield('chunk')
242
236
  expect(file_double).to receive(:write).with('chunk')
243
- subject.send(:handle)
237
+ subject.handle
244
238
  end
245
239
  end
246
240
 
@@ -249,7 +243,7 @@ describe EncryptedS3Copy::Client do
249
243
  subject.instance_variable_set(:@source, local_source_path)
250
244
  subject.instance_variable_set(:@dest, local_dest_path)
251
245
  message = 'either source path or destination path or both are wrong'
252
- expect{ subject.send(:handle) }.to raise_error(RuntimeError, message)
246
+ expect{ subject.handle }.to raise_error(RuntimeError, message)
253
247
  end
254
248
  end
255
249
  end
@@ -285,4 +279,33 @@ describe EncryptedS3Copy::Client do
285
279
  subject.execute
286
280
  end
287
281
  end
282
+
283
+ context 'use as library' do
284
+ describe ".initialize" do
285
+ let(:opts) do
286
+ { key_file_path: '/path/to/key_file',
287
+ source_path: '/path/to/source_file',
288
+ destination_path: 's3://bucket/path/to/file' }
289
+ end
290
+ let(:client) { described_class.new(opts) }
291
+ let(:key_str) { "a_key_str\n" }
292
+
293
+ before :each do
294
+ allow(File).to receive(:read).with(opts[:key_file_path]).and_return(key_str)
295
+ end
296
+
297
+ it 'set value of s3_encryption_key' do
298
+ source_value = client.instance_variable_get(:@source)
299
+ expect(source_value).to eq(opts[:source_path])
300
+ end
301
+ it 'set value of destination_path' do
302
+ dest_value = client.instance_variable_get(:@dest)
303
+ expect(dest_value).to eq(opts[:destination_path])
304
+ end
305
+ it 'set s3_encryption_key' do
306
+ expect(AWS).to receive(:config).with(s3_encryption_key: Base64.decode64(key_str.chomp))
307
+ client
308
+ end
309
+ end
310
+ end
288
311
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: encrypted_s3_copy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - nabewata07
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-21 00:00:00.000000000 Z
11
+ date: 2014-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ~>
18
18
  - !ruby/object:Gem::Version
19
- version: '1.50'
19
+ version: '1.30'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
- version: '1.50'
26
+ version: '1.30'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: '1.6'
33
+ version: '1.5'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: '1.6'
40
+ version: '1.5'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  version: '0'
115
115
  requirements: []
116
116
  rubyforge_project:
117
- rubygems_version: 2.2.2
117
+ rubygems_version: 2.0.2
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: upload and download encrypted files to/from AWS S3