file_pool 0.3.1 → 0.3.2

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: dce65030d2667be95a43bdf4c244cbbceb6b78e8
4
- data.tar.gz: cf079a18ce07baecaa9ce661defdb7aa4edccf30
3
+ metadata.gz: 0bc512434b751b3cb4a8654b57ad512f389b9055
4
+ data.tar.gz: 5e8b5fb1e8cb897cfa0b6b683cc40498c2033cc3
5
5
  SHA512:
6
- metadata.gz: dba3e1caded888906fb65ced0d07d0f5b55f28a2343f802813bb8e4e047cb00c9e758afde121a3b63869bed0ed40cba02576acf2d1505fb32598c51279a9afa8
7
- data.tar.gz: b9d54a8a9a62c4c470bab8910677706b8ad99de19b43f302ff3474f8b6e8760db7be9c5f700ea1d26e85479c459a1ff8c903e8f2174925afca56469d7f83b435
6
+ metadata.gz: 4ca7a96294fd39d864a9b6440875246edc0369de448ff61dbf9c0e1d2615718d09c99da1cfe0a4a31ca1477a5d637538545cbd811063e0ad039b4f95ff50392a
7
+ data.tar.gz: 3e6666cabf58d6414e5b844462d7c6034b7adcb3c97942159d97fe7e0bfb329870d50a7a0317bd8c4c565cbee1071e681d238796eb00847a41c481909f82628b
@@ -1,3 +1,4 @@
1
1
  module FilePool
2
- VERSION = "0.3.1"
2
+ # Version 0.3.2
3
+ VERSION = "0.3.2"
3
4
  end
data/lib/file_pool.rb CHANGED
@@ -10,8 +10,7 @@ module FilePool
10
10
  class InvalidFileId < Exception; end
11
11
 
12
12
  #
13
- # Setup the root directory of the file pool root and specify where
14
- # to write log messages
13
+ # Setup the root directory of the file pool and configure encryption
15
14
  #
16
15
  # === Parameters:
17
16
  #
@@ -19,9 +18,21 @@ module FilePool
19
18
  # absolute path of the file pool's root directory under which all files will be stored.
20
19
  # config_file_path (String)::
21
20
  # path to the config file of the filepool.
21
+ # options (Hash)::
22
+ # * :secrets_file (String)
23
+ # path to file containing key and IV for encryption (if omitted FilePool
24
+ # does not encrypt/decrypt). If file is not present, the file is initialized with a
25
+ # new random key and IV.
26
+ # * :encryption_block_size (Integer) sets the block size for
27
+ # encryption/decryption in bytes. Larger blocks need more memory and less time (less IO).
28
+ # Defaults to 1'048'576 (1 MiB).
22
29
  def self.setup root, options={}
30
+ unless(unknown = options.keys - [:encryption_block_size, :secrets_file]).empty?
31
+ puts "FilePool Warning: unknown option(s) passed to #setup: #{unknown.inspect}"
32
+ end
23
33
  @@root = root
24
34
  @@crypted_mode = false
35
+ @@block_size = options[:encryption_block_size] || (1024*1024)
25
36
  configure options[:secrets_file]
26
37
  end
27
38
 
@@ -247,10 +258,17 @@ module FilePool
247
258
  def self.crypt path
248
259
  # Crypt the file in the temp folder and copy after
249
260
  cipher = create_cipher
250
- result = Tempfile.new uuid
251
- crypted_content = cipher.update(File.read(path))
252
- crypted_content << cipher.final
253
- result.write crypted_content
261
+ result = Tempfile.new 'FilePool-encrypt'
262
+
263
+ buf = ''
264
+
265
+ File.open(path) do |inf|
266
+ while inf.read(@@block_size, buf)
267
+ result << cipher.update(buf)
268
+ end
269
+ result << cipher.final
270
+ end
271
+
254
272
  result.close
255
273
  result.path
256
274
  end
@@ -271,12 +289,17 @@ module FilePool
271
289
  def self.decrypt path
272
290
  decipher = create_decipher
273
291
  # Now decrypt the data:
274
- decrypted_content = decipher.update(File.read(path))
275
- decrypted_content << decipher.final
276
- # Put it in a temp file
277
- output = Tempfile.new uuid
278
- output.write decrypted_content
279
- output.open
292
+ output = Tempfile.new 'FilePool-decrypt'
293
+
294
+ buf = ''
295
+ File.open(path) do |inf|
296
+ while inf.read(@@block_size, buf)
297
+ output << decipher.update(buf)
298
+ end
299
+ output << decipher.final
300
+ end
301
+
302
+ output.open # re-open for reading, prevents early deletion of tempfile
280
303
  output.path
281
304
  end
282
305
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: file_pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - robokopp (Robert Anniés)
@@ -38,8 +38,6 @@ files:
38
38
  - README.md
39
39
  - lib/file_pool.rb
40
40
  - lib/file_pool/version.rb
41
- - test/test_file_pool.rb
42
- - test/test_file_pool_encryption.rb
43
41
  homepage: https://github.com/robokopp/file_pool
44
42
  licenses: []
45
43
  metadata: {}
@@ -63,7 +61,5 @@ rubygems_version: 2.4.6
63
61
  signing_key:
64
62
  specification_version: 4
65
63
  summary: Manage a large number files in a pool
66
- test_files:
67
- - test/test_file_pool.rb
68
- - test/test_file_pool_encryption.rb
64
+ test_files: []
69
65
  has_rdoc:
@@ -1,85 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
-
4
- require 'test/unit'
5
- require 'shoulda-context'
6
- require 'file_pool'
7
-
8
- class FilePoolTest < Test::Unit::TestCase
9
-
10
- def setup
11
- @test_dir = "#{File.dirname(__FILE__)}/files"
12
- @pool_root = "#{File.dirname(__FILE__)}/fp_root"
13
- FilePool.setup @pool_root
14
- end
15
-
16
- def teardown
17
- FileUtils.rm_r(Dir.glob @pool_root+"/*")
18
- end
19
-
20
- context "File Pool" do
21
- should "store files" do
22
- fid = FilePool.add(@test_dir+"/a")
23
-
24
- assert UUIDTools::UUID.parse(fid).valid?
25
-
26
- md5_orig = Digest::MD5.hexdigest(File.open(@test_dir+"/a").read)
27
- md5_pooled = Digest::MD5.hexdigest(File.open(FilePool.path(fid)).read)
28
-
29
- assert_equal md5_orig, md5_pooled
30
- end
31
-
32
- should "return path from stored files" do
33
-
34
- fidb = FilePool.add(@test_dir+"/b")
35
- fidc = FilePool.add(@test_dir+"/c")
36
- fidd = FilePool.add!(@test_dir+"/d")
37
-
38
- assert_equal "#{@pool_root}/#{fidb[0,1]}/#{fidb[1,1]}/#{fidb[2,1]}/#{fidb}", FilePool.path(fidb)
39
- assert_equal "#{@pool_root}/#{fidc[0,1]}/#{fidc[1,1]}/#{fidc[2,1]}/#{fidc}", FilePool.path(fidc)
40
- assert_equal "#{@pool_root}/#{fidd[0,1]}/#{fidd[1,1]}/#{fidd[2,1]}/#{fidd}", FilePool.path(fidd)
41
-
42
- end
43
-
44
- should "remove files from pool" do
45
-
46
- fidb = FilePool.add(@test_dir+"/b")
47
- fidc = FilePool.add!(@test_dir+"/c")
48
- fidd = FilePool.add!(@test_dir+"/d")
49
-
50
- path_c = FilePool.path(fidc)
51
- FilePool.remove(fidc)
52
-
53
- assert !File.exist?(path_c)
54
- assert File.exist?(FilePool.path(fidb))
55
- assert File.exist?(FilePool.path(fidd))
56
-
57
- end
58
-
59
- should "throw excceptions when using add! and remove! on failure" do
60
- assert_raises(FilePool::InvalidFileId) do
61
- FilePool.remove!("invalid-id")
62
- end
63
-
64
- assert_raises(Errno::ENOENT) do
65
- FilePool.remove!("61e9b2d1-1738-440d-9b3d-e3c64876f2b0")
66
- end
67
-
68
- assert_raises(Errno::ENOENT) do
69
- FilePool.add!("/not/here/foo.png")
70
- end
71
-
72
- end
73
-
74
- should "not throw exceptions when using add and remove on failure" do
75
- assert !FilePool.remove("invalid-id")
76
- assert !FilePool.remove("61e9b2d1-1738-440d-9b3d-e3c64876f2b0")
77
- assert !FilePool.add("/not/here/foo.png")
78
- end
79
-
80
- should "detect whether file encrypted" do
81
- fid = FilePool.add(@test_dir+"/a")
82
- assert !FilePool.encrypted?(fid)
83
- end
84
- end
85
- end
@@ -1,105 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
-
4
- require 'test/unit'
5
- require 'shoulda-context'
6
- require 'file_pool'
7
-
8
- class FilePoolEncryptionTest < Test::Unit::TestCase
9
-
10
- def setup
11
- @test_dir = "#{File.dirname(__FILE__)}/files"
12
- @pool_root = "#{File.dirname(__FILE__)}/fp_root"
13
- @file_pool_config = "#{File.dirname(__FILE__)}/file_pool_cfg.yml"
14
- FilePool.setup @pool_root, :secrets_file => @file_pool_config
15
- end
16
-
17
- def teardown
18
- FileUtils.rm_r(Dir.glob @pool_root+"/*")
19
- FileUtils.rm_r(Dir.glob "#{@pool_root}_secured/*")
20
- FileUtils.rm_r(Dir.glob @file_pool_config)
21
- end
22
-
23
- context "File Pool" do
24
- should "store encrypted files" do
25
- fid = FilePool.add(@test_dir+"/a")
26
-
27
- assert UUIDTools::UUID.parse(fid).valid?
28
-
29
- md5_orig = Digest::MD5.hexdigest(File.open(@test_dir+"/a").read)
30
- md5_pooled = Digest::MD5.hexdigest(File.open(FilePool.path(fid)).read)
31
-
32
- assert_equal md5_orig, md5_pooled
33
- end
34
-
35
- should "return path from stored encrypted files is in the tmp folder" do
36
-
37
- fida = FilePool.add(@test_dir+"/a")
38
- assert UUIDTools::UUID.parse(fida).valid?
39
-
40
- fidb = FilePool.add(@test_dir+"/b")
41
- assert UUIDTools::UUID.parse(fidb).valid?
42
-
43
- fidc = FilePool.add(@test_dir+"/c")
44
- assert UUIDTools::UUID.parse(fidc).valid?
45
-
46
- fidd = FilePool.add!(@test_dir+"/d")
47
- assert UUIDTools::UUID.parse(fidd).valid?
48
-
49
- assert_equal Digest::MD5.hexdigest(File.open(@test_dir+"/a").read),
50
- Digest::MD5.hexdigest(File.open(FilePool.path(fida)).read)
51
- assert_equal Digest::MD5.hexdigest(File.open(@test_dir+"/b").read),
52
- Digest::MD5.hexdigest(File.open(FilePool.path(fidb)).read)
53
- assert_equal Digest::MD5.hexdigest(File.open(@test_dir+"/c").read),
54
- Digest::MD5.hexdigest(File.open(FilePool.path(fidc)).read)
55
- assert_equal Digest::MD5.hexdigest(File.open(@test_dir+"/d").read),
56
- Digest::MD5.hexdigest(File.open(FilePool.path(fidd)).read)
57
-
58
- assert_equal Dir.tmpdir, File.dirname(FilePool.path(fida))
59
- assert_equal Dir.tmpdir, File.dirname(FilePool.path(fidb))
60
- assert_equal Dir.tmpdir, File.dirname(FilePool.path(fidc))
61
- assert_equal Dir.tmpdir,File.dirname( FilePool.path(fidd))
62
- end
63
-
64
- should "remove files from encrypted pool" do
65
-
66
- fidb = FilePool.add(@test_dir+"/b")
67
- fidc = FilePool.add!(@test_dir+"/c")
68
- fidd = FilePool.add!(@test_dir+"/d")
69
-
70
- path_c = FilePool.path(fidc, :decrypt => false)
71
- FilePool.remove(fidc)
72
-
73
- assert !File.exist?(path_c)
74
- assert File.exist?(FilePool.path(fidb, :decrypt => false))
75
- assert File.exist?(FilePool.path(fidd, :decrypt => false))
76
-
77
- end
78
-
79
- should "throw exceptions when using add! and remove! on failure in encrypted mode" do
80
- assert_raises(FilePool::InvalidFileId) do
81
- FilePool.remove!("invalid-id")
82
- end
83
-
84
- assert_raises(Errno::ENOENT) do
85
- FilePool.remove!("61e9b2d1-1738-440d-9b3d-e3c64876f2b0")
86
- end
87
-
88
- assert_raises(Errno::ENOENT) do
89
- FilePool.add!("/not/here/foo.png")
90
- end
91
-
92
- end
93
-
94
- should "not throw exceptions when using add and remove on failure in encrypted mode" do
95
- assert !FilePool.remove("invalid-id")
96
- assert !FilePool.remove("61e9b2d1-1738-440d-9b3d-e3c64876f2b0")
97
- assert !FilePool.add("/not/here/foo.png")
98
- end
99
-
100
- should "detect whether file encrypted" do
101
- fid = FilePool.add(@test_dir+"/a")
102
- assert FilePool.encrypted?(fid)
103
- end
104
- end
105
- end