attr_secure 0.0.2 → 0.0.3

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: 02085a6f851168ff8987fc2a80c883410a50f77b
4
- data.tar.gz: 7b89f0a4cb405aba7db25e13928d595cbc11ac3c
3
+ metadata.gz: 6587948291c3a27b3b2d8b6d4510668b5fe2d7b0
4
+ data.tar.gz: 63313a924a9b32dffdc259ee965a45e4dfc20db3
5
5
  SHA512:
6
- metadata.gz: a3b0bd5b42782f0d5f30d0c134853217b4b565e6f944106c341cd7a827920b433f4016c748bf6abc15cab3c81bfdb00562fc9636fe00abe1c5f851533c810f7a
7
- data.tar.gz: 8051093176e391da5b56452e8d4a93170875017eb3b87ed83bf8dfdd7f633a62beda70106c012d87b0a1d056614f97d84f2127b171a8bf7b437d4219df99d015
6
+ metadata.gz: ca1c7c4d1868b2d980c47dbab3cda9ec2fc9ec71101bcd591aa2f241f96acfe6fc9a95382cb120a8c0def0b8f2faa38095443fa3e3ca541f54fd557a9bd59fee
7
+ data.tar.gz: 5a39de22e1ec572862abf2c4d78e70b26c372a553b36c63c760e168c007daea6636dba1a2ffabe48f0f01a8c9f69d4f61e98b085d4085f3a9ff9834d481053f4
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - jruby-19mode
6
+
7
+ matrix:
8
+ allow_failures:
9
+ - rvm: jruby-19mode
10
+
11
+ script: rspec spec
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # attr_secure
2
2
 
3
+ [![Build Status](https://travis-ci.org/neilmiddleton/attr_secure.png?branch=master)](https://travis-ci.org/neilmiddleton/attr_secure)
4
+
3
5
  Securely stores ActiveRecord attributes for a given model/attribute and a predefined secret.
4
6
 
5
7
  ```
data/Rakefile CHANGED
@@ -1 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs.push "lib"
6
+ t.test_files = FileList['test/*_test.rb']
7
+ t.verbose = true
8
+ end
data/attr_secure.gemspec CHANGED
@@ -18,9 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
21
+ spec.add_development_dependency "rspec"
23
22
 
24
23
  spec.add_dependency 'fernet'
25
- spec.add_dependency 'activesupport', ' ~> 3.2.0'
24
+ spec.add_dependency 'activerecord', ' ~> 3.2.0'
26
25
  end
@@ -0,0 +1,25 @@
1
+ module AttrSecure
2
+ class Secure
3
+
4
+ def encrypt(value)
5
+ Fernet.generate(attr_secure_secret) do |generator|
6
+ generator.data = { value: value }
7
+ end
8
+ end
9
+
10
+ def decrypt(value)
11
+ return nil if value.nil?
12
+ verifier = Fernet.verifier(attr_secure_secret, value)
13
+ verifier.data["value"] if verifier.valid?
14
+ end
15
+
16
+ private
17
+ def env!(key)
18
+ ENV.fetch(key) { raise("Missing ENV(#{key})") }
19
+ end
20
+
21
+ def attr_secure_secret
22
+ env!('ATTR_SECURE_SECRET')
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module AttrSecure
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/attr_secure.rb CHANGED
@@ -1,42 +1,24 @@
1
1
  require "attr_secure/version"
2
2
  require 'fernet'
3
+ require 'active_record'
4
+
5
+ require 'attr_secure/secure'
3
6
 
4
7
  Fernet::Configuration.run do |config|
5
8
  config.enforce_ttl = false
6
9
  end
7
10
 
8
11
  module AttrSecure
9
- extend ActiveSupport::Concern
10
-
11
- def env!(key)
12
- ENV[key] || raise("Missing ENV(#{key})")
13
- end
14
12
 
15
- def encrypt(value)
16
- Fernet.generate(env!('ATTR_SECURE_SECRET')) do |generator|
17
- generator.data = { value: value }
13
+ def attr_secure(attribute)
14
+ define_method("#{attribute}=") do |value|
15
+ write_attribute(attribute, Secure.new.encrypt(value.nil? ? nil : value.to_sym))
18
16
  end
19
- end
20
17
 
21
- def decrypt(value)
22
- return nil if value.nil?
23
- verifier = Fernet.verifier(env!('ATTR_SECURE_SECRET'), value)
24
- verifier.data["value"] if verifier.valid?
25
- end
26
-
27
- module ClassMethods
28
-
29
- def attr_secure(attribute)
30
- define_method("#{attribute}=") do |value|
31
- write_attribute(attribute, encrypt(value.nil? ? nil : value.to_sym))
32
- end
33
-
34
- define_method("#{attribute}") do
35
- decrypt read_attribute(attribute.to_sym)
36
- end
18
+ define_method("#{attribute}") do
19
+ Secure.new.decrypt read_attribute(attribute.to_sym)
37
20
  end
38
-
39
21
  end
40
22
  end
41
23
 
42
- ActiveRecord::Base.send(:include, AttrSecure)
24
+ ActiveRecord::Base.send(:extend, AttrSecure)
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ class FakeModelWithSecureAttributes
4
+ extend AttrSecure
5
+ attr_accessor :attributes
6
+
7
+ attr_secure :foo
8
+
9
+ def initialize(attributes={})
10
+ @attributes = attributes
11
+ end
12
+
13
+ def read_attribute(attr_name)
14
+ attributes[attr_name]
15
+ end
16
+
17
+ def write_attribute(attr_name, value)
18
+ attributes[attr_name] = value
19
+ end
20
+ end
21
+
22
+
23
+ ENV['ATTR_SECURE_SECRET'] = 'xxx'
24
+
25
+ describe AttrSecure do
26
+ subject { FakeModelWithSecureAttributes.new }
27
+
28
+ it 'encrypts' do
29
+ encrypter = lambda { |secret|
30
+ assert_equal 'xxx', secret
31
+ 'world'
32
+ }
33
+
34
+ Fernet.stub :generate, encrypter do |f|
35
+ subject.foo = 'hello'
36
+ expect(subject.attributes[:foo]).to eq('world')
37
+ end
38
+ end
39
+
40
+ it 'decrypts' do
41
+ decrypter_mock = double(Object)
42
+ decrypter_mock.stub(:valid?) { true }
43
+ decrypter_mock.stub(:data) { {'value' => 'world'} }
44
+
45
+ Fernet.stub(:generate, 'world') do
46
+ Fernet.stub(:verifier, decrypter_mock) do
47
+ subject.foo = 'hello'
48
+ expect(subject.foo).to eq('world')
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,13 @@
1
+ require 'attr_secure'
2
+
3
+ RSpec.configure do |config|
4
+ config.treat_symbols_as_metadata_keys_with_true_values = true
5
+ config.run_all_when_everything_filtered = true
6
+ config.filter_run :focus
7
+
8
+ config.order = 'random'
9
+
10
+ config.expect_with :rspec do |c|
11
+ c.syntax = :expect
12
+ end
13
+ end
metadata CHANGED
@@ -1,31 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attr_secure
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neil Middleton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-30 00:00:00.000000000 Z
11
+ date: 2013-05-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ~>
25
- - !ruby/object:Gem::Version
26
- version: '1.3'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
14
+ name: rspec
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - '>='
@@ -53,7 +39,7 @@ dependencies:
53
39
  - !ruby/object:Gem::Version
54
40
  version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
- name: activesupport
42
+ name: activerecord
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - ~>
@@ -74,13 +60,17 @@ extensions: []
74
60
  extra_rdoc_files: []
75
61
  files:
76
62
  - .gitignore
63
+ - .travis.yml
77
64
  - Gemfile
78
65
  - LICENSE.txt
79
66
  - README.md
80
67
  - Rakefile
81
68
  - attr_secure.gemspec
82
69
  - lib/attr_secure.rb
70
+ - lib/attr_secure/secure.rb
83
71
  - lib/attr_secure/version.rb
72
+ - spec/attr_secure_spec.rb
73
+ - spec/spec_helper.rb
84
74
  homepage: http://www.neilmiddleton.com
85
75
  licenses:
86
76
  - MIT
@@ -101,8 +91,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
91
  version: '0'
102
92
  requirements: []
103
93
  rubyforge_project:
104
- rubygems_version: 2.0.0
94
+ rubygems_version: 2.0.2
105
95
  signing_key:
106
96
  specification_version: 4
107
97
  summary: Securely stores activerecord model attributes
108
- test_files: []
98
+ test_files:
99
+ - spec/attr_secure_spec.rb
100
+ - spec/spec_helper.rb