active_merchant_ideal_multicert 0.1.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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/LICENSE +19 -0
- data/README.md +32 -0
- data/Rakefile +2 -0
- data/active_merchant_ideal_multicert.gemspec +21 -0
- data/lib/active_merchant_ideal_multicert.rb +51 -0
- data/lib/active_merchant_ideal_multicert/version.rb +3 -0
- metadata +72 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (C) 2011 by Voormedia B.V.
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# ActiveMerchant iDEAL multi-certificate patch
|
2
|
+
|
3
|
+
The iDEAL certificates sometimes expire. To support both old and new certificates for a transition period, include this gem.
|
4
|
+
|
5
|
+
## Example usage
|
6
|
+
|
7
|
+
In your Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem "activemerchant"
|
11
|
+
gem "active_merchant_ideal"
|
12
|
+
gem "active_merchant_ideal_multicert"
|
13
|
+
```
|
14
|
+
|
15
|
+
(Order does matter)
|
16
|
+
|
17
|
+
In your ActiveMerchant initializer, configure multiple certificates like this:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
ActiveMerchant::Billing::IdealGateway.ideal_certificate_files = [
|
21
|
+
"/path/to/certificate1",
|
22
|
+
"/path/to/certificate2"
|
23
|
+
]
|
24
|
+
```
|
25
|
+
|
26
|
+
Every time a transaction is verified, the message signature is verified
|
27
|
+
with the proper certificate identified by the message fingerprint.
|
28
|
+
|
29
|
+
## LICENSE
|
30
|
+
|
31
|
+
active_merchant_ideal_multicert is Copyright (c) 2011 Voormedia B.V. and distributed under the MIT license. See the LICENSE file for more info.
|
32
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "active_merchant_ideal_multicert/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "active_merchant_ideal_multicert"
|
7
|
+
s.version = ActiveMerchantIdealMulticert::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Roel van Dijk"]
|
10
|
+
s.email = ["roelvandijk@voormedia.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{A patch for active_merchant_ideal to support multiple certificates.}
|
13
|
+
s.description = %q{A patch for active_merchant_ideal to support multiple certificates.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "active_merchant_ideal_multicert"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
require 'digest/sha1'
|
3
|
+
|
4
|
+
module ActiveMerchant #:nodoc:
|
5
|
+
module Billing #:nodoc:
|
6
|
+
class IdealGateway < Gateway
|
7
|
+
# Get certificate data by fingerprint.
|
8
|
+
def self.certificate_for_fingerprint(fingerprint)
|
9
|
+
@certificates_by_fingerprint[fingerprint]
|
10
|
+
end
|
11
|
+
|
12
|
+
# Save data of multiple certificates by certificate fingerprint.
|
13
|
+
def self.ideal_certificate_files=(certificate_files)
|
14
|
+
@certificates_by_fingerprint = certificate_files.inject({}) do |result, file|
|
15
|
+
data = File.read(file)
|
16
|
+
result[self.fingerprint(data)] = data
|
17
|
+
result
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
# Calculate fingerprint of a certificate data, which is defined as the
|
23
|
+
# SHA1-digest of the binary certificate data.
|
24
|
+
def self.fingerprint(certificate_data)
|
25
|
+
certificate = OpenSSL::X509::Certificate.new(certificate_data)
|
26
|
+
Digest::SHA1.hexdigest(certificate.to_der).upcase
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
module ActiveMerchant #:nodoc:
|
33
|
+
module Billing #:nodoc:
|
34
|
+
class IdealStatusResponse < IdealResponse
|
35
|
+
alias_method :old_verified?, :verified?
|
36
|
+
|
37
|
+
# Find the proper certificate and run the old verified code.
|
38
|
+
def verified?
|
39
|
+
certificate = IdealGateway.certificate_for_fingerprint(fingerprint)
|
40
|
+
return false unless certificate
|
41
|
+
IdealGateway.ideal_certificate = certificate
|
42
|
+
old_verified?
|
43
|
+
end
|
44
|
+
|
45
|
+
# Find the fingerprint in the XML.
|
46
|
+
def fingerprint
|
47
|
+
text('//fingerprint').upcase
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: active_merchant_ideal_multicert
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
version: 0.1.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Roel van Dijk
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-05-19 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: A patch for active_merchant_ideal to support multiple certificates.
|
22
|
+
email:
|
23
|
+
- roelvandijk@voormedia.com
|
24
|
+
executables: []
|
25
|
+
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- .gitignore
|
32
|
+
- Gemfile
|
33
|
+
- LICENSE
|
34
|
+
- README.md
|
35
|
+
- Rakefile
|
36
|
+
- active_merchant_ideal_multicert.gemspec
|
37
|
+
- lib/active_merchant_ideal_multicert.rb
|
38
|
+
- lib/active_merchant_ideal_multicert/version.rb
|
39
|
+
has_rdoc: true
|
40
|
+
homepage: ""
|
41
|
+
licenses: []
|
42
|
+
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
requirements: []
|
65
|
+
|
66
|
+
rubyforge_project: active_merchant_ideal_multicert
|
67
|
+
rubygems_version: 1.3.7
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: A patch for active_merchant_ideal to support multiple certificates.
|
71
|
+
test_files: []
|
72
|
+
|