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 CHANGED
@@ -1,4 +1,7 @@
1
1
  # CHANGELOG
2
+ ## 0.3.3
3
+ - Solved a mass-assignment issue thanks to Brett Levine
4
+
2
5
  ## 0.3.2
3
6
  - Upgrade big_spoon dependency to solve annoying generator bug.
4
7
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.3
1
+ 0.3.4
@@ -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}#{", '#{key.password}'" if key.password}) AS "value"]
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
@@ -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)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "pgcrypto"
8
- s.version = "0.3.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-21"
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/public.key"
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"]
@@ -1,6 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe PGCrypto do
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).count.should == 1
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
@@ -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
+ lQN5BFA089kRCACUMwRcvav4F5EV0VSdSgGNve97JEmNMpf17C/jhBXLjCHurg/i
5
+ +rG3IVkls0UJ3gBcZa0jTLw9p2MA6JSIudweV2OL12xBSiVDTJfisEH6cSvMLjUp
6
+ TETbV5lx1lnuPh1sQ3/hT9hO4vVMLBb/DKTGQqK15kuDoEwp/i/ReCcstkRZWWxV
7
+ jrJ9oX9x8cUU4Bds3HTBwWskn5f9TETMIMcwdij1wj/xGL24OoGC2qoOWZuSG+Gf
8
+ fIPzA6eymbTMNajOhbEM84KqQYJdx+JUhUjdfkoLq3cWjPZENzt3dwpRnjUaI/JY
9
+ E2wO068zByuP5xvobGP/IzhN632B0R49mmU/AQDFugt5L6mERuxXAwpuH1ff532p
10
+ wxcFAzvM6nK3IR19CQf+M54olw/iRvGGxP0E7kTGI8lF+8Ant/mc7eSbY0Tx328N
11
+ VgijIBdMCZtq8qh0Keyo/czNcDiZnaqo56wKvOcdasWOpu+mH+xCZ9Sm60lUxT+E
12
+ SW94fuAfB8n44W4iSSO98/qr5wG4yjXXv4CkOMStsdq5Gw6sMz7iM7LXDUmbXKjM
13
+ kuccSmX/DDaQg5upNF8FjsKa3Rdcj1XWVo9ymCVKfskR49OO8qCMYtq338CTQpLY
14
+ 0uK+Ee1aQ2r0PgiTYFye9Bj26jhvuoHSBPifzfy0Ot0LgeXqOQATG2bFg0UxHbaC
15
+ 6uI+HPgCD1Sn3u488TcgwC35j9Pgd2HM4isJF7X+CwgAkhTnvGSwroXsS+/L+lXJ
16
+ 6cronHTFi3vFTJAgYhxkwW7E9sA89SvwURXupj1VVjwcJblXUwytGsFkzvj7VC21
17
+ sg+GdkGTF0UwYmXBTbZaAo1ALL3Dk39v1WrAs75c6l7i7Rh739ITybXpf4OleErF
18
+ l+4ZCwydO8MlKu9TheEBksBE3jiUTV4+667BwczwdRyU5KQINU19LFgFaTcnaJk3
19
+ YjQKZVeoW886TtZCvJRZEg0S75Pc6aUncnZXL7sWcZPZt+2+k1ujLkNWLXN5u8Ay
20
+ +PMCtcJFo/xbZtyz+kqVIU+LecQeN46mXMhPb9f99a1Dm84wkU8z5GxI6IsjDR56
21
+ Kv4DAwIwCb01ALE6MWBBcR67+YzhaWwMsZCHmPZb4Ti9oGXZ7whxzzCSAEHOXmad
22
+ ROBo83H+KwRsx3TRugAPMz895KRGFqhMYTIBALQbRmxpcCBTYXNzZXIgPGZsaXBA
23
+ eDQ1MS5jb20+iHoEExEIACIFAlA089kCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4B
24
+ AheAAAoJEKOB+ElM1IbKwGQA/2dgzwKu0kzfI8Bz2/wckVQQ6DIXA0AIP5Ekdqje
25
+ YX2oAPsG3Ckap0WVMffYGkZoBgFl07hHjwX7sJE19v/mAQR5rp0CYwRQNPPZEAgA
26
+ 8uI6PUMoe7E8FD0nd7/hCvCzVaYpRFF6DGGJ7ZMHb3cmnEECjRoucLlgVd6dh4B2
27
+ 6WG68KcQaRXy1i9cQ8HZdbY4bOkKlCFRk4RtiARwM4oPsrUfGDGnVj5OgUMNqybW
28
+ vq7bg7+3y4FSjMoKQ+EsQeIoAC+kmsMT+oaRXXP4TUV20sjZ3dAtBaRGB+Gl1Chj
29
+ Hx7df6UL2xTQgOTcdjsASNDQLdc27geIQPGLwbZK6ojKCU4nz618Zb3Z08tkK/mZ
30
+ n5qLyIMID3Zi4hy98BMMfWi4mZ2wbRLTo38UDcl1EqKbCKNUOotQDOyd2EQaPlPM
31
+ +/OLevm1hJQHxeIF8Xgv4wADBQf+MK5pBLBNB9o//vIeOLxnA6bDRcxEZHpMLq8U
32
+ FH0O4VAt7naeBdBKT8kAfiwAZroikMQsGTr1eY2hMZsfQ3cOGqZgW1tBnaiPIofj
33
+ cntOx2Zs/G8wQebdINPRjKyQQ3IqpUWpCds7b2Wg4dSpySEFSIa40MlpUREpzZAP
34
+ 8VmfCAXO2VCtEMtQkDlzd3ieb5bNTzrb6Bcvg2bpP7uemgg9MnMXjZ+bzlwsfFNK
35
+ Ug6eRYrR7RMvDL/2n7EHRO7R+twkMTVg/mORQa46joaRFg3xmUjOLILCsHSOrFUD
36
+ e5bUr46XTkzi0BjKQi5MfmvDA9xuOwM093yKAmO4Y9B6Toh7n/4DAwIwCb01ALE6
37
+ MWBPEAIGaGRaotx1cV6A/86DX4BcY6o1IiqkuYHwZpf0fIIFx2/5pPaIKjnTkNMh
38
+ NycuT5turNvT2Tq1O2lIA7Fj1HpqYHTv/8+QiGEEGBEIAAkFAlA089kCGwwACgkQ
39
+ o4H4SUzUhsrM0wD6AtwrjECMDaZ4HpP6kd/B2SVlosKp6h7tAXgIcvpZw7UBAIg1
40
+ yWPio8RK5wB+oEJ46eaCMnmMciWnX19c/mjxzpOu
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.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-21 00:00:00.000000000 Z
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:
@@ -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