ftpmvc-gpg 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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