acts_as_securely_transferable 0.0.1

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,30 @@
1
+ var ActsAsSecurelyTransferable = {
2
+ encryptForm: function(form) {
3
+ // find model name
4
+ var model;
5
+ $('input', form).each(function(i,e) {
6
+ var m = $(e).attr('name').match(/^(.+)\[public_modulus\]$/);
7
+ if (m) model = m[1];
8
+ });
9
+
10
+ if (model == undefined) {
11
+ alert("encryptForm(): Couldn't find model");
12
+ return false;
13
+ }
14
+
15
+ var rsa = new RSAKey();
16
+ rsa.setPublic($('#'+model+'_public_modulus').val(), $('#'+model+'_public_exponent').val());
17
+
18
+ $('input', form).each(function(i,elem) {
19
+ if (elem.id) {
20
+ var m = elem.id.match(/^(.+)_encrypted$/);
21
+ if (m) {
22
+ $(elem).val(hex2b64(rsa.encrypt($('#'+m[1]).val())));
23
+ $('#'+m[1]).val('');
24
+ }
25
+ }
26
+ });
27
+
28
+ return true;
29
+ }
30
+ }
@@ -0,0 +1,14 @@
1
+ require 'acts_as_securely_transferable/acts_as_securely_transferable'
2
+ require 'acts_as_securely_transferable/form_helper'
3
+
4
+ module ActsAsSecurelyTransferable
5
+ def self.configuration
6
+ @configuration ||= Configuration.new
7
+ end
8
+
9
+ def self.configure
10
+ yield(configuration)
11
+ end
12
+ end
13
+
14
+ ActiveRecord::Base.send :include, ActsAsSecurelyTransferable::ActsAsSecurelyTransferable
@@ -0,0 +1,43 @@
1
+ module ActsAsSecurelyTransferable
2
+ module ActsAsSecurelyTransferable
3
+ def self.included(base)
4
+ base.send :extend, ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+ def acts_as_securely_transferable(*fields)
9
+ cattr_accessor :secure_fields
10
+ self.secure_fields = fields.is_a?(Array) ? fields : [ fields ]
11
+
12
+ for field in self.secure_fields
13
+ define_method "#{field}_encrypted" do
14
+ nil
15
+ end
16
+ define_method "#{field}_encrypted=" do |value|
17
+ send "#{field}=", ::ActsAsSecurelyTransferable.configuration.rsa_key.private_decrypt(Base64.decode64(value))
18
+ end
19
+ end
20
+
21
+ send :include, InstanceMethods
22
+ end
23
+ end
24
+
25
+ module InstanceMethods
26
+ def public_exponent
27
+ ::ActsAsSecurelyTransferable.configuration.rsa_key.public_key.e.to_s(16)
28
+ end
29
+
30
+ def public_exponent=(value)
31
+ errors.add_to_base "public exponent has changed" if value != public_exponent
32
+ end
33
+
34
+ def public_modulus
35
+ ::ActsAsSecurelyTransferable.configuration.rsa_key.public_key.n.to_s(16)
36
+ end
37
+
38
+ def public_modulus=(value)
39
+ errors.add_to_base "public modulus has changed" if value != public_modulus
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,11 @@
1
+ require 'openssl'
2
+
3
+ module ActsAsSecurelyTransferable
4
+ class Configuration
5
+ attr_accessor :rsa_key
6
+
7
+ def rsa_key=(pem)
8
+ @rsa_key = OpenSSL::PKey::RSA.new(pem)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ module ActsAsSecurelyTransferable
2
+ module FormHelper
3
+ def securely_transferable_form_for(*args, &block)
4
+ options = args.last.is_a?(Hash) ? args.pop : { }
5
+ options = options.merge({ :html => { :onsubmit => 'return ActsAsSecurelyTransferable.encryptForm(this);' } })
6
+ form_for args, options do |f|
7
+ concat f.hidden_field(:public_modulus)
8
+ concat f.hidden_field(:public_exponent)
9
+ for field in f.object_name.camelize.constantize.secure_fields
10
+ concat f.hidden_field("#{field}_encrypted")
11
+ end
12
+ block.call(f)
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ ActionView::Base.send :include, ActsAsSecurelyTransferable::FormHelper
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acts_as_securely_transferable
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Richard Hirner
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-08-11 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rails
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 7
30
+ segments:
31
+ - 3
32
+ - 0
33
+ - 0
34
+ version: 3.0.0
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ description:
38
+ email: hirner@bitfire.at
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files: []
44
+
45
+ files:
46
+ - lib/acts_as_securely_transferable.rb
47
+ - lib/acts_as_securely_transferable/configuration.rb
48
+ - lib/acts_as_securely_transferable/acts_as_securely_transferable.rb
49
+ - lib/acts_as_securely_transferable/form_helper.rb
50
+ - js/acts_as_securely_transferable.js
51
+ has_rdoc: true
52
+ homepage:
53
+ licenses: []
54
+
55
+ post_install_message:
56
+ rdoc_options: []
57
+
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ hash: 3
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ hash: 3
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ requirements: []
79
+
80
+ rubyforge_project:
81
+ rubygems_version: 1.3.7
82
+ signing_key:
83
+ specification_version: 3
84
+ summary: On-the-fly RSA encryption for secure transmission of forms/resources over non-secure connection
85
+ test_files: []
86
+