sepafm 1.1.4 → 1.1.5
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/.rubocop.yml +32 -0
- data/lib/sepa/application_request.rb +7 -1
- data/lib/sepa/attribute_checks.rb +5 -1
- data/lib/sepa/banks/nordea/nordea_response.rb +2 -2
- data/lib/sepa/client.rb +9 -1
- data/lib/sepa/version.rb +1 -2
- data/lib/sepa/xml_templates/application_request/nordea/renew_certificate.xml +28 -0
- data/lib/sepa/xml_templates/soap/nordea/renew_certificate.xml +14 -0
- data/lib/sepafm.rb +1 -0
- data/readme.md +1 -1
- data/sepafm.gemspec +5 -5
- data/test/sepa/banks/nordea/nordea_renew_cert_application_request_test.rb +67 -0
- data/test/sepa/banks/nordea/nordea_renew_cert_request_soap_builder_test.rb +54 -0
- data/test/sepa/banks/nordea/nordea_response_test.rb +35 -24
- data/test/sepa/banks/nordea/responses/rc.xml +21 -0
- data/test/sepa/client_test.rb +23 -5
- data/test/sepa/fixtures.rb +64 -0
- data/test/sepa/sepa_test.rb +2 -4
- data/test_client/test_client.rb +6 -5
- metadata +22 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b95413cb0ca0c02afb68f0e7be64782306fe267e
|
4
|
+
data.tar.gz: 7363a519ce10b82d0c3a58bc86dffd0f6d435bad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07caab040ab4dd22976fb24a677ff56dca5b07912391a49047be8e92e5320447b669add4eabf264c83c29ae17a65909f41b830a26db846730d124cb8c2a19b5b
|
7
|
+
data.tar.gz: ed91bbf27e8a015815955525cf650305e2b99d97d11f02c6dfcf689ff9021ba379acaa80fcbebc258ab121d971af62a668f7d95da338abd1b3c5dee591c82e98
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
Metrics/AbcSize:
|
2
|
+
Max: 37
|
3
|
+
|
4
|
+
Metrics/ClassLength:
|
5
|
+
Max: 348
|
6
|
+
|
7
|
+
Metrics/CyclomaticComplexity:
|
8
|
+
Max: 8
|
9
|
+
|
10
|
+
Metrics/LineLength:
|
11
|
+
Max: 140
|
12
|
+
|
13
|
+
Metrics/MethodLength:
|
14
|
+
Max: 69
|
15
|
+
|
16
|
+
Metrics/ModuleLength:
|
17
|
+
Max: 146
|
18
|
+
|
19
|
+
Style/Documentation:
|
20
|
+
Exclude:
|
21
|
+
- 'spec/**/*'
|
22
|
+
- 'test/**/*'
|
23
|
+
|
24
|
+
Style/IndentationConsistency:
|
25
|
+
SupportedStyles: rails
|
26
|
+
|
27
|
+
Style/StringLiterals:
|
28
|
+
SupportedStyles: single_quotes, double_quotes
|
29
|
+
ConsistentQuotesInMultiline: true
|
30
|
+
|
31
|
+
Style/TrailingCommaInLiteral:
|
32
|
+
SupportedStyles: comma
|
@@ -129,6 +129,12 @@ module Sepa
|
|
129
129
|
set_node "Content", format_cert_request(@signing_csr)
|
130
130
|
end
|
131
131
|
|
132
|
+
# Sets nodes' contents for Nordea's and OP's renew certificate request
|
133
|
+
def set_renew_certificate_nodes
|
134
|
+
set_node "Service", "service" if @bank == :nordea
|
135
|
+
set_node "Content", format_cert_request(@signing_csr)
|
136
|
+
end
|
137
|
+
|
132
138
|
# Sets nodes' contents for OP's get service certificates request
|
133
139
|
def set_service_certificates_nodes
|
134
140
|
set_node("Service", "MATU")
|
@@ -162,7 +168,7 @@ module Sepa
|
|
162
168
|
set_node("CustomerId", @customer_id)
|
163
169
|
set_node("Timestamp", iso_time)
|
164
170
|
set_node("SoftwareId", "Sepa Transfer Library version #{VERSION}")
|
165
|
-
set_node("Command", pretty_command)
|
171
|
+
set_node("Command", pretty_command) unless @command == :renew_certificate
|
166
172
|
end
|
167
173
|
|
168
174
|
# Removes a node from {#application_request}
|
@@ -12,7 +12,10 @@ module Sepa
|
|
12
12
|
case bank
|
13
13
|
when :nordea
|
14
14
|
STANDARD_COMMANDS +
|
15
|
-
%i(
|
15
|
+
%i(
|
16
|
+
get_certificate
|
17
|
+
renew_certificate
|
18
|
+
)
|
16
19
|
when :danske
|
17
20
|
STANDARD_COMMANDS -
|
18
21
|
%i(get_user_info) +
|
@@ -101,6 +104,7 @@ module Sepa
|
|
101
104
|
create_certificate
|
102
105
|
get_bank_certificate
|
103
106
|
get_certificate
|
107
|
+
renew_certificate
|
104
108
|
get_user_info
|
105
109
|
).include?(command) ||
|
106
110
|
%i(
|
@@ -27,7 +27,7 @@ module Sepa
|
|
27
27
|
# @return [nil] if response code cannot be found
|
28
28
|
# @see Response#response_code
|
29
29
|
def response_code
|
30
|
-
return super unless
|
30
|
+
return super unless [:get_certificate, :renew_certificate].include? command
|
31
31
|
|
32
32
|
node = doc.at('xmlns|ResponseCode', xmlns: NORDEA_PKI)
|
33
33
|
node.content if node
|
@@ -40,7 +40,7 @@ module Sepa
|
|
40
40
|
# @return [nil] if response text cannot be found
|
41
41
|
# @see Response#response_text
|
42
42
|
def response_text
|
43
|
-
return super unless
|
43
|
+
return super unless [:get_certificate, :renew_certificate].include? command
|
44
44
|
|
45
45
|
node = doc.at('xmlns|ResponseText', xmlns: NORDEA_PKI)
|
46
46
|
node.content if node
|
data/lib/sepa/client.rb
CHANGED
@@ -256,7 +256,7 @@ module Sepa
|
|
256
256
|
|
257
257
|
begin
|
258
258
|
error = nil
|
259
|
-
response = client.call(
|
259
|
+
response = client.call(soap_command, xml: soap)
|
260
260
|
response &&= response.to_xml
|
261
261
|
rescue Savon::Error => e
|
262
262
|
response = nil
|
@@ -329,5 +329,13 @@ module Sepa
|
|
329
329
|
"Sepa::#{bank.capitalize}Response".constantize.new(options)
|
330
330
|
end
|
331
331
|
|
332
|
+
def soap_command
|
333
|
+
case @command
|
334
|
+
when :renew_certificate
|
335
|
+
:get_certificate
|
336
|
+
else
|
337
|
+
@command
|
338
|
+
end
|
339
|
+
end
|
332
340
|
end
|
333
341
|
end
|
data/lib/sepa/version.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<CertApplicationRequest xmlns="http://filetransfer.nordea.com/xmldata/">
|
3
|
+
<CustomerId/>
|
4
|
+
<Timestamp/>
|
5
|
+
<Environment/>
|
6
|
+
<SoftwareId/>
|
7
|
+
<Service/>
|
8
|
+
<Content/>
|
9
|
+
<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
|
10
|
+
<dsig:SignedInfo>
|
11
|
+
<dsig:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments" />
|
12
|
+
<dsig:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
|
13
|
+
<dsig:Reference URI="">
|
14
|
+
<dsig:Transforms>
|
15
|
+
<dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
|
16
|
+
</dsig:Transforms>
|
17
|
+
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
|
18
|
+
<dsig:DigestValue/>
|
19
|
+
</dsig:Reference>
|
20
|
+
</dsig:SignedInfo>
|
21
|
+
<dsig:SignatureValue/>
|
22
|
+
<dsig:KeyInfo>
|
23
|
+
<dsig:X509Data>
|
24
|
+
<dsig:X509Certificate/>
|
25
|
+
</dsig:X509Data>
|
26
|
+
</dsig:KeyInfo>
|
27
|
+
</dsig:Signature>
|
28
|
+
</CertApplicationRequest>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cer="http://bxd.fi/CertificateService">
|
3
|
+
<soapenv:Header/>
|
4
|
+
<soapenv:Body>
|
5
|
+
<cer:getCertificatein>
|
6
|
+
<cer:RequestHeader>
|
7
|
+
<cer:SenderId/>
|
8
|
+
<cer:RequestId/>
|
9
|
+
<cer:Timestamp/>
|
10
|
+
</cer:RequestHeader>
|
11
|
+
<cer:ApplicationRequest/>
|
12
|
+
</cer:getCertificatein>
|
13
|
+
</soapenv:Body>
|
14
|
+
</soapenv:Envelope>
|
data/lib/sepafm.rb
CHANGED
data/readme.md
CHANGED
@@ -255,7 +255,7 @@ Parameter | Description
|
|
255
255
|
--- | ---
|
256
256
|
bank | Bank you want to send the request to. Either `:nordea`, `:danske`, or `:op`
|
257
257
|
customer_id | Customer id from bank.
|
258
|
-
command | Must be one of: `:download_file_list`, `:upload_file`, `:download_file`, `:get_user_info`, `:get_certificate`, `:get_bank_certificate`, `:create_certificate`, or `:
|
258
|
+
command | Must be one of: `:download_file_list`, `:upload_file`, `:download_file`, `:get_user_info`, `:get_certificate`, `:get_bank_certificate`, `:create_certificate`, `:get_service_certificates` or `:renew_certificate`.
|
259
259
|
content | Content to be sent to the bank in `upload_file`.
|
260
260
|
environment | Bank's environment where the request is sent. Has to be `production` or `test`.
|
261
261
|
language | Language of the response. Must be either `FI`, `EN`, or `SV`.
|
data/sepafm.gemspec
CHANGED
@@ -22,10 +22,10 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_dependency 'nokogiri', '~> 1.6'
|
23
23
|
spec.add_dependency 'savon', '~> 2.11'
|
24
24
|
|
25
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
26
|
-
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.
|
27
|
-
spec.add_development_dependency 'dotenv', '~> 2.
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
26
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.5'
|
27
|
+
spec.add_development_dependency 'dotenv', '~> 2.1'
|
28
28
|
spec.add_development_dependency 'minitest', '~> 5.8'
|
29
|
-
spec.add_development_dependency 'rake', '~>
|
30
|
-
spec.add_development_dependency 'rubyntlm', '~> 0.
|
29
|
+
spec.add_development_dependency 'rake', '~> 11.1'
|
30
|
+
spec.add_development_dependency 'rubyntlm', '~> 0.6'
|
31
31
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class NordeaRenewCertApplicationRequestTest < ActiveSupport::TestCase
|
4
|
+
setup do
|
5
|
+
@params = nordea_renew_certificate_params
|
6
|
+
|
7
|
+
# Convert the keys here since the conversion is usually done by the client and these tests
|
8
|
+
# bypass the client
|
9
|
+
@params[:own_signing_certificate] = x509_certificate(@params[:own_signing_certificate])
|
10
|
+
@params[:signing_private_key] = rsa_key(@params[:signing_private_key])
|
11
|
+
|
12
|
+
application_request = Sepa::SoapBuilder.new(@params).application_request
|
13
|
+
@doc = Nokogiri::XML(application_request.to_xml)
|
14
|
+
end
|
15
|
+
|
16
|
+
test "validates against schema" do
|
17
|
+
errors = []
|
18
|
+
|
19
|
+
Dir.chdir(SCHEMA_PATH) do
|
20
|
+
xsd = Nokogiri::XML::Schema(IO.read('cert_application_request.xsd'))
|
21
|
+
xsd.validate(@doc).each do |error|
|
22
|
+
errors << error
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
assert errors.empty?, "The following schema validations failed:\n#{errors.join("\n")}"
|
27
|
+
end
|
28
|
+
|
29
|
+
test "customer id is set correctly" do
|
30
|
+
assert_equal @params[:customer_id], @doc.at_css("CustomerId").content
|
31
|
+
end
|
32
|
+
|
33
|
+
test "timestamp is set correctly" do
|
34
|
+
timestamp = Time.strptime(@doc.at_css("Timestamp").content, '%Y-%m-%dT%H:%M:%S%z')
|
35
|
+
assert timestamp <= Time.now && timestamp > (Time.now - 60), "Timestamp was not set correctly"
|
36
|
+
end
|
37
|
+
|
38
|
+
test "environment is set correctly" do
|
39
|
+
assert_equal @params[:environment].upcase, @doc.at_css("Environment").content
|
40
|
+
end
|
41
|
+
|
42
|
+
test "software id is set correctly" do
|
43
|
+
assert_equal "Sepa Transfer Library version #{Sepa::VERSION}", @doc.at_css("SoftwareId").content
|
44
|
+
end
|
45
|
+
|
46
|
+
test "service is set correctly" do
|
47
|
+
assert_equal "service", @doc.at_css("Service").content
|
48
|
+
end
|
49
|
+
|
50
|
+
test "content is set correctly" do
|
51
|
+
assert_equal format_cert_request(@params[:signing_csr]), @doc.at_css("Content").content
|
52
|
+
end
|
53
|
+
|
54
|
+
test 'digest is calculated correctly' do
|
55
|
+
calculated_digest = @doc.at("xmlns|DigestValue", xmlns: 'http://www.w3.org/2000/09/xmldsig#').content
|
56
|
+
|
57
|
+
# Remove signature for calculating digest
|
58
|
+
@doc.at("xmlns|Signature", xmlns: 'http://www.w3.org/2000/09/xmldsig#').remove
|
59
|
+
|
60
|
+
# Calculate digest
|
61
|
+
sha1 = OpenSSL::Digest::SHA1.new
|
62
|
+
actual_digest = encode(sha1.digest(@doc.canonicalize))
|
63
|
+
|
64
|
+
# And then make sure the two are equal
|
65
|
+
assert_equal actual_digest.strip, calculated_digest.strip
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class NordeaRenewCertRequestSoapBuilderTest < ActiveSupport::TestCase
|
4
|
+
setup do
|
5
|
+
@params = nordea_renew_certificate_params
|
6
|
+
|
7
|
+
# Convert the keys here since the conversion is usually done by the client and these tests
|
8
|
+
# bypass the client
|
9
|
+
@params[:own_signing_certificate] = x509_certificate(@params[:own_signing_certificate])
|
10
|
+
@params[:signing_private_key] = rsa_key(@params[:signing_private_key])
|
11
|
+
|
12
|
+
soap_builder = Sepa::SoapBuilder.new(@params)
|
13
|
+
@doc = Nokogiri::XML(soap_builder.to_xml)
|
14
|
+
end
|
15
|
+
|
16
|
+
test "validates against schema" do
|
17
|
+
errors = []
|
18
|
+
|
19
|
+
Dir.chdir(SCHEMA_PATH) do
|
20
|
+
xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
|
21
|
+
xsd.validate(@doc).each do |error|
|
22
|
+
errors << error
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
assert errors.empty?, "The following schema validations failed:\n#{errors.join("\n")}"
|
27
|
+
end
|
28
|
+
|
29
|
+
test 'sender id is properly set' do
|
30
|
+
assert_equal @params[:customer_id], @doc.at("xmlns|SenderId", xmlns: 'http://bxd.fi/CertificateService').content
|
31
|
+
end
|
32
|
+
|
33
|
+
test 'request id is properly_set' do
|
34
|
+
request_id_node = @doc.at('xmlns|RequestId', xmlns: 'http://bxd.fi/CertificateService')
|
35
|
+
|
36
|
+
assert request_id_node.content =~ /^[0-9A-F]+$/i
|
37
|
+
assert_equal 34, request_id_node.content.length
|
38
|
+
end
|
39
|
+
|
40
|
+
test 'timestamp is set correctly' do
|
41
|
+
timestamp_node = @doc.at("xmlns|Timestamp", xmlns: 'http://bxd.fi/CertificateService')
|
42
|
+
timestamp = Time.strptime(timestamp_node.content, '%Y-%m-%dT%H:%M:%S%z')
|
43
|
+
|
44
|
+
assert timestamp <= Time.now && timestamp > (Time.now - 60)
|
45
|
+
end
|
46
|
+
|
47
|
+
test 'application request is inserted properly' do
|
48
|
+
ar_node = @doc.at("xmlns|ApplicationRequest", xmlns: 'http://bxd.fi/CertificateService')
|
49
|
+
ar_doc = Nokogiri::XML(decode(ar_node.content))
|
50
|
+
|
51
|
+
assert ar_doc.respond_to?(:canonicalize)
|
52
|
+
assert_equal @params[:customer_id], ar_doc.at_css("CustomerId").content
|
53
|
+
end
|
54
|
+
end
|
@@ -3,7 +3,7 @@ require 'test_helper'
|
|
3
3
|
class NordeaResponseTest < ActiveSupport::TestCase
|
4
4
|
include Sepa::Utilities
|
5
5
|
|
6
|
-
|
6
|
+
setup do
|
7
7
|
options = {
|
8
8
|
response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/dfl.xml"),
|
9
9
|
command: :download_file_list
|
@@ -40,6 +40,12 @@ class NordeaResponseTest < ActiveSupport::TestCase
|
|
40
40
|
}
|
41
41
|
@gc = Sepa::NordeaResponse.new options
|
42
42
|
|
43
|
+
options = {
|
44
|
+
response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/rc.xml"),
|
45
|
+
command: :renew_certificate
|
46
|
+
}
|
47
|
+
@rc = Sepa::NordeaResponse.new options
|
48
|
+
|
43
49
|
options = {
|
44
50
|
response: File.read("#{NORDEA_TEST_RESPONSE_PATH}/not_ok_response_code.xml"),
|
45
51
|
command: :download_file_list
|
@@ -65,52 +71,55 @@ class NordeaResponseTest < ActiveSupport::TestCase
|
|
65
71
|
@body_altered = Sepa::NordeaResponse.new options
|
66
72
|
end
|
67
73
|
|
68
|
-
test 'valid responses
|
69
|
-
assert @dfl.valid?,
|
70
|
-
assert @uf.valid?,
|
74
|
+
test 'valid responses are valid' do
|
75
|
+
assert @dfl.valid?, @dfl.errors.messages
|
76
|
+
assert @uf.valid?, @uf.errors.messages
|
71
77
|
assert @df_tito.valid?, @df_tito.errors.messages
|
72
|
-
assert @df_ktl.valid?,
|
73
|
-
assert @gui.valid?,
|
74
|
-
assert @gc.valid?,
|
78
|
+
assert @df_ktl.valid?, @df_ktl.errors.messages
|
79
|
+
assert @gui.valid?, @gui.errors.messages
|
80
|
+
assert @gc.valid?, @gc.errors.messages
|
81
|
+
assert @rc.valid?, @rc.errors.messages
|
75
82
|
end
|
76
83
|
|
77
|
-
test '
|
78
|
-
a = Sepa::NordeaResponse.new(
|
84
|
+
test 'fails with improper params' do
|
85
|
+
a = Sepa::NordeaResponse.new(response: "Jees", command: 'not')
|
79
86
|
refute a.valid?
|
80
87
|
end
|
81
88
|
|
82
|
-
test '
|
83
|
-
a = Sepa::NordeaResponse.new(
|
89
|
+
test 'complains if application response is not valid against schema' do
|
90
|
+
a = Sepa::NordeaResponse.new(response: "<ar>text</ar>", command: 'notvalid')
|
84
91
|
refute a.valid?
|
85
92
|
end
|
86
93
|
|
87
|
-
test 'hashes
|
94
|
+
test 'hashes match with correct responses' do
|
88
95
|
assert @df_ktl.hashes_match?
|
89
96
|
assert @df_tito.hashes_match?
|
90
97
|
assert @dfl.hashes_match?
|
91
98
|
assert @response_with_code_24
|
92
99
|
assert @gc.hashes_match?
|
100
|
+
assert @rc.hashes_match?
|
93
101
|
assert @gui.hashes_match?
|
94
102
|
assert @not_ok_response_code_response.hashes_match?
|
95
103
|
assert @uf.hashes_match?
|
96
104
|
end
|
97
105
|
|
98
|
-
test 'response
|
106
|
+
test 'response is valid if hashes match and otherwise valid' do
|
99
107
|
assert @df_ktl.valid?
|
100
108
|
assert @df_tito.valid?
|
101
109
|
assert @dfl.valid?
|
102
110
|
assert @response_with_code_24
|
103
111
|
assert @gc.valid?
|
112
|
+
assert @rc.valid?
|
104
113
|
assert @gui.valid?
|
105
114
|
assert @uf.valid?
|
106
115
|
end
|
107
116
|
|
108
|
-
test 'hashes
|
117
|
+
test 'hashes dont match with incorrect responses' do
|
109
118
|
refute @timestamp_altered.hashes_match?
|
110
119
|
refute @body_altered.hashes_match?
|
111
120
|
end
|
112
121
|
|
113
|
-
test 'response
|
122
|
+
test 'response is not valid if hashes dont match' do
|
114
123
|
refute @timestamp_altered.valid?
|
115
124
|
refute @body_altered.valid?
|
116
125
|
end
|
@@ -123,12 +132,13 @@ class NordeaResponseTest < ActiveSupport::TestCase
|
|
123
132
|
test 'response should not be valid when wrong certificate is embedded in soap' do
|
124
133
|
end
|
125
134
|
|
126
|
-
test 'signature
|
135
|
+
test 'signature verifies with correct responses' do
|
127
136
|
assert @df_ktl.signature_is_valid?
|
128
137
|
assert @df_tito.signature_is_valid?
|
129
138
|
assert @dfl.signature_is_valid?
|
130
139
|
assert @response_with_code_24.signature_is_valid?
|
131
140
|
assert @gc.signature_is_valid?
|
141
|
+
assert @rc.signature_is_valid?
|
132
142
|
assert @gui.signature_is_valid?
|
133
143
|
assert @not_ok_response_code_response.signature_is_valid?
|
134
144
|
assert @uf.signature_is_valid?
|
@@ -143,13 +153,13 @@ class NordeaResponseTest < ActiveSupport::TestCase
|
|
143
153
|
assert_equal File.read("#{NORDEA_TEST_RESPONSE_PATH}/dfl.xml"), @dfl.to_s
|
144
154
|
end
|
145
155
|
|
146
|
-
#
|
147
|
-
|
156
|
+
# TITO: Electronic account statement
|
157
|
+
test 'content can be extracted when file type is TITO' do
|
148
158
|
refute_nil @df_tito.content
|
149
159
|
end
|
150
160
|
|
151
|
-
#
|
152
|
-
|
161
|
+
# KTL: Incoming reference payments
|
162
|
+
test 'test content can be extracted when file type is KTL' do
|
153
163
|
refute_nil @df_ktl.content
|
154
164
|
end
|
155
165
|
|
@@ -170,9 +180,11 @@ class NordeaResponseTest < ActiveSupport::TestCase
|
|
170
180
|
end
|
171
181
|
|
172
182
|
test 'certificate can be extracted from get certificate response' do
|
173
|
-
assert_nothing_raised
|
174
|
-
|
175
|
-
|
183
|
+
assert_nothing_raised { x509_certificate @gc.own_signing_certificate }
|
184
|
+
end
|
185
|
+
|
186
|
+
test 'certificate can be extracted from renew certificate response' do
|
187
|
+
assert_nothing_raised { x509_certificate @rc.own_signing_certificate }
|
176
188
|
end
|
177
189
|
|
178
190
|
test 'response with a response code other than 00 or 24 is considered invalid' do
|
@@ -184,5 +196,4 @@ class NordeaResponseTest < ActiveSupport::TestCase
|
|
184
196
|
assert @response_with_code_24.valid?
|
185
197
|
assert_empty @response_with_code_24.errors.messages
|
186
198
|
end
|
187
|
-
|
188
199
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<soapenv:Envelope xmlns:mod="http://model.bxd.fi" xmlns:cer="http://bxd.fi/CertificateService" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsu:Timestamp wsu:Id="Timestamp-09afb2f5-5d9c-41bd-a433-3c069554150c" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsu:Created>2016-05-11T13:01:50Z</wsu:Created><wsu:Expires>2016-05-11T13:06:50Z</wsu:Expires></wsu:Timestamp><wsse:BinarySecurityToken wsu:Id="SecurityToken-f2f045b1-9bba-4ef3-817d-c4255bd53530" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">MIID3zCCAsegAwIBAgIEAbWj4TANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQGEwJTRTEeMBwGA1UEChMVTm9yZGVhIEJhbmsgQUIgKHB1YmwpMSYwJAYDVQQDEx1Ob3JkZWEgQ29ycG9yYXRlIFNlcnZlciBDQSAwMTEUMBIGA1UEBRMLNTE2NDA2LTAxMjAwHhcNMTQwNzMxMTE0MDQzWhcNMTYwNzMxMTE0MDQzWjB+MQswCQYDVQQGEwJTRTEeMBwGA1UECgwVTm9yZGVhIEJhbmsgQUIgKHB1YmwpMSowKAYDVQQLDCFOZXRiYW5raW5nICYgSW50ZWdyYXRpb24gU2VydmljZXMxIzAhBgNVBAMMGkZpbGUgVHJhbnNmZXIgV2ViIFNlcnZpY2VzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrfBSpbRL5YvjTk7XZ2wE1xaaTTv8T+VwJde1MZIyYzenBBlPTx1e2gj6ey6RSJzpQD3H/YBl/FRevnMAKC8cYFnutN0ymocXKD/IN2jkjbPTAZsElgHkwiTrmlLekUKaL5HulbENiPuuPOsgZR0cKKJ8pxHkHRbKheF+ir8uEzwIDAQABo4H7MIH4MAkGA1UdEwQCMAAwEQYDVR0OBAoECEB6Nxxczc7jMBMGA1UdIwQMMAqACETHk9nZe1bBMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3Aubm9yZGVhLnNlL1NDQTAxMIGJBgNVHR8EgYEwfzB9oHugeYZ3bGRhcDovL2xkYXAubmIuc2UvY249Tm9yZGVhJTIwQ29ycG9yYXRlJTIwU2VydmVyJTIwQ0ElMjAwMSxvPU5vcmRlYSUyMEJhbmslMjBBQiUyMChwdWJsKSxjPVNFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwDQYJKoZIhvcNAQEFBQADggEBAJSGz6ljlOilDt2mVPQRAhDKDMct8c1ayJNyzQ3XoDb9j15xDn5pWG0tCXoplhkn1OPm1n9giS2gxpP1TzauUyYIv9an04abdYlqDVP3fTUUR4aPDjsuwgDvrzlcPIWu0b1ZE//yI8jrjpwv7Hs2kh8t4WOK8szYYsfswnhTqWa0VyVRHVy4KWRrLAH3E61KDZQ7HvRXfWFXQBe00doGKsMif0vEQZe1ztHqzDRpAilGLWne6Pvw78b5xPwN8tmuKZ7PdNZCviyFU/fsuE/Nq//T8JIK6qbx7kxIjHN7fnv+dBTAqaX1KfaAHhllci92emeMuXoktMY4QfJOl/F/pdo=</wsse:BinarySecurityToken><Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
|
3
|
+
<SignedInfo>
|
4
|
+
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
5
|
+
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
6
|
+
<Reference URI="#Timestamp-09afb2f5-5d9c-41bd-a433-3c069554150c">
|
7
|
+
<Transforms>
|
8
|
+
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
9
|
+
</Transforms>
|
10
|
+
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
|
11
|
+
<DigestValue>QimdX4ujJz/Yo7z2rwMIVpRKEjE=</DigestValue>
|
12
|
+
</Reference>
|
13
|
+
<Reference URI="#Body-1f6c1c6a-6c72-4db2-bf74-dcc1fd33f88d">
|
14
|
+
<Transforms>
|
15
|
+
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
16
|
+
</Transforms>
|
17
|
+
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
|
18
|
+
<DigestValue>eelP8Ih15UnncJxLmJyveMEinP8=</DigestValue>
|
19
|
+
</Reference>
|
20
|
+
</SignedInfo>
|
21
|
+
<SignatureValue>W65Jx6GJGY/+PO6DksatphKyOf32wkxPEHg/1vCJKxT+mwrGTmSO81WwajrHS0ROk7l4GLIfK6aUBZfpLPg4PzUtHvbA25H2pLDXMuF0YUu6EasMqWYlFq4Iu9TVQj5XTCT3fXS6l2BugFZ0Qgjh+a1+PxFv8G2WVQYwKkFx5VI=</SignatureValue><KeyInfo><wsse:SecurityTokenReference xmlns=""><wsse:Reference URI="#SecurityToken-f2f045b1-9bba-4ef3-817d-c4255bd53530" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></KeyInfo></Signature></wsse:Security></soapenv:Header><soapenv:Body wsu:Id="Body-1f6c1c6a-6c72-4db2-bf74-dcc1fd33f88d" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><cer:getCertificateout><cer:ResponseHeader><cer:SenderId>11111111</cer:SenderId><cer:RequestId>72f5899d2e21b7f54ad10515c30dbfff0a</cer:RequestId><cer:Timestamp>2016-05-11T15:01:50+02:00</cer:Timestamp><cer:ResponseCode>00</cer:ResponseCode><cer:ResponseText>OK</cer:ResponseText></cer:ResponseHeader><cer:ApplicationResponse>PGJ4ZDpDZXJ0QXBwbGljYXRpb25SZXNwb25zZSB4bWxuczpieGQ9Imh0dHA6Ly9maWxldHJhbnNmZXIubm9yZGVhLmNvbS94bWxkYXRhLyI+PGJ4ZDpDdXN0b21lcklkPjExMTExMTExPC9ieGQ6Q3VzdG9tZXJJZD48YnhkOlRpbWVzdGFtcD4yMDE2LTA1LTExVDE1OjAxOjUwKzAyOjAwPC9ieGQ6VGltZXN0YW1wPjxieGQ6UmVzcG9uc2VDb2RlPjAwPC9ieGQ6UmVzcG9uc2VDb2RlPjxieGQ6UmVzcG9uc2VUZXh0Pk9LPC9ieGQ6UmVzcG9uc2VUZXh0PjxieGQ6Q2VydGlmaWNhdGVzPjxieGQ6Q2VydGlmaWNhdGU+PGJ4ZDpOYW1lLz48YnhkOkNlcnRpZmljYXRlPk1JSUMrakNDQWVLZ0F3SUJBZ0lDYmVNd0RRWUpLb1pJaHZjTkFRRUZCUUF3WkRFTE1Ba0dBMVVFQmhNQ1UwVXhIakFjQmdOVkJBb1RGVTV2Y21SbFlTQkNZVzVySUVGQ0lDaHdkV0pzS1RFZk1CMEdBMVVFQXhNV1RtOXlaR1ZoSUVOdmNuQnZjbUYwWlNCRFFTQXdNVEVVTUJJR0ExVUVCUk1MTlRFMk5EQTJMVEF4TWpBd0hoY05NVFl3TlRFeE1UTXdNVFV3V2hjTk1UZ3dOVEV4TVRNd01UVXdXakJFTVFzd0NRWURWUVFHRXdKR1NURWdNQjRHQTFVRUF3d1hUbTl5WkdWaElFUmxiVzhnUTJWeWRHbG1hV05oZEdVeEV6QVJCZ05WQkFVVENqVTNPREE0TmpBeU16Z3dnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTkIvd2RKVnYrTTkwbmdXeTUvWkFLcEhramgvUWMvYkJDMlRjNUhLRnZwOEcrdFlYK2ZacEVTQ3Y0WVVreUVNeFFjWGJNUk1DRWFCUURiMmpFZDdaU2xCbGtucnFUU1VLSEpZZC9QcDE1eDhqTjVsMllTYzA1NVMwU3RUTy81clhnOHZBN3lkOGlKaSsxQmpqY3FQQ0RMd3BHNGxWdDlHS09hUDJQMnMyNWVqQWdNQkFBR2pXakJZTUFrR0ExVWRFd1FDTUFBd0VRWURWUjBPQkFvRUNFUnlMc0hFVklHZ01CTUdBMVVkSUFRTU1Bb3dDQVlHS29Wd1J3RURNQk1HQTFVZEl3UU1NQXFBQ0VBTGRkYmJ6d3VuTUE0R0ExVWREd0VCL3dRRUF3SUZvREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBQ080djZnVGc5aUVXcDVFNDNjQ3M1OUMwMThuZ3ord2xNY2ZCWVZQR0Z1TGoyMlhjdHpFazgyazkxeU04WmxMazFvY29PSTNUUHRQazJJbmYxTkxIYjRGNGVxM1pQTjcxbVRhWUM2Q3g1ZGgvUm5YcW54V1hXMGJYbXNIOUx6SVc5UXV6ZUFYblN4UzNORFVBKzRBL0FsTmxsck5KajNsQk0rTEJQMkphcTNEam9SeERMdVJZR1VCS0wxS2htamxjNG9UL2RMSjRnMWFMOHBBbldFZVZ1NzQyc0U4MXVJaE9YSFVQUGFqNE52KzNZRHdRRkFKMVhha1A2cnFMWEw3d0l6WWRueGt2TW80MlQwM0swZjgwZmw5NzRwUEt4SDcyckk2dWQyWnpFUk1saThPL1g4VU5aendQeVhIcWJDNGVYUVBGSGVEUHI3MTV4WWl2T1JBTUtRPT08L2J4ZDpDZXJ0aWZpY2F0ZT48YnhkOkNlcnRpZmljYXRlRm9ybWF0Plg1MDl2MzwvYnhkOkNlcnRpZmljYXRlRm9ybWF0PjwvYnhkOkNlcnRpZmljYXRlPjwvYnhkOkNlcnRpZmljYXRlcz48U2lnbmF0dXJlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj4KPFNpZ25lZEluZm8+CiAgPENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSIvPgogIDxTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjcnNhLXNoYTEiLz4KICA8UmVmZXJlbmNlIFVSST0iIj4KICAgIDxUcmFuc2Zvcm1zPgogICAgICA8VHJhbnNmb3JtIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2VudmVsb3BlZC1zaWduYXR1cmUiLz4KICAgICAgPFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDEvUkVDLXhtbC1jMTRuLTIwMDEwMzE1Ii8+CiAgICA8L1RyYW5zZm9ybXM+CiAgICA8RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEiLz4KICAgIDxEaWdlc3RWYWx1ZT5IdHNwVHhXZmRRaTE1QnNSSnJwekpVbVk0TDQ9PC9EaWdlc3RWYWx1ZT4KICA8L1JlZmVyZW5jZT4KPC9TaWduZWRJbmZvPgogICAgPFNpZ25hdHVyZVZhbHVlPk9DWWNvTWZxQlhVZGxCTFpRZmRTR1FwODFySzVPdWU5YXpKdjZ6UzRuaU5yVjlheFN5NnlIYzdLUXoxQk1wWkovVDdONGxKdk90UThTcnNPWnQ0Q1ViYzNQWFgxc1ROcmphc29GTGhqODlncWtTc04zTk5BSWlySmg4d1ZzbWJXdXhnUEs5YUxwY0g5d2c3YkNyVUdXSXg0TXBvTXN1eHkxUUZFa3dUaTNzZz08L1NpZ25hdHVyZVZhbHVlPjxLZXlJbmZvPjxYNTA5RGF0YT48WDUwOUNlcnRpZmljYXRlPk1JSUQzekNDQXNlZ0F3SUJBZ0lFQWJXajRUQU5CZ2txaGtpRzl3MEJBUVVGQURCck1Rc3dDUVlEVlFRR0V3SlRSVEVlTUJ3R0ExVUVDaE1WVG05eVpHVmhJRUpoYm1zZ1FVSWdLSEIxWW13cE1TWXdKQVlEVlFRREV4MU9iM0prWldFZ1EyOXljRzl5WVhSbElGTmxjblpsY2lCRFFTQXdNVEVVTUJJR0ExVUVCUk1MTlRFMk5EQTJMVEF4TWpBd0hoY05NVFF3TnpNeE1URTBNRFF6V2hjTk1UWXdOek14TVRFME1EUXpXakIrTVFzd0NRWURWUVFHRXdKVFJURWVNQndHQTFVRUNnd1ZUbTl5WkdWaElFSmhibXNnUVVJZ0tIQjFZbXdwTVNvd0tBWURWUVFMRENGT1pYUmlZVzVyYVc1bklDWWdTVzUwWldkeVlYUnBiMjRnVTJWeWRtbGpaWE14SXpBaEJnTlZCQU1NR2tacGJHVWdWSEpoYm5ObVpYSWdWMlZpSUZObGNuWnBZMlZ6TUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDcmZCU3BiUkw1WXZqVGs3WFoyd0UxeGFhVFR2OFQrVndKZGUxTVpJeVl6ZW5CQmxQVHgxZTJnajZleTZSU0p6cFFEM0gvWUJsL0ZSZXZuTUFLQzhjWUZudXROMHltb2NYS0QvSU4yamtqYlBUQVpzRWxnSGt3aVRybWxMZWtVS2FMNUh1bGJFTmlQdXVQT3NnWlIwY0tLSjhweEhrSFJiS2hlRitpcjh1RXp3SURBUUFCbzRIN01JSDRNQWtHQTFVZEV3UUNNQUF3RVFZRFZSME9CQW9FQ0VCNk54eGN6YzdqTUJNR0ExVWRJd1FNTUFxQUNFVEhrOW5aZTFiQk1EY0dDQ3NHQVFVRkJ3RUJCQ3N3S1RBbkJnZ3JCZ0VGQlFjd0FZWWJhSFIwY0RvdkwyOWpjM0F1Ym05eVpHVmhMbk5sTDFORFFUQXhNSUdKQmdOVkhSOEVnWUV3ZnpCOW9IdWdlWVozYkdSaGNEb3ZMMnhrWVhBdWJtSXVjMlV2WTI0OVRtOXlaR1ZoSlRJd1EyOXljRzl5WVhSbEpUSXdVMlZ5ZG1WeUpUSXdRMEVsTWpBd01TeHZQVTV2Y21SbFlTVXlNRUpoYm1zbE1qQkJRaVV5TUNod2RXSnNLU3hqUFZORlAyTmxjblJwWm1sallYUmxjbVYyYjJOaGRHbHZibXhwYzNRd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFKU0d6NmxqbE9pbER0Mm1WUFFSQWhES0RNY3Q4YzFheUpOeXpRM1hvRGI5ajE1eERuNXBXRzB0Q1hvcGxoa24xT1BtMW45Z2lTMmd4cFAxVHphdVV5WUl2OWFuMDRhYmRZbHFEVlAzZlRVVVI0YVBEanN1d2dEdnJ6bGNQSVd1MGIxWkUvL3lJOGpyanB3djdIczJraDh0NFdPSzhzellZc2Zzd25oVHFXYTBWeVZSSFZ5NEtXUnJMQUgzRTYxS0RaUTdIdlJYZldGWFFCZTAwZG9HS3NNaWYwdkVRWmUxenRIcXpEUnBBaWxHTFduZTZQdnc3OGI1eFB3Tjh0bXVLWjdQZE5aQ3ZpeUZVL2ZzdUUvTnEvL1Q4SklLNnFieDdreElqSE43Zm52K2RCVEFxYVgxS2ZhQUhobGxjaTkyZW1lTXVYb2t0TVk0UWZKT2wvRi9wZG89PC9YNTA5Q2VydGlmaWNhdGU+PFg1MDlJc3N1ZXJTZXJpYWw+PFg1MDlJc3N1ZXJOYW1lPnNlcmlhbE51bWJlcj01MTY0MDYtMDEyMCwgQ049Tm9yZGVhIENvcnBvcmF0ZSBTZXJ2ZXIgQ0EgMDEsIE89Tm9yZGVhIEJhbmsgQUIgKHB1YmwpLCBDPVNFPC9YNTA5SXNzdWVyTmFtZT48WDUwOVNlcmlhbE51bWJlcj4yODY4MTE4NTwvWDUwOVNlcmlhbE51bWJlcj48L1g1MDlJc3N1ZXJTZXJpYWw+PC9YNTA5RGF0YT48L0tleUluZm8+PC9TaWduYXR1cmU+PC9ieGQ6Q2VydEFwcGxpY2F0aW9uUmVzcG9uc2U+</cer:ApplicationResponse></cer:getCertificateout></soapenv:Body></soapenv:Envelope>
|
data/test/sepa/client_test.rb
CHANGED
@@ -6,10 +6,11 @@ class ClientTest < ActiveSupport::TestCase
|
|
6
6
|
def setup
|
7
7
|
|
8
8
|
# Get params hashes from fixtures for different banks and for different request types
|
9
|
-
@nordea_generic_params
|
10
|
-
@nordea_get_certificate_params
|
9
|
+
@nordea_generic_params = nordea_generic_params
|
10
|
+
@nordea_get_certificate_params = nordea_get_certificate_params
|
11
|
+
@nordea_renew_certificate_params = nordea_get_certificate_params
|
11
12
|
@danske_create_certificate_params = danske_create_certificate_params
|
12
|
-
@danske_generic_params
|
13
|
+
@danske_generic_params = danske_generic_params
|
13
14
|
|
14
15
|
# Namespaces
|
15
16
|
@cor = 'http://bxd.fi/CorporateFileService'
|
@@ -26,7 +27,7 @@ class ClientTest < ActiveSupport::TestCase
|
|
26
27
|
test "correct allowed commands for nordea" do
|
27
28
|
c = Sepa::Client.new(bank: :nordea)
|
28
29
|
|
29
|
-
commands = STANDARD_COMMANDS + [:get_certificate]
|
30
|
+
commands = STANDARD_COMMANDS + [:get_certificate, :renew_certificate]
|
30
31
|
|
31
32
|
assert_same_items commands, c.allowed_commands
|
32
33
|
end
|
@@ -269,6 +270,24 @@ class ClientTest < ActiveSupport::TestCase
|
|
269
270
|
end
|
270
271
|
end
|
271
272
|
|
273
|
+
test 'sends a proper request with nordea renew certificate' do
|
274
|
+
client = Sepa::Client.new(@nordea_renew_certificate_params)
|
275
|
+
response = client.send_request
|
276
|
+
|
277
|
+
assert response.doc.at('cer|getCertificatein')
|
278
|
+
|
279
|
+
errors = []
|
280
|
+
|
281
|
+
Dir.chdir(SCHEMA_PATH) do
|
282
|
+
xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
|
283
|
+
xsd.validate(response.doc).each do |error|
|
284
|
+
errors << error
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
assert errors.empty?, "The following schema validations failed:\n#{errors.join("\n")}"
|
289
|
+
end
|
290
|
+
|
272
291
|
test 'should send proper request with danske download file list' do
|
273
292
|
@danske_generic_params[:command] = :download_file_list
|
274
293
|
client = Sepa::Client.new(@danske_generic_params)
|
@@ -430,5 +449,4 @@ class ClientTest < ActiveSupport::TestCase
|
|
430
449
|
refute client.valid?
|
431
450
|
refute_empty client.errors.messages
|
432
451
|
end
|
433
|
-
|
434
452
|
end
|
data/test/sepa/fixtures.rb
CHANGED
@@ -165,6 +165,70 @@ jo2ekdSDdw8qxKyxj1piv8oYzMd4fCjCpL+WDZtq7mdLErVZ92gH
|
|
165
165
|
}
|
166
166
|
end
|
167
167
|
|
168
|
+
def nordea_renew_certificate_params
|
169
|
+
signing_csr = "-----BEGIN CERTIFICATE REQUEST-----
|
170
|
+
MIIBczCB3QIBADA0MRIwEAYDVQQDEwlEZXZsYWIgT3kxETAPBgNVBAUTCDExMTEx
|
171
|
+
MTExMQswCQYDVQQGEwJGSTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo9wU
|
172
|
+
c2Ys5hSso4nEanbc+RIhL71aS6GBGiWAegXjhlyb6dpwigrZBFPw4u6UZV/Vq7Y7
|
173
|
+
Ku3uBq5rfZwk+lA+c/B634Eu0zWdI+EYfQxKVRrBrmhiGplKEtglHXbNmmMOn07e
|
174
|
+
LPUaB0Ipx/6h/UczJGBINdtcuIbYVu0r7ZfyWbUCAwEAAaAAMA0GCSqGSIb3DQEB
|
175
|
+
BQUAA4GBAIhh2o8mN4Byn+w1jdbhq6lxEXYqdqdh1F6GCajt2lQMUBgYP23I5cS/
|
176
|
+
Z+SYNhu8vbj52cGQPAwEDN6mm5yLpcXu40wYzgWyfStLXV9d/b4hMy9qLMW00Dzb
|
177
|
+
jo2ekdSDdw8qxKyxj1piv8oYzMd4fCjCpL+WDZtq7mdLErVZ92gH
|
178
|
+
-----END CERTIFICATE REQUEST-----"
|
179
|
+
|
180
|
+
own_signing_certificate = "-----BEGIN CERTIFICATE-----
|
181
|
+
MIIDwTCCAqmgAwIBAgIEAX1JuTANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJT
|
182
|
+
RTEeMBwGA1UEChMVTm9yZGVhIEJhbmsgQUIgKHB1YmwpMR8wHQYDVQQDExZOb3Jk
|
183
|
+
ZWEgQ29ycG9yYXRlIENBIDAxMRQwEgYDVQQFEws1MTY0MDYtMDEyMDAeFw0xMzA1
|
184
|
+
MDIxMjI2MzRaFw0xNTA1MDIxMjI2MzRaMEQxCzAJBgNVBAYTAkZJMSAwHgYDVQQD
|
185
|
+
DBdOb3JkZWEgRGVtbyBDZXJ0aWZpY2F0ZTETMBEGA1UEBRMKNTc4MDg2MDIzODCB
|
186
|
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwtFEfAtbJuGzQwwRumZkvYh2BjGY
|
187
|
+
VsAMUeiKtOne3bZSeisfCq+TXqL1gI9LofyeAQ9I/sDm6tL80yrD5iaSUqVm6A73
|
188
|
+
9MsmpW/iyZcVf7ms8xAN51ESUgN6akwZCU9pH62ngJDj2gUsktY0fpsoVsARdrvO
|
189
|
+
Fk0fTSUXKWd6LbcCAwEAAaOCAR0wggEZMAkGA1UdEwQCMAAwEQYDVR0OBAoECEBw
|
190
|
+
2cj7+XMAMBMGA1UdIAQMMAowCAYGKoVwRwEDMBMGA1UdIwQMMAqACEALddbbzwun
|
191
|
+
MDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3Aubm9yZGVh
|
192
|
+
LnNlL0NDQTAxMA4GA1UdDwEB/wQEAwIFoDCBhQYDVR0fBH4wfDB6oHigdoZ0bGRh
|
193
|
+
cCUzQS8vbGRhcC5uYi5zZS9jbiUzRE5vcmRlYStDb3Jwb3JhdGUrQ0ErMDElMkNv
|
194
|
+
JTNETm9yZGVhK0JhbmsrQUIrJTI4cHVibCUyOSUyQ2MlM0RTRSUzRmNlcnRpZmlj
|
195
|
+
YXRlcmV2b2NhdGlvbmxpc3QwDQYJKoZIhvcNAQEFBQADggEBACLUPB1Gmq6286/s
|
196
|
+
ROADo7N+w3eViGJ2fuOTLMy4R0UHOznKZNsuk4zAbS2KycbZsE5py4L8o+IYoaS8
|
197
|
+
8YHtEeckr2oqHnPpz/0Eg7wItj8Ad+AFWJqzbn6Hu/LQhlnl5JEzXzl3eZj9oiiJ
|
198
|
+
1q/2CGXvFomY7S4tgpWRmYULtCK6jode0NhgNnAgOI9uy76pSS16aDoiQWUJqQgV
|
199
|
+
ydowAnqS9h9aQ6gedwbOdtkWmwKMDVXU6aRz9Gvk+JeYJhtpuP3OPNGbbC5L7NVd
|
200
|
+
no+B6AtwxmG3ozd+mPcMeVuz6kKLAmQyIiBSrRNa5OrTkq/CUzxO9WUgTnm/Sri7
|
201
|
+
zReR6mU=
|
202
|
+
-----END CERTIFICATE-----"
|
203
|
+
|
204
|
+
signing_private_key = "-----BEGIN PRIVATE KEY-----
|
205
|
+
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMLRRHwLWybhs0MM
|
206
|
+
EbpmZL2IdgYxmFbADFHoirTp3t22UnorHwqvk16i9YCPS6H8ngEPSP7A5urS/NMq
|
207
|
+
w+YmklKlZugO9/TLJqVv4smXFX+5rPMQDedRElIDempMGQlPaR+tp4CQ49oFLJLW
|
208
|
+
NH6bKFbAEXa7zhZNH00lFylnei23AgMBAAECgYEAqt912/7x4jaQTrxlSELLFVp9
|
209
|
+
eo1BesVTiPwXvPpsGbbyvGjZ/ztkXNs9zZbh1aCGzZMkiR2U7F5GlsiprlIif4cF
|
210
|
+
6Xz7rCjaAs7iDRt9PjhjVuqNGR2I+VIIlbQ9XWFJ3lJFW3v7TIZ8JbLnn0XOFz+Z
|
211
|
+
BBSSGTK1zTNh4TBQtjECQQDe5M3uu9m4RwSw9R6GaDw/IFQZgr0oWSv0WIjRwvwW
|
212
|
+
nFnSX2lbkNAjulP0daGsmn7vxIpqZxPxwcrU4wFqTF5dAkEA38DnbCm3YfogzwLH
|
213
|
+
Nre2hBmGqjWarhtxqtRarrkgnmOd8W0Z1Hb1dSHrliUSVSrINbK5ZdEV15Rpu7VD
|
214
|
+
OePzIwJAPMslS+8alANyyR0iJUC65fDYX1jkZOPldDDNqIDJJxWf/hwd7WaTDpuc
|
215
|
+
mHmZDi3ZX2Y45oqUywSzYNtFoIuR1QJAZYUZuyqmSK77SdGB36K1DfSi9AFEQDC1
|
216
|
+
fwPAbTwTv6mFFPAiYxLiRZXxVPtW+QtjMXH4ymh2V4y/+GnCqbZyLwJBAJQSDAME
|
217
|
+
Sn4Uz7Zjk3UrBIbMYEv0u2mcCypwsb0nGE5/gzDPjGE9cxWW+rXARIs+sNQVClnh
|
218
|
+
45nhdfYxOjgYff0=
|
219
|
+
-----END PRIVATE KEY-----"
|
220
|
+
|
221
|
+
{
|
222
|
+
bank: :nordea,
|
223
|
+
command: :renew_certificate,
|
224
|
+
customer_id: '11111111',
|
225
|
+
environment: 'test',
|
226
|
+
signing_csr: signing_csr,
|
227
|
+
own_signing_certificate: own_signing_certificate,
|
228
|
+
signing_private_key: signing_private_key,
|
229
|
+
}
|
230
|
+
end
|
231
|
+
|
168
232
|
def op_get_certificate_params
|
169
233
|
signing_csr = "-----BEGIN CERTIFICATE REQUEST-----
|
170
234
|
MIICZzCCAU8CAQAwIjELMAkGA1UEBhMCRkkxEzARBgNVBAMTCjEwMDAwMTA1ODMw
|
data/test/sepa/sepa_test.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class TestSepa < ActiveSupport::TestCase
|
4
|
-
|
5
|
-
def test_version_must_be_defined
|
4
|
+
test 'version is defined correctly' do
|
6
5
|
refute_nil Sepa::VERSION
|
7
|
-
assert_equal "1.1.
|
6
|
+
assert_equal "1.1.5", Sepa::VERSION
|
8
7
|
end
|
9
|
-
|
10
8
|
end
|
data/test_client/test_client.rb
CHANGED
@@ -18,8 +18,9 @@ module Testing
|
|
18
18
|
danske_create_cert: Sepa::Client.new(DANSKE_CREATE_CERT_PARAMS),
|
19
19
|
danske_get_bank_cert: Sepa::Client.new(DANSKE_GET_BANK_CERT_PARAMS),
|
20
20
|
nordea_get_certificate: Sepa::Client.new(NORDEA_GET_CERTIFICATE_PARAMS),
|
21
|
+
nordea_renew_certificate: Sepa::Client.new(NORDEA_RENEW_CERTIFICATE_PARAMS),
|
21
22
|
op_get_certificate: Sepa::Client.new(OP_GET_CERTIFICATE_PARAMS),
|
22
|
-
op_get_service_certificates: Sepa::Client.new(OP_GET_SERVICE_CERTIFICATES_PARAMS)
|
23
|
+
op_get_service_certificates: Sepa::Client.new(OP_GET_SERVICE_CERTIFICATES_PARAMS),
|
23
24
|
}
|
24
25
|
|
25
26
|
content_clients.each do |name, client|
|
@@ -28,12 +29,12 @@ module Testing
|
|
28
29
|
if response.response_code == "00"
|
29
30
|
puts "\e[32m#{response.response_code} #{response.response_text}\e[0m #{name}"
|
30
31
|
puts "\e[31m#{response.errors.full_messages}\e[0m" unless response.valid?
|
31
|
-
puts "\n"
|
32
32
|
else
|
33
33
|
puts "\e[31m#{response.response_code} #{response.response_text}\e[0m #{name}"
|
34
|
-
puts "\n"
|
35
34
|
end
|
36
35
|
|
36
|
+
puts "\n"
|
37
|
+
|
37
38
|
File.write "#{ROOT_PATH}/test_client/log/#{name}.log.xml", response.content
|
38
39
|
end
|
39
40
|
|
@@ -43,12 +44,12 @@ module Testing
|
|
43
44
|
if response.response_code == "00"
|
44
45
|
puts "\e[32m#{response.response_code} #{response.response_text}\e[0m #{name}"
|
45
46
|
puts "\e[31m#{response.errors.full_messages}\e[0m" unless response.valid?
|
46
|
-
puts "\n"
|
47
47
|
else
|
48
48
|
puts "\e[31m#{response.response_code} #{response.response_text}\e[0m #{name}"
|
49
|
-
puts "\n"
|
50
49
|
end
|
51
50
|
|
51
|
+
puts "\n"
|
52
|
+
|
52
53
|
contents =
|
53
54
|
"# Bank Encryption Certificate:\n#{response.bank_encryption_certificate}\n\n" \
|
54
55
|
"# Bank Signing Certificate:\n#{response.bank_signing_certificate}\n\n" \
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sepafm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joni Kanerva
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2016-05-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activemodel
|
@@ -60,42 +60,42 @@ dependencies:
|
|
60
60
|
requirements:
|
61
61
|
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: '1.
|
63
|
+
version: '1.12'
|
64
64
|
type: :development
|
65
65
|
prerelease: false
|
66
66
|
version_requirements: !ruby/object:Gem::Requirement
|
67
67
|
requirements:
|
68
68
|
- - "~>"
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: '1.
|
70
|
+
version: '1.12'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: codeclimate-test-reporter
|
73
73
|
requirement: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - "~>"
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version: '0.
|
77
|
+
version: '0.5'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
80
|
version_requirements: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
version: '0.
|
84
|
+
version: '0.5'
|
85
85
|
- !ruby/object:Gem::Dependency
|
86
86
|
name: dotenv
|
87
87
|
requirement: !ruby/object:Gem::Requirement
|
88
88
|
requirements:
|
89
89
|
- - "~>"
|
90
90
|
- !ruby/object:Gem::Version
|
91
|
-
version: '2.
|
91
|
+
version: '2.1'
|
92
92
|
type: :development
|
93
93
|
prerelease: false
|
94
94
|
version_requirements: !ruby/object:Gem::Requirement
|
95
95
|
requirements:
|
96
96
|
- - "~>"
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: '2.
|
98
|
+
version: '2.1'
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: minitest
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,28 +116,28 @@ dependencies:
|
|
116
116
|
requirements:
|
117
117
|
- - "~>"
|
118
118
|
- !ruby/object:Gem::Version
|
119
|
-
version: '
|
119
|
+
version: '11.1'
|
120
120
|
type: :development
|
121
121
|
prerelease: false
|
122
122
|
version_requirements: !ruby/object:Gem::Requirement
|
123
123
|
requirements:
|
124
124
|
- - "~>"
|
125
125
|
- !ruby/object:Gem::Version
|
126
|
-
version: '
|
126
|
+
version: '11.1'
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: rubyntlm
|
129
129
|
requirement: !ruby/object:Gem::Requirement
|
130
130
|
requirements:
|
131
131
|
- - "~>"
|
132
132
|
- !ruby/object:Gem::Version
|
133
|
-
version: '0.
|
133
|
+
version: '0.6'
|
134
134
|
type: :development
|
135
135
|
prerelease: false
|
136
136
|
version_requirements: !ruby/object:Gem::Requirement
|
137
137
|
requirements:
|
138
138
|
- - "~>"
|
139
139
|
- !ruby/object:Gem::Version
|
140
|
-
version: '0.
|
140
|
+
version: '0.6'
|
141
141
|
description: SEPA Financial Messages using Web Services
|
142
142
|
email:
|
143
143
|
- joni@devlab.fi
|
@@ -146,6 +146,7 @@ extensions: []
|
|
146
146
|
extra_rdoc_files: []
|
147
147
|
files:
|
148
148
|
- ".gitignore"
|
149
|
+
- ".rubocop.yml"
|
149
150
|
- ".travis.yml"
|
150
151
|
- ".yardopts"
|
151
152
|
- Gemfile
|
@@ -201,6 +202,7 @@ files:
|
|
201
202
|
- lib/sepa/xml_templates/application_request/encrypted_request.xml
|
202
203
|
- lib/sepa/xml_templates/application_request/get_user_info.xml
|
203
204
|
- lib/sepa/xml_templates/application_request/nordea/get_certificate.xml
|
205
|
+
- lib/sepa/xml_templates/application_request/nordea/renew_certificate.xml
|
204
206
|
- lib/sepa/xml_templates/application_request/op/get_certificate.xml
|
205
207
|
- lib/sepa/xml_templates/application_request/op/get_service_certificates.xml
|
206
208
|
- lib/sepa/xml_templates/application_request/upload_file.xml
|
@@ -211,6 +213,7 @@ files:
|
|
211
213
|
- lib/sepa/xml_templates/soap/get_user_info.xml
|
212
214
|
- lib/sepa/xml_templates/soap/header.xml
|
213
215
|
- lib/sepa/xml_templates/soap/nordea/get_certificate.xml
|
216
|
+
- lib/sepa/xml_templates/soap/nordea/renew_certificate.xml
|
214
217
|
- lib/sepa/xml_templates/soap/op/get_certificate.xml
|
215
218
|
- lib/sepa/xml_templates/soap/op/get_service_certificates.xml
|
216
219
|
- lib/sepa/xml_templates/soap/upload_file.xml
|
@@ -247,6 +250,8 @@ files:
|
|
247
250
|
- test/sepa/banks/nordea/nordea_cert_application_request_test.rb
|
248
251
|
- test/sepa/banks/nordea/nordea_cert_request_soap_builder_test.rb
|
249
252
|
- test/sepa/banks/nordea/nordea_generic_soap_builder_test.rb
|
253
|
+
- test/sepa/banks/nordea/nordea_renew_cert_application_request_test.rb
|
254
|
+
- test/sepa/banks/nordea/nordea_renew_cert_request_soap_builder_test.rb
|
250
255
|
- test/sepa/banks/nordea/nordea_response_test.rb
|
251
256
|
- test/sepa/banks/nordea/responses/df_ktl.xml
|
252
257
|
- test/sepa/banks/nordea/responses/df_tito.xml
|
@@ -257,6 +262,7 @@ files:
|
|
257
262
|
- test/sepa/banks/nordea/responses/invalid/body_altered.xml
|
258
263
|
- test/sepa/banks/nordea/responses/invalid/timestamp_altered.xml
|
259
264
|
- test/sepa/banks/nordea/responses/not_ok_response_code.xml
|
265
|
+
- test/sepa/banks/nordea/responses/rc.xml
|
260
266
|
- test/sepa/banks/nordea/responses/uf.xml
|
261
267
|
- test/sepa/banks/op/op_application_request_test.rb
|
262
268
|
- test/sepa/banks/op/op_cert_application_request_test.rb
|
@@ -291,7 +297,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
291
297
|
version: '0'
|
292
298
|
requirements: []
|
293
299
|
rubyforge_project:
|
294
|
-
rubygems_version: 2.
|
300
|
+
rubygems_version: 2.6.4
|
295
301
|
signing_key:
|
296
302
|
specification_version: 4
|
297
303
|
summary: SEPA Financial Messages
|
@@ -326,6 +332,8 @@ test_files:
|
|
326
332
|
- test/sepa/banks/nordea/nordea_cert_application_request_test.rb
|
327
333
|
- test/sepa/banks/nordea/nordea_cert_request_soap_builder_test.rb
|
328
334
|
- test/sepa/banks/nordea/nordea_generic_soap_builder_test.rb
|
335
|
+
- test/sepa/banks/nordea/nordea_renew_cert_application_request_test.rb
|
336
|
+
- test/sepa/banks/nordea/nordea_renew_cert_request_soap_builder_test.rb
|
329
337
|
- test/sepa/banks/nordea/nordea_response_test.rb
|
330
338
|
- test/sepa/banks/nordea/responses/df_ktl.xml
|
331
339
|
- test/sepa/banks/nordea/responses/df_tito.xml
|
@@ -336,6 +344,7 @@ test_files:
|
|
336
344
|
- test/sepa/banks/nordea/responses/invalid/body_altered.xml
|
337
345
|
- test/sepa/banks/nordea/responses/invalid/timestamp_altered.xml
|
338
346
|
- test/sepa/banks/nordea/responses/not_ok_response_code.xml
|
347
|
+
- test/sepa/banks/nordea/responses/rc.xml
|
339
348
|
- test/sepa/banks/nordea/responses/uf.xml
|
340
349
|
- test/sepa/banks/op/op_application_request_test.rb
|
341
350
|
- test/sepa/banks/op/op_cert_application_request_test.rb
|