attr_encryptor 1.0.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.
@@ -0,0 +1,52 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ DataMapper.setup(:default, 'sqlite3::memory:')
4
+
5
+ class Client
6
+ include DataMapper::Resource
7
+
8
+ property :id, Serial
9
+ property :encrypted_email, String
10
+ property :encrypted_credentials, Text
11
+ property :salt, String
12
+
13
+ attr_encrypted :email, :key => 'a secret key'
14
+ attr_encrypted :credentials, :key => Proc.new { |client| Encryptor.encrypt(:value => client.salt, :key => 'some private key') }, :marshal => true
15
+
16
+ def initialize(attrs = {})
17
+ super attrs
18
+ self.salt ||= Digest::SHA1.hexdigest((Time.now.to_i * rand(5)).to_s)
19
+ self.credentials ||= { :username => 'example', :password => 'test' }
20
+ end
21
+ end
22
+
23
+ DataMapper.auto_migrate!
24
+
25
+ class DataMapperTest < Test::Unit::TestCase
26
+
27
+ def setup
28
+ Client.all.each(&:destroy)
29
+ end
30
+
31
+ def test_should_encrypt_email
32
+ @client = Client.new :email => 'test@example.com'
33
+ assert @client.save
34
+ assert_not_nil @client.encrypted_email
35
+ assert_not_equal @client.email, @client.encrypted_email
36
+ assert_equal @client.email, Client.first.email
37
+ end
38
+
39
+ def test_should_marshal_and_encrypt_credentials
40
+ @client = Client.new
41
+ assert @client.save
42
+ assert_not_nil @client.encrypted_credentials
43
+ assert_not_equal @client.credentials, @client.encrypted_credentials
44
+ assert_equal @client.credentials, Client.first.credentials
45
+ assert Client.first.credentials.is_a?(Hash)
46
+ end
47
+
48
+ def test_should_encode_by_default
49
+ assert Client.attr_encrypted_options[:encode]
50
+ end
51
+
52
+ end
@@ -0,0 +1,41 @@
1
+ require 'digest/sha2'
2
+ require 'rubygems'
3
+ gem 'activerecord', ENV['ACTIVE_RECORD_VERSION'] if ENV['ACTIVE_RECORD_VERSION']
4
+ require 'active_record'
5
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $:.unshift(File.dirname(__FILE__))
7
+ require 'attr_encrypted'
8
+
9
+ ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
10
+
11
+ def create_tables
12
+ silence_stream(STDOUT) do
13
+ ActiveRecord::Schema.define(:version => 1) do
14
+ create_table :accounts do |t|
15
+ t.string :encrypted_password
16
+ t.string :encrypted_password_iv
17
+ t.string :encrypted_password_salt
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ # The table needs to exist before defining the class
24
+ create_tables
25
+ require 'ruby-debug'
26
+ require 'pry'
27
+ class Account < ActiveRecord::Base
28
+ attr_accessor :key
29
+ attr_encrypted :password, :key => Proc.new {|account| binding.pry}
30
+ end
31
+
32
+ def setup
33
+ ActiveRecord::Base.connection.tables.each { |table| ActiveRecord::Base.connection.drop_table(table) }
34
+ create_tables
35
+ end
36
+ setup
37
+ require 'ruby-debug'
38
+ binding.pry
39
+
40
+ Account.create!(:password => "password" , :key => "secret")
41
+
@@ -0,0 +1,50 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ DB = Sequel.sqlite
4
+
5
+ DB.create_table :humans do
6
+ primary_key :id
7
+ column :encrypted_email, :string
8
+ column :password, :string
9
+ column :encrypted_credentials, :string
10
+ column :salt, :string
11
+ end
12
+
13
+ class Human < Sequel::Model(:humans)
14
+ attr_encrypted :email, :key => 'a secret key'
15
+ attr_encrypted :credentials, :key => Proc.new { |human| Encryptor.encrypt(:value => human.salt, :key => 'some private key') }, :marshal => true
16
+
17
+ def after_initialize(attrs = {})
18
+ self.salt ||= Digest::SHA1.hexdigest((Time.now.to_i * rand(5)).to_s)
19
+ self.credentials ||= { :username => 'example', :password => 'test' }
20
+ end
21
+ end
22
+
23
+ class SequelTest < Test::Unit::TestCase
24
+
25
+ def setup
26
+ Human.all.each(&:destroy)
27
+ end
28
+
29
+ def test_should_encrypt_email
30
+ @human = Human.new :email => 'test@example.com'
31
+ assert @human.save
32
+ assert_not_nil @human.encrypted_email
33
+ assert_not_equal @human.email, @human.encrypted_email
34
+ assert_equal @human.email, Human.first.email
35
+ end
36
+
37
+ def test_should_marshal_and_encrypt_credentials
38
+ @human = Human.new
39
+ assert @human.save
40
+ assert_not_nil @human.encrypted_credentials
41
+ assert_not_equal @human.credentials, @human.encrypted_credentials
42
+ assert_equal @human.credentials, Human.first.credentials
43
+ assert Human.first.credentials.is_a?(Hash)
44
+ end
45
+
46
+ def test_should_encode_by_default
47
+ assert Human.attr_encrypted_options[:encode]
48
+ end
49
+
50
+ end
@@ -0,0 +1,14 @@
1
+ require 'test/unit'
2
+ require 'digest/sha2'
3
+ require 'rubygems'
4
+ gem 'activerecord', ENV['ACTIVE_RECORD_VERSION'] if ENV['ACTIVE_RECORD_VERSION']
5
+ require 'active_record'
6
+ require 'data_mapper'
7
+ require 'sequel'
8
+ require 'mocha'
9
+
10
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
11
+ $:.unshift(File.dirname(__FILE__))
12
+ require 'attr_encryptor'
13
+
14
+ puts "\nTesting with ActiveRecord #{ActiveRecord::VERSION::STRING rescue ENV['ACTIVE_RECORD_VERSION']}"
metadata ADDED
@@ -0,0 +1,149 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: attr_encryptor
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Daniel Palacio
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-16 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: encryptor2
16
+ requirement: &70172209395920 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.1.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70172209395920
25
+ - !ruby/object:Gem::Dependency
26
+ name: activerecord
27
+ requirement: &70172209395400 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 2.0.0
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70172209395400
36
+ - !ruby/object:Gem::Dependency
37
+ name: datamapper
38
+ requirement: &70172209395020 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70172209395020
47
+ - !ruby/object:Gem::Dependency
48
+ name: mocha
49
+ requirement: &70172203559020 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70172203559020
58
+ - !ruby/object:Gem::Dependency
59
+ name: sequel
60
+ requirement: &70172203558600 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70172203558600
69
+ - !ruby/object:Gem::Dependency
70
+ name: dm-sqlite-adapter
71
+ requirement: &70172203558180 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70172203558180
80
+ - !ruby/object:Gem::Dependency
81
+ name: sqlite3
82
+ requirement: &70172203557760 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70172203557760
91
+ description: Generates attr_accessors that encrypt and decrypt attributes transparently
92
+ email: danpal@gmail.com
93
+ executables: []
94
+ extensions: []
95
+ extra_rdoc_files: []
96
+ files:
97
+ - .gitignore
98
+ - .rvmrc
99
+ - MIT-LICENSE
100
+ - README.md
101
+ - Rakefile
102
+ - attr_encryptor.gemspec
103
+ - lib/attr_encryptor.rb
104
+ - lib/attr_encryptor/adapters/active_record.rb
105
+ - lib/attr_encryptor/adapters/data_mapper.rb
106
+ - lib/attr_encryptor/adapters/sequel.rb
107
+ - lib/attr_encryptor/version.rb
108
+ - test/active_record_test.rb
109
+ - test/attr_encrypted_test.rb
110
+ - test/data_mapper_test.rb
111
+ - test/debug_order.rb
112
+ - test/sequel_test.rb
113
+ - test/test_helper.rb
114
+ homepage: http://github.com/danpal/attr_encrypted
115
+ licenses: []
116
+ post_install_message:
117
+ rdoc_options:
118
+ - --line-numbers
119
+ - --inline-source
120
+ - --main
121
+ - README.rdoc
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 1.8.6
139
+ signing_key:
140
+ specification_version: 3
141
+ summary: Encrypt and decrypt attributes
142
+ test_files:
143
+ - test/active_record_test.rb
144
+ - test/attr_encrypted_test.rb
145
+ - test/data_mapper_test.rb
146
+ - test/debug_order.rb
147
+ - test/sequel_test.rb
148
+ - test/test_helper.rb
149
+ has_rdoc: false