ftpmvc-gpg 0.1.0 → 0.2.0

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: 666547b5c0a29b7adab5379ce4df0f3a704c494e
4
- data.tar.gz: 8bc83fcd6444c2f6aa70cff4bf600f5fc0d72b08
3
+ metadata.gz: 4e496802a7d34286f1ee248f9015e53516c62167
4
+ data.tar.gz: 7040b38ea69dbe17320ee88f0f68f942f3836adf
5
5
  SHA512:
6
- metadata.gz: b4e26f5710c8aa65518213b74cfab3e71d1853dbf1d77693947da507d46e5edb95c695f56e2f1661f05b26a574725a57fec45f42f56405daf635f0480677cb14
7
- data.tar.gz: bdfef1ca5938ef1f19d817535e0f74c4a49470dc78c5991f09ba937acc9c38ae127e3575ae21ed4500a78f2a723087d7b7a8ab5f3f863518f162a304bfd7e672
6
+ metadata.gz: 5232706bcf4a74d7675d685ddb080789cd0772d9772b5d22f5be9275e1ab7cd3303bd0e66f6ee67e61ace52b5e3bd8f9dfc3918ccf5eacb75644fb4f1818cd02
7
+ data.tar.gz: f1b49f3732872892026ae81d679ed5bacf5621223dc831b59bd04c2c3be566952504c5f926cda5bb6a4fb9d43709efa01bad0b5ed2a021f7a8d077e9d0d8fcb8
data/ftpmvc-gpg.gemspec CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "guard-rspec"
24
- spec.add_dependency "ftpmvc", '>= 0.7.0'
24
+ spec.add_dependency "ftpmvc", '>= 0.8.0'
25
25
  spec.add_dependency "gpgme"
26
26
  end
@@ -1,12 +1,14 @@
1
1
  require 'ftpmvc/filter/base'
2
2
  require 'gpgme'
3
+ require 'ftpd/stream'
3
4
 
4
5
  module FTPMVC
5
6
  module Filter
6
7
  class Gpg < FTPMVC::Filter::Base
7
8
  def initialize(fs, chain, options={})
8
9
  super fs, chain
9
- @crypto = GPGME::Crypto.new recipients: options[:recipients], always_trust: true
10
+ @crypto = GPGME::Crypto.new(
11
+ password: options[:passphrase], recipients: options[:recipients], always_trust: true)
10
12
  import_keys(options[:keys]) if options.include?(:keys)
11
13
  end
12
14
 
@@ -30,6 +32,14 @@ module FTPMVC
30
32
  @chain.directory?(remove_extension(path))
31
33
  end
32
34
 
35
+ def put(path, stream)
36
+ buffer = ''
37
+ while bytes = stream.read
38
+ buffer << bytes
39
+ end
40
+ @chain.put(remove_extension(path), ::Ftpd::Stream.new(@crypto.decrypt(buffer), 'B'))
41
+ end
42
+
33
43
  protected
34
44
 
35
45
  def original_data(path)
@@ -43,7 +53,7 @@ module FTPMVC
43
53
  end
44
54
 
45
55
  def remove_extension(path)
46
- path.gsub(/\.gpg$/, '')
56
+ path.gsub(/\.(gpg|pgp)$/, '')
47
57
  end
48
58
  end
49
59
  end
@@ -1,5 +1,5 @@
1
1
  module FTPMVC
2
2
  module GPG
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
Binary file
@@ -5,41 +5,78 @@ require 'net/ftp'
5
5
 
6
6
 
7
7
  describe FTPMVC::Filter::Gpg do
8
+ let(:encrypted_dir) { EncryptedDirectory.new(name: 'encrypted') }
8
9
  let(:app) do
10
+ dir = encrypted_dir
9
11
  FTPMVC::Application.new do
10
12
 
11
- filter FTPMVC::Filter::Gpg, recipients: ['john.doe@gmail.com'], keys: [
12
- <<-EOF
13
- -----BEGIN PGP PUBLIC KEY BLOCK-----
14
- Version: GnuPG v1
13
+ filter FTPMVC::Filter::Gpg, passphrase: 'mypassphrase', recipients: ['john.doe@gmail.com'], keys: [
14
+ "-----BEGIN PGP PUBLIC KEY BLOCK-----
15
+ Version: GnuPG v1
15
16
 
16
- mI0EVGNdYQEEALR159b8du6QsH0lQDx1ImFmdN9qVWHgbcXDK4CKwXMbLwNEsjIn
17
- LNkGP7ZPtnvodywlV7G+CDcVDa2r7MrLJdk3/idQ25zBVnL8HndkZiEZHj+WEo5u
18
- sR5uZQSshGjWdl2UKWOJoRCW0PEfNBxJeKbCrksaebXjzgXIJl7Mar6TABEBAAG0
19
- HUpvaG4gRG9lIDxqb2huLmRvZUBnbWFpbC5jb20+iLgEEwECACIFAlRjXWECGwMG
20
- CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEGp4Yp2MJm5hxOQD/jGvwPiKEgHK
21
- AKUqzMv8RpkfP+hkNMa+clhURYRReo0ISWDsb8XUZsZF84ZhwVshlAHqCVdJb13H
22
- iK/uSBJpxgEHwzIIn+k1G14HK7DKC7kfheaN0mvS3Tq9sdd5PyWGnQyBiP3OYlmF
23
- TWa/KEz5IfKs95nSBa1w3Vc9cjpn1YgxuI0EVGNdYQEEALZkxWWXptwEcdtYwdR6
24
- wgXbmFKjeyhRutGJoAR/SwkDoQBqQhTLh6eFKTL9gHWolAJJm4H0pBwVGsVa5su8
25
- wXfgIu2Y3rSItwjvof05mlTdqjaMVYM/jiHnfIBVJa/xuQRhkroa1jlK4iVZmKNY
26
- 8qsj6pvKGB0uOj+BHMMnMMz5ABEBAAGInwQYAQIACQUCVGNdYQIbDAAKCRBqeGKd
27
- jCZuYcXBBACtBmIR5o/m2adUCzYfb/mNlh7eM/bvNMeXXmPsazhl5kp05izqy5Z1
28
- iSQTnoJ8FKi4ke9GRbpKL4EZ4tWop4QKWAbbojIepR0Q6Ncvv4Ho9N32nmSEEfBU
29
- UPgZz+71ilscZiuigmFSDhP368qBG6rmaxgOoK4O+wjVJEJzq4Yc8A==
30
- =NH17
31
- -----END PGP PUBLIC KEY BLOCK-----
32
- EOF
17
+ mI0EVOyxnQEEALTim9Dk3e8UgzGltjsKBZi1blSSqH2sYSH6MQXHRDoeV0R/32oJ
18
+ OlWJ07INSy0DfX+XZupFk5yXkqM3Q9Vqrj2DUXAP1d/I4kBI/WOu6CL/bW5f45Vg
19
+ wQ8gKcowrniFMte8/1S98LneNQlViJiowmCsib7MfJCew/4BYHpnwd/TABEBAAG0
20
+ HUpvaG4gRG9lIDxqb2huLmRvZUBnbWFpbC5jb20+iLgEEwECACIFAlTssZ0CGwMG
21
+ CwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEAwbIKSlGNiWD7sD/Rmo9JlTFukC
22
+ 7tbwHEz9q2D4hB7OZAVLlVhUszwJ0gZOb+cG55L59f/M4nSE7gC995d+2DuncZoC
23
+ NP48NWJMVzecTMDu1lcxTJ2pFVa7626kdwKH8QkM6NG0+E5kl5uaF2mUzcWpHF9t
24
+ U5uYmIUXxNghyKJE3/EqzLpJGtWqGd93uI0EVOyxnQEEANoIiUR0mI53Vn1/y2tx
25
+ NRfcweOxytHZFMkSUyE6lQcllU6tkQCBL60MWBEtNKvTulC7ciw/SbxID/ugTo4Q
26
+ lbnRNIyZTitnhzOPUD/OqvT1VE4+mi9fgaaIzKBu9OVVqAWh3ySo0SKQOJGKC15K
27
+ rMZJNek1DmtGwj0KiAFkxg3DABEBAAGInwQYAQIACQUCVOyxnQIbDAAKCRAMGyCk
28
+ pRjYlvddBACGn75Uer8DbRw+YjK454J3JB1g745ASE5H4WRVR/VjxTpwZ96+fcJQ
29
+ SS/MEvVJjG3hoe8Li55dJPOwefr6y2fkxIHrkeNVFCIz9ACfQCYdXGoEYX9MqucI
30
+ spD7r/SHY1ecipvzHCvcD6VaoPKmsck9XaWqt/jMx2Cp75MC1dd6tg==
31
+ =I7Sh
32
+ -----END PGP PUBLIC KEY BLOCK-----",
33
+ "-----BEGIN PGP PRIVATE KEY BLOCK-----
34
+ Version: GnuPG v1
35
+
36
+ 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
65
+ +MzHYKnvkwLV13q2
66
+ =GFGp
67
+ -----END PGP PRIVATE KEY BLOCK-----"
33
68
  ]
34
69
 
35
70
  filesystem do
36
- directory :encrypted
71
+ directory dir
37
72
  end
38
73
  end
39
74
  end
40
75
 
41
76
  before do
42
77
  class EncryptedDirectory < FTPMVC::Directory
78
+ attr_reader :received_data
79
+
43
80
  def index
44
81
  super + [ FTPMVC::File.new('password.txt') ]
45
82
  end
@@ -47,6 +84,10 @@ describe FTPMVC::Filter::Gpg do
47
84
  def get(path)
48
85
  StringIO.new('secret')
49
86
  end
87
+
88
+ def put(path, stream)
89
+ @received_data = stream.read
90
+ end
50
91
  end
51
92
  end
52
93
 
@@ -66,4 +107,13 @@ describe FTPMVC::Filter::Gpg do
66
107
  end
67
108
  end
68
109
  end
110
+ describe 'PUT/STOR' do
111
+ it 'encrypts files content' do
112
+ with_application(app) do |ftp|
113
+ ftp.login
114
+ ftp.putbinaryfile('spec/fixtures/data.gpg', '/encrypted/password.txt.gpg')
115
+ expect(encrypted_dir.received_data).to eq 'data'
116
+ end
117
+ end
118
+ end
69
119
  end
@@ -1,51 +1,58 @@
1
1
  require 'ftpmvc/filter/gpg'
2
2
  require 'ftpmvc/file'
3
3
  require 'ftpmvc/directory'
4
+ require 'ftpd/stream'
4
5
 
5
6
  describe FTPMVC::Filter::Gpg do
6
- before do
7
- stub_const 'OtherFilter', Class.new(FTPMVC::Filter::Base)
7
+ let(:other_filter_class) do
8
+ Class.new(FTPMVC::Filter::Base) do
9
+ attr_reader :received_stream
10
+ def put(path, stream)
11
+ @received_stream = stream
12
+ end
13
+ end
8
14
  end
9
- let(:other_filter) { OtherFilter.new(nil, nil) }
15
+ let(:other_filter) { other_filter_class.new(nil, nil) }
10
16
  let(:gpg_filter) { FTPMVC::Filter::Gpg.new(nil, other_filter, recipients: 'john.doe@gmail.com') }
11
- describe '#index' do
12
- before do
13
- allow(other_filter)
14
- .to receive(:index)
15
- .and_return [ FTPMVC::File.new(original_filename), FTPMVC::Directory.new('documents') ]
16
- end
17
- let(:original_filename) { 'secret.txt' }
18
- it 'adds .gpg extension to files returned by chain' do
19
- expect(gpg_filter.index('/').map(&:name)).to include 'secret.txt.gpg'
20
- end
21
- context 'when file already has .gpg as extensions' do
22
- let(:original_filename) { 'secret.txt.gpg' }
23
- it 'keeps filename untouched' do
24
- expect(gpg_filter.index('/').map(&:name)).to include 'secret.txt.gpg'
17
+ describe '#index' do
18
+ before do
19
+ allow(other_filter)
20
+ .to receive(:index)
21
+ .and_return [ FTPMVC::File.new(original_filename), FTPMVC::Directory.new(name: 'documents') ]
25
22
  end
26
- end
27
- it 'keeps directory names untouched' do
28
- expect(gpg_filter.index('/').map(&:name)).to include 'documents'
29
- end
30
- context 'when file already has .gpg as extensions' do
31
- let(:original_filename) { 'secret.txt.gpg' }
32
- it 'keeps filename unchanged' do
23
+ let(:original_filename) { 'secret.txt' }
24
+ it 'adds .gpg extension to files returned by chain' do
33
25
  expect(gpg_filter.index('/').map(&:name)).to include 'secret.txt.gpg'
34
26
  end
27
+ context 'when file already has .gpg as extensions' do
28
+ let(:original_filename) { 'secret.txt.gpg' }
29
+ it 'keeps filename untouched' do
30
+ expect(gpg_filter.index('/').map(&:name)).to include 'secret.txt.gpg'
31
+ end
32
+ end
33
+ it 'keeps directory names untouched' do
34
+ expect(gpg_filter.index('/').map(&:name)).to include 'documents'
35
+ end
36
+ context 'when file already has .gpg as extensions' do
37
+ let(:original_filename) { 'secret.txt.gpg' }
38
+ it 'keeps filename unchanged' do
39
+ expect(gpg_filter.index('/').map(&:name)).to include 'secret.txt.gpg'
40
+ end
41
+ end
35
42
  end
36
- end
37
43
 
38
- describe '#get' do
39
- before do
40
- allow_any_instance_of(GPGME::Crypto)
41
- .to receive(:encrypt)
42
- .and_return StringIO.new('encrypted secret')
43
- allow(other_filter)
44
- .to receive(:get)
45
- .and_return StringIO.new('secret')
46
- end
47
- it 'encrypts original content' do
48
- expect(gpg_filter.get('/file.txt.gpg').read).to eq 'encrypted secret'
44
+ describe '#get' do
45
+ before do
46
+ allow_any_instance_of(GPGME::Crypto)
47
+ .to receive(:encrypt)
48
+ .and_return StringIO.new('encrypted secret')
49
+ allow(other_filter)
50
+ .to receive(:get)
51
+ .and_return StringIO.new('secret')
52
+ end
53
+ it 'encrypts original content' do
54
+ expect(gpg_filter.get('/file.txt.gpg').read).to eq 'encrypted secret'
55
+ end
49
56
  end
50
57
 
51
58
  describe '#initialize' do
@@ -91,5 +98,24 @@ describe FTPMVC::Filter::Gpg do
91
98
  gpg_filter.directory?('/secret/passwords.txt.gpg')
92
99
  end
93
100
  end
101
+
102
+ describe '#put' do
103
+ let(:stream) { Ftpd::Stream.new(StringIO.new('encrypted content'), 'B') }
104
+ before do
105
+ allow_any_instance_of(GPGME::Crypto)
106
+ .to receive(:decrypt)
107
+ .with('encrypted content')
108
+ .and_return GPGME::Data.new('decrypted content')
109
+ end
110
+ it 'removes .pgp extension from filename' do
111
+ expect(other_filter)
112
+ .to receive(:put)
113
+ .with('/secret/passwords.txt', kind_of(Ftpd::Stream))
114
+ gpg_filter.put('/secret/passwords.txt.pgp', stream)
115
+ end
116
+ it 'decrypts the stream' do
117
+ gpg_filter.put('/secret/passwords.txt.pgp', stream)
118
+ expect(other_filter.received_stream.read).to eq 'decrypted content'
119
+ end
94
120
  end
95
121
  end
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ftpmvc-gpg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - André Aizim Kelmanson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-19 00:00:00.000000000 Z
11
+ date: 2015-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
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
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: guard-rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: ftpmvc
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
- version: 0.7.0
61
+ version: 0.8.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
- version: 0.7.0
68
+ version: 0.8.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: gpgme
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: FTPMVC filter to encrypt/decrypt files
@@ -87,9 +87,9 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - ".gitignore"
91
- - ".rspec"
92
- - ".travis.yml"
90
+ - .gitignore
91
+ - .rspec
92
+ - .travis.yml
93
93
  - Gemfile
94
94
  - Guardfile
95
95
  - LICENSE.txt
@@ -99,6 +99,7 @@ files:
99
99
  - lib/ftpmvc/filter/gpg.rb
100
100
  - lib/ftpmvc/gpg.rb
101
101
  - lib/ftpmvc/gpg/version.rb
102
+ - spec/fixtures/data.gpg
102
103
  - spec/integration/ftpmvc/filter/gpg_spec.rb
103
104
  - spec/lib/ftpmvc/filter/gpg_spec.rb
104
105
  - spec/spec_helper.rb
@@ -112,12 +113,12 @@ require_paths:
112
113
  - lib
113
114
  required_ruby_version: !ruby/object:Gem::Requirement
114
115
  requirements:
115
- - - ">="
116
+ - - '>='
116
117
  - !ruby/object:Gem::Version
117
118
  version: '0'
118
119
  required_rubygems_version: !ruby/object:Gem::Requirement
119
120
  requirements:
120
- - - ">="
121
+ - - '>='
121
122
  - !ruby/object:Gem::Version
122
123
  version: '0'
123
124
  requirements: []
@@ -127,6 +128,7 @@ signing_key:
127
128
  specification_version: 4
128
129
  summary: FTPMVC filter to encrypt/decrypt files
129
130
  test_files:
131
+ - spec/fixtures/data.gpg
130
132
  - spec/integration/ftpmvc/filter/gpg_spec.rb
131
133
  - spec/lib/ftpmvc/filter/gpg_spec.rb
132
134
  - spec/spec_helper.rb