encrypted_form_fields 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/encrypted_form_fields.gemspec +2 -2
- data/lib/encrypted_form_fields.rb +13 -0
- data/lib/encrypted_form_fields/dfs.rb +30 -0
- data/lib/encrypted_form_fields/encrypted_parameters.rb +2 -24
- data/lib/encrypted_form_fields/helpers/form_tag_helper.rb +1 -1
- data/lib/encrypted_form_fields/version.rb +1 -1
- data/test/encrypted_form_fields_test.rb +15 -0
- data/test/form_tag_helper_test.rb +6 -0
- data/test/test_helper.rb +0 -1
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f69c60e1d96d41b3309dc75dca2c159dfaddbe3
|
4
|
+
data.tar.gz: 5fd199062fd322787e7c0160df85237aa34a6ba9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3083de3950d099bff7df16714ce0cf73a2ce261d395a35b0ddb1a929aa8a8e2ae8495f2149c1319431c03bb3e62143841ac911bdf2f27640896aabb21fba73b7
|
7
|
+
data.tar.gz: 421e9369ee6cc02f7cbfe6650844c06610d0f65639fe5fb62305747a117ef4ac1c1e26defcb85f6c51ff181b6461b4ac10c2cc696bf0273ae9446bc8dae03c06
|
@@ -18,8 +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_runtime_dependency "actionpack", "~> 4.0
|
22
|
-
spec.add_runtime_dependency "activesupport", "~> 4.0
|
21
|
+
spec.add_runtime_dependency "actionpack", "~> 4.0"
|
22
|
+
spec.add_runtime_dependency "activesupport", "~> 4.0"
|
23
23
|
spec.add_development_dependency "rake"
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
25
|
spec.add_development_dependency "minitest"
|
@@ -3,6 +3,7 @@ require "action_view"
|
|
3
3
|
require "active_support/message_encryptor"
|
4
4
|
|
5
5
|
require "encrypted_form_fields/version"
|
6
|
+
require "encrypted_form_fields/dfs"
|
6
7
|
require "encrypted_form_fields/encrypted_parameters"
|
7
8
|
require "encrypted_form_fields/helpers/form_builder"
|
8
9
|
require 'encrypted_form_fields/railtie' if defined?(Rails)
|
@@ -35,6 +36,18 @@ module EncryptedFormFields
|
|
35
36
|
|
36
37
|
delegate :encrypt_and_sign, :decrypt_and_verify, to: :encryptor
|
37
38
|
|
39
|
+
# Decrypt encrypted parameters object
|
40
|
+
def decrypt_parameters(params)
|
41
|
+
Dfs.traverse(params || {}) do |value|
|
42
|
+
EncryptedFormFields.decrypt_and_verify(value)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Encrypt hash values
|
47
|
+
def encrypt_parameters(hash = {})
|
48
|
+
Dfs.traverse(hash, &method(:encrypt_and_sign))
|
49
|
+
end
|
50
|
+
|
38
51
|
private
|
39
52
|
|
40
53
|
def encryptor
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module EncryptedFormFields
|
2
|
+
module Dfs
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def traverse(value, &block)
|
6
|
+
if value.is_a?(Hash)
|
7
|
+
traverse_hash(value, &block)
|
8
|
+
elsif value.is_a?(Array)
|
9
|
+
traverse_array(value, &block)
|
10
|
+
else
|
11
|
+
yield value
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def traverse_hash(hash, &block)
|
18
|
+
hash.inject({}.with_indifferent_access) do |result, (key, value)|
|
19
|
+
result[key] = traverse(value, &block)
|
20
|
+
result
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def traverse_array(array, &block)
|
25
|
+
array.map do |value|
|
26
|
+
traverse(value, &block)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -2,30 +2,8 @@ module EncryptedFormFields
|
|
2
2
|
module EncryptedParameters
|
3
3
|
# Decrypt encrypted parameters
|
4
4
|
def encrypted_params
|
5
|
-
@encrypted_params ||=
|
6
|
-
|
7
|
-
|
8
|
-
private
|
9
|
-
|
10
|
-
def decrypt_array(array)
|
11
|
-
array.map(&method(:decrypt_value))
|
12
|
-
end
|
13
|
-
|
14
|
-
def decrypt_hash(hash)
|
15
|
-
hash.inject({}.with_indifferent_access) do |result, (key, value)|
|
16
|
-
result[key] = decrypt_value(value)
|
17
|
-
result
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def decrypt_value(value)
|
22
|
-
if value.is_a?(Hash)
|
23
|
-
decrypt_hash(value)
|
24
|
-
elsif value.is_a?(Array)
|
25
|
-
decrypt_array(value)
|
26
|
-
else
|
27
|
-
EncryptedFormFields.decrypt_and_verify(value)
|
28
|
-
end
|
5
|
+
@encrypted_params ||=
|
6
|
+
EncryptedFormFields.decrypt_parameters(params["_encrypted"] || {})
|
29
7
|
end
|
30
8
|
end
|
31
9
|
end
|
@@ -12,7 +12,7 @@ module EncryptedFormFields
|
|
12
12
|
# => <input id="email_verified_at" name="_encrypted_email_verified_at" type="hidden" value="[encrypted]" />
|
13
13
|
def encrypted_field_tag(name, value = nil, options = {})
|
14
14
|
encrypted_value = EncryptedFormFields.encrypt_and_sign(value)
|
15
|
-
prefixed_name = EncryptedFormFields.prefix_name(name)
|
15
|
+
prefixed_name = EncryptedFormFields.prefix_name(name.to_s)
|
16
16
|
tag :input, {
|
17
17
|
"type" => "hidden",
|
18
18
|
"name" => prefixed_name,
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class EncryptedFormFieldsTest < MiniTest::Unit::TestCase
|
4
|
+
def test_encrypting_parameters
|
5
|
+
hash = EncryptedFormFields.encrypt_parameters({"foo" => "bar"})
|
6
|
+
decrypted = EncryptedFormFields.decrypt_and_verify(hash["foo"])
|
7
|
+
assert_equal("bar", decrypted)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_decrypting_parameters
|
11
|
+
value = EncryptedFormFields.encrypt_and_sign("bar")
|
12
|
+
hash = EncryptedFormFields.decrypt_parameters({"foo" => {"0" => value}})
|
13
|
+
assert_equal("bar", hash["foo"]["0"])
|
14
|
+
end
|
15
|
+
end
|
@@ -12,4 +12,10 @@ class FormTagHelperTest < ActionView::TestCase
|
|
12
12
|
assert_equal "hidden", tag.attributes["type"]
|
13
13
|
assert_equal "field", tag.attributes["id"]
|
14
14
|
end
|
15
|
+
|
16
|
+
def test_symbol_form_field_name
|
17
|
+
tag = HTML::Document.new(encrypted_field_tag :field, "value").find(tag: "input")
|
18
|
+
decrypted_value = EncryptedFormFields.decrypt_and_verify(tag.attributes["value"])
|
19
|
+
assert_equal "_encrypted[field]", tag.attributes["name"]
|
20
|
+
end
|
15
21
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: encrypted_form_fields
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ville Lautanala
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.0
|
19
|
+
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.0
|
26
|
+
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 4.0
|
33
|
+
version: '4.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 4.0
|
40
|
+
version: '4.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- Rakefile
|
96
96
|
- encrypted_form_fields.gemspec
|
97
97
|
- lib/encrypted_form_fields.rb
|
98
|
+
- lib/encrypted_form_fields/dfs.rb
|
98
99
|
- lib/encrypted_form_fields/encrypted_parameters.rb
|
99
100
|
- lib/encrypted_form_fields/helpers/encrypted_field.rb
|
100
101
|
- lib/encrypted_form_fields/helpers/form_builder.rb
|
@@ -102,6 +103,7 @@ files:
|
|
102
103
|
- lib/encrypted_form_fields/helpers/form_tag_helper.rb
|
103
104
|
- lib/encrypted_form_fields/railtie.rb
|
104
105
|
- lib/encrypted_form_fields/version.rb
|
106
|
+
- test/encrypted_form_fields_test.rb
|
105
107
|
- test/encrypted_parameters_test.rb
|
106
108
|
- test/form_builder_test.rb
|
107
109
|
- test/form_tag_helper_test.rb
|
@@ -131,6 +133,7 @@ signing_key:
|
|
131
133
|
specification_version: 4
|
132
134
|
summary: Encrypted form fields for Rails
|
133
135
|
test_files:
|
136
|
+
- test/encrypted_form_fields_test.rb
|
134
137
|
- test/encrypted_parameters_test.rb
|
135
138
|
- test/form_builder_test.rb
|
136
139
|
- test/form_tag_helper_test.rb
|