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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2e8cd0f6ded38879c6bc80cf8317c1408961a78a
4
- data.tar.gz: 489811f606bd70d7d09e9f4dcc6b9631eb0bf768
3
+ metadata.gz: b95413cb0ca0c02afb68f0e7be64782306fe267e
4
+ data.tar.gz: 7363a519ce10b82d0c3a58bc86dffd0f6d435bad
5
5
  SHA512:
6
- metadata.gz: 8b95273482e6874dccadc4efc346f7da897291302457c6e1e6752f3fbca627317c079a276bcf198f630ba3df433ccb50a5e2da5382e3d6ec9181b7b2749b9fcb
7
- data.tar.gz: b623ef3633002ee4744d42e9680cca7df051ee541784e3bdba61c01b0ac04b86cd0e220debd95953a41905552086c4c45ba5ba5c21497980e61aa6d35336cd7a
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(get_certificate)
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 command == :get_certificate
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 command == :get_certificate
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(command, xml: soap)
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
@@ -1,5 +1,4 @@
1
1
  module Sepa
2
-
3
2
  # The current version of the gem
4
- VERSION = "1.1.4"
3
+ VERSION = "1.1.5".freeze
5
4
  end
@@ -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
@@ -90,6 +90,7 @@ SUPPORTED_COMMANDS =
90
90
  create_certificate
91
91
  get_bank_certificate
92
92
  get_certificate
93
+ renew_certificate
93
94
  get_service_certificates
94
95
  )
95
96
 
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 `:get_service_certificates`.
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.10'
26
- spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4'
27
- spec.add_development_dependency 'dotenv', '~> 2.0'
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', '~> 10.4'
30
- spec.add_development_dependency 'rubyntlm', '~> 0.5'
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
- def setup
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 should be valid' do
69
- assert @dfl.valid?, @dfl.errors.messages
70
- assert @uf.valid?, @uf.errors.messages
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?, @df_ktl.errors.messages
73
- assert @gui.valid?, @gui.errors.messages
74
- assert @gc.valid?, @gc.errors.messages
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 'should fail with improper params' do
78
- a = Sepa::NordeaResponse.new({ response: "Jees", command: 'not'})
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 'should complain if application response is not valid against schema' do
83
- a = Sepa::NordeaResponse.new({ response: "<ar>text</ar>", command: 'notvalid' })
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 should match with correct responses' do
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 should be valid if hashes match and otherwise valid' do
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 should not match with incorrect responses' do
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 should not be valid if hashes dont match' do
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 should verify with correct responses' do
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
- # tito: Electronic account statement
147
- def test_content_can_be_extracted_when_file_type_is_tito
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
- # ktl: Incoming reference payments
152
- def test_content_can_be_extracted_when_file_type_is_ktl
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 do
174
- x509_certificate @gc.own_signing_certificate
175
- end
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>
@@ -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 = nordea_generic_params
10
- @nordea_get_certificate_params = 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 = 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
@@ -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
@@ -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.4", Sepa::VERSION
6
+ assert_equal "1.1.5", Sepa::VERSION
8
7
  end
9
-
10
8
  end
@@ -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
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: 2015-12-14 00:00:00.000000000 Z
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.10'
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.10'
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.4'
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.4'
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.0'
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.0'
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: '10.4'
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: '10.4'
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.5'
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.5'
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.5.0
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