pgcrypto 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.md +3 -0
- data/VERSION +1 -1
- data/lib/pgcrypto.rb +1 -1
- data/lib/pgcrypto/active_record.rb +1 -1
- data/lib/pgcrypto/key.rb +8 -0
- data/pgcrypto.gemspec +5 -4
- data/spec/lib/pgcrypto_spec.rb +29 -5
- data/spec/spec_helper.rb +0 -2
- data/spec/support/private.password.key +42 -0
- data/spec/support/public.password.key +39 -0
- metadata +4 -6
- data/autotest/discover.rb +0 -14
data/CHANGES.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.4
|
data/lib/pgcrypto.rb
CHANGED
@@ -93,7 +93,7 @@ module PGCrypto
|
|
93
93
|
if key = PGCrypto.keys[:private]
|
94
94
|
pgcrypto_column_finder = pgcrypto_column_finder.select([
|
95
95
|
%w(id owner_id owner_type owner_table).map {|column| %("#{PGCrypto::Column.table_name}"."#{column}")},
|
96
|
-
%[pgp_pub_decrypt("#{PGCrypto::Column.table_name}"."value", pgcrypto_keys.#{key.name}#{
|
96
|
+
%[pgp_pub_decrypt("#{PGCrypto::Column.table_name}"."value", pgcrypto_keys.#{key.name}#{key.password?}) AS "value"]
|
97
97
|
].flatten).joins(%[CROSS JOIN (SELECT #{key.dearmored} AS "#{key.name}") AS pgcrypto_keys])
|
98
98
|
end
|
99
99
|
pgcrypto_column_finder.where(:name => column_name).first
|
@@ -54,7 +54,7 @@ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
|
|
54
54
|
next unless encrypted_columns[child.left.name.to_s]
|
55
55
|
joins.push(child.left.name.to_s) unless joins.include?(child.left.name.to_s)
|
56
56
|
child.left = Arel::Nodes::SqlLiteral.new(%[
|
57
|
-
pgp_pub_decrypt("#{PGCrypto::Column.table_name}_#{child.left.name}"."value", pgcrypto_keys.#{key.name})
|
57
|
+
pgp_pub_decrypt("#{PGCrypto::Column.table_name}_#{child.left.name}"."value", pgcrypto_keys.#{key.name}#{key.password?})
|
58
58
|
])
|
59
59
|
end if where.respond_to?(:children)
|
60
60
|
end
|
data/lib/pgcrypto/key.rb
CHANGED
@@ -22,6 +22,10 @@ module PGCrypto
|
|
22
22
|
"#{'dearmor(' if armored?}'#{self}'#{')' if armored?}"
|
23
23
|
end
|
24
24
|
|
25
|
+
def encrypt(value)
|
26
|
+
%[pgp_pub_encrypt('#{value}', #{dearmored})]
|
27
|
+
end
|
28
|
+
|
25
29
|
def initialize(options = {})
|
26
30
|
if options.is_a?(String)
|
27
31
|
self.value = options
|
@@ -32,6 +36,10 @@ module PGCrypto
|
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
39
|
+
def password?
|
40
|
+
", '#{password}'" if password
|
41
|
+
end
|
42
|
+
|
35
43
|
def path=(keyfile)
|
36
44
|
keyfile = File.expand_path(keyfile)
|
37
45
|
raise PGCrypto::Error, "#{keyfile} does not exist!" unless File.file?(keyfile)
|
data/pgcrypto.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "pgcrypto"
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Flip Sasser"]
|
12
|
-
s.date = "2012-08-
|
12
|
+
s.date = "2012-08-22"
|
13
13
|
s.description = "\n PGCrypto is an ActiveRecord::Base extension that allows you to asymmetrically\n encrypt PostgreSQL columns with as little trouble as possible. It's totally\n freaking rad.\n "
|
14
14
|
s.email = "flip@x451.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -26,7 +26,6 @@ Gem::Specification.new do |s|
|
|
26
26
|
"README.markdown",
|
27
27
|
"Rakefile",
|
28
28
|
"VERSION",
|
29
|
-
"autotest/discover.rb",
|
30
29
|
"lib/generators/pgcrypto/install/USAGE",
|
31
30
|
"lib/generators/pgcrypto/install/install_generator.rb",
|
32
31
|
"lib/generators/pgcrypto/install/templates/initializer.rb",
|
@@ -41,7 +40,9 @@ Gem::Specification.new do |s|
|
|
41
40
|
"spec/lib/pgcrypto_spec.rb",
|
42
41
|
"spec/spec_helper.rb",
|
43
42
|
"spec/support/private.key",
|
44
|
-
"spec/support/
|
43
|
+
"spec/support/private.password.key",
|
44
|
+
"spec/support/public.key",
|
45
|
+
"spec/support/public.password.key"
|
45
46
|
]
|
46
47
|
s.homepage = "http://github.com/Plinq/pgcrypto"
|
47
48
|
s.require_paths = ["lib"]
|
data/spec/lib/pgcrypto_spec.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
3
|
+
# require 'logger'
|
4
|
+
# ActiveRecord::Base.logger = Logger.new(STDOUT)
|
5
|
+
|
6
|
+
specs = proc do
|
4
7
|
it "should extend ActiveRecord::Base" do
|
5
8
|
PGCryptoTestModel.should respond_to(:pgcrypto)
|
6
9
|
end
|
@@ -37,7 +40,7 @@ describe PGCrypto do
|
|
37
40
|
model = PGCryptoTestModel.create!(:test_column => 'i should return to you')
|
38
41
|
PGCryptoTestModel.find(model.id).test_column.should == 'i should return to you'
|
39
42
|
end
|
40
|
-
|
43
|
+
|
41
44
|
it "should be retrievable at update" do
|
42
45
|
model = PGCryptoTestModel.create!(:test_column => 'i will update')
|
43
46
|
model.test_column.should == 'i will update'
|
@@ -52,9 +55,9 @@ describe PGCrypto do
|
|
52
55
|
model.test_column.should == 'i updated'
|
53
56
|
end
|
54
57
|
|
55
|
-
it "be searchable" do
|
58
|
+
it "should be searchable" do
|
56
59
|
model = PGCryptoTestModel.create!(:test_column => 'i am findable!')
|
57
|
-
PGCryptoTestModel.where(:test_column => model.test_column).
|
60
|
+
PGCryptoTestModel.where(:test_column => model.test_column).should == [model]
|
58
61
|
end
|
59
62
|
|
60
63
|
it "should track changes" do
|
@@ -92,10 +95,31 @@ describe PGCrypto do
|
|
92
95
|
model.select_pgcrypto_column(:test_column).should be_nil
|
93
96
|
end
|
94
97
|
|
95
|
-
it "plz work" do
|
98
|
+
it "should plz work" do
|
96
99
|
model = PGCryptoTestModel.find(PGCryptoTestModel.create!(:test_column => 'one'))
|
97
100
|
model.test_column = 'two'
|
98
101
|
model.save!
|
99
102
|
model.select_pgcrypto_column(:test_column).value.should == 'two'
|
100
103
|
end
|
101
104
|
end
|
105
|
+
|
106
|
+
keypath = File.expand_path(File.join(File.dirname(__FILE__), '..', 'support'))
|
107
|
+
describe PGCrypto do
|
108
|
+
describe "without password-protected keys" do
|
109
|
+
before :all do
|
110
|
+
PGCrypto.keys[:private] = {:path => File.join(keypath, 'private.key')}
|
111
|
+
PGCrypto.keys[:public] = {:path => File.join(keypath, 'public.key')}
|
112
|
+
end
|
113
|
+
|
114
|
+
# instance_eval(&specs)
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "with password-protected keys" do
|
118
|
+
before :each do
|
119
|
+
PGCrypto.keys[:private] = {:path => File.join(keypath, 'private.password.key'), :password => 'password'}
|
120
|
+
PGCrypto.keys[:public] = {:path => File.join(keypath, 'public.password.key'), :password => 'password'}
|
121
|
+
end
|
122
|
+
|
123
|
+
instance_eval(&specs)
|
124
|
+
end
|
125
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,8 +11,6 @@ require 'simplecov'
|
|
11
11
|
|
12
12
|
# Requier and configure PGCrypto
|
13
13
|
require 'pgcrypto'
|
14
|
-
PGCrypto.keys[:private] = {:path => File.join(File.dirname(__FILE__), 'support', 'private.key')}
|
15
|
-
PGCrypto.keys[:public] = {:path => File.join(File.dirname(__FILE__), 'support', 'public.key')}
|
16
14
|
|
17
15
|
RSpec.configure do |config|
|
18
16
|
database_config = {:adapter => 'postgresql', :database => 'pgcrypto_test', :encoding => 'utf8', :host => 'localhost'}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
-----BEGIN PGP PRIVATE KEY BLOCK-----
|
2
|
+
Version: GnuPG v1.4.12 (Darwin)
|
3
|
+
|
4
|
+
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
|
41
|
+
=+qjx
|
42
|
+
-----END PGP PRIVATE KEY BLOCK-----
|
@@ -0,0 +1,39 @@
|
|
1
|
+
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
2
|
+
Version: GnuPG v1.4.12 (Darwin)
|
3
|
+
|
4
|
+
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
|
37
|
+
LYrUQ/uHaSPVpl6O5g==
|
38
|
+
=XIMO
|
39
|
+
-----END PGP PUBLIC KEY BLOCK-----
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pgcrypto
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -78,7 +78,6 @@ files:
|
|
78
78
|
- README.markdown
|
79
79
|
- Rakefile
|
80
80
|
- VERSION
|
81
|
-
- autotest/discover.rb
|
82
81
|
- lib/generators/pgcrypto/install/USAGE
|
83
82
|
- lib/generators/pgcrypto/install/install_generator.rb
|
84
83
|
- lib/generators/pgcrypto/install/templates/initializer.rb
|
@@ -93,7 +92,9 @@ files:
|
|
93
92
|
- spec/lib/pgcrypto_spec.rb
|
94
93
|
- spec/spec_helper.rb
|
95
94
|
- spec/support/private.key
|
95
|
+
- spec/support/private.password.key
|
96
96
|
- spec/support/public.key
|
97
|
+
- spec/support/public.password.key
|
97
98
|
homepage: http://github.com/Plinq/pgcrypto
|
98
99
|
licenses: []
|
99
100
|
post_install_message:
|
@@ -106,9 +107,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
106
107
|
- - ! '>='
|
107
108
|
- !ruby/object:Gem::Version
|
108
109
|
version: '0'
|
109
|
-
segments:
|
110
|
-
- 0
|
111
|
-
hash: 1863524219335446530
|
112
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
111
|
none: false
|
114
112
|
requirements:
|
data/autotest/discover.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'autotest/fsevent'
|
2
|
-
require 'autotest/growl'
|
3
|
-
|
4
|
-
Autotest.add_discovery { "rspec2" }
|
5
|
-
|
6
|
-
Autotest.add_hook :initialize do |autotest|
|
7
|
-
autotest.add_mapping %r(^lib/**/*\.rb$) do |file, _|
|
8
|
-
Dir['spec/**/*.rb']
|
9
|
-
end
|
10
|
-
|
11
|
-
autotest.add_mapping %r(^spec/support/*\.rb$) do |file, _|
|
12
|
-
Dir['spec/**/*.rb']
|
13
|
-
end
|
14
|
-
end
|