sepafm 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +35 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE +8 -0
- data/README.md +236 -0
- data/Rakefile +10 -0
- data/lib/danske_get_bank_certificate_test.rb +15 -0
- data/lib/sepa/application_request.rb +182 -0
- data/lib/sepa/application_response.rb +123 -0
- data/lib/sepa/client.rb +79 -0
- data/lib/sepa/danske_testing/keys/danske_encryption.crt +24 -0
- data/lib/sepa/filedescriptor.rb +7 -0
- data/lib/sepa/filetypeservice.rb +6 -0
- data/lib/sepa/nordea_testing/keys/CSR.csr +0 -0
- data/lib/sepa/nordea_testing/keys/nordea.crt +27 -0
- data/lib/sepa/nordea_testing/keys/nordea.key +19 -0
- data/lib/sepa/nordea_testing/response/content_053.xml +998 -0
- data/lib/sepa/nordea_testing/response/content_054.xml +1 -0
- data/lib/sepa/nordea_testing/response/download_file_response.xml +14 -0
- data/lib/sepa/nordea_testing/response/download_filelist_response.xml +14 -0
- data/lib/sepa/nordea_testing/response/get_user_info_response.xml +14 -0
- data/lib/sepa/nordea_testing/response/upload_file_response.xml +14 -0
- data/lib/sepa/response.rb +177 -0
- data/lib/sepa/sender_verifier.rb +15 -0
- data/lib/sepa/signature.rb +7 -0
- data/lib/sepa/soap_builder.rb +395 -0
- data/lib/sepa/soap_danske.rb +47 -0
- data/lib/sepa/soap_nordea.rb +68 -0
- data/lib/sepa/userfiletype.rb +16 -0
- data/lib/sepa/version.rb +3 -0
- data/lib/sepa/wsdl/wsdl_danske.xml +234 -0
- data/lib/sepa/wsdl/wsdl_danske_cert.xml +280 -0
- data/lib/sepa/wsdl/wsdl_nordea.xml +234 -0
- data/lib/sepa/wsdl/wsdl_nordea_cert.xml +187 -0
- data/lib/sepa/xml_parser.rb +291 -0
- data/lib/sepa/xml_schemas/application_request.xsd +135 -0
- data/lib/sepa/xml_schemas/application_response.xsd +311 -0
- data/lib/sepa/xml_schemas/cert_application_request.xsd +107 -0
- data/lib/sepa/xml_schemas/danske_pki.xsd +334 -0
- data/lib/sepa/xml_schemas/oasis-200401-wss-wssecurity-secext-1.0.xsd +195 -0
- data/lib/sepa/xml_schemas/oasis-200401-wss-wssecurity-utility-1.0.xsd +108 -0
- data/lib/sepa/xml_schemas/soap.xsd +126 -0
- data/lib/sepa/xml_schemas/wsdl.xml +310 -0
- data/lib/sepa/xml_schemas/xml.xsd +287 -0
- data/lib/sepa/xml_schemas/xmldsig-core-schema.xsd +318 -0
- data/lib/sepa/xml_templates/application_request/create_certificate.xml +10 -0
- data/lib/sepa/xml_templates/application_request/danske_get_bank_certificate.xml +10 -0
- data/lib/sepa/xml_templates/application_request/download_file.xml +32 -0
- data/lib/sepa/xml_templates/application_request/download_file_list.xml +29 -0
- data/lib/sepa/xml_templates/application_request/get_certificate.xml +10 -0
- data/lib/sepa/xml_templates/application_request/get_user_info.xml +26 -0
- data/lib/sepa/xml_templates/application_request/upload_file.xml +29 -0
- data/lib/sepa/xml_templates/soap/create_certificate.xml +15 -0
- data/lib/sepa/xml_templates/soap/danske_get_bank_certificate.xml +14 -0
- data/lib/sepa/xml_templates/soap/download_file.xml +16 -0
- data/lib/sepa/xml_templates/soap/download_file_list.xml +16 -0
- data/lib/sepa/xml_templates/soap/get_certificate.xml +13 -0
- data/lib/sepa/xml_templates/soap/get_user_info.xml +16 -0
- data/lib/sepa/xml_templates/soap/header.xml +37 -0
- data/lib/sepa/xml_templates/soap/upload_file.xml +16 -0
- data/lib/sepa.rb +21 -0
- data/lib/sepa_client_testing_mika.rb +32 -0
- data/lib/sepa_client_testing_tiere.rb +80 -0
- data/sepa.gemspec +29 -0
- data/test/sepa/application_request_test.rb +423 -0
- data/test/sepa/application_response_test.rb +238 -0
- data/test/sepa/cert_application_request_test.rb +99 -0
- data/test/sepa/client_test.rb +425 -0
- data/test/sepa/danske_test_keys/danskeroot.pem +25 -0
- data/test/sepa/danske_test_keys/encryption_pkcs.csr +0 -0
- data/test/sepa/danske_test_keys/signing_key.pem +27 -0
- data/test/sepa/danske_test_keys/signing_pkcs.csr +0 -0
- data/test/sepa/nordea_cert_request_soap_builder_test.rb +112 -0
- data/test/sepa/nordea_generic_soap_builder_test.rb +427 -0
- data/test/sepa/nordea_test_keys/nordea.crt +27 -0
- data/test/sepa/nordea_test_keys/nordea.key +19 -0
- data/test/sepa/nordea_test_keys/root_cert.cer +0 -0
- data/test/sepa/nordea_test_keys/testcert.csr +0 -0
- data/test/sepa/response_test.rb +269 -0
- data/test/sepa/sepa_test.rb +20 -0
- data/test/sepa/test_files/invalid.wsdl +1 -0
- data/test/sepa/test_files/test_responses/df.xml +20 -0
- data/test/sepa/test_files/test_responses/dfl.xml +20 -0
- data/test/sepa/test_files/test_responses/gui.xml +20 -0
- data/test/sepa/test_files/test_responses/uf.xml +20 -0
- data/test/sepa/user_file_type_test.rb +21 -0
- data/test/sepa/xml_parser_test.rb +73 -0
- data/test/test_helper.rb +9 -0
- metadata +256 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
require File.expand_path('../../test_helper.rb', __FILE__)
|
|
2
|
+
|
|
3
|
+
class CertApplicationRequestTest < MiniTest::Test
|
|
4
|
+
def setup
|
|
5
|
+
@schemapath = File.expand_path('../../../lib/sepa/xml_schemas',__FILE__)
|
|
6
|
+
@templatepath = File.expand_path('../../../lib/sepa/xml_templates/application_request',__FILE__)
|
|
7
|
+
@keyspath = File.expand_path('../nordea_test_keys', __FILE__)
|
|
8
|
+
|
|
9
|
+
csrplain = "-----BEGIN CERTIFICATE REQUEST-----
|
|
10
|
+
MIIBczCB3QIBADA0MRIwEAYDVQQDEwlEZXZsYWIgT3kxETAPBgNVBAUTCDExMTEx
|
|
11
|
+
MTExMQswCQYDVQQGEwJGSTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo9wU
|
|
12
|
+
c2Ys5hSso4nEanbc+RIhL71aS6GBGiWAegXjhlyb6dpwigrZBFPw4u6UZV/Vq7Y7
|
|
13
|
+
Ku3uBq5rfZwk+lA+c/B634Eu0zWdI+EYfQxKVRrBrmhiGplKEtglHXbNmmMOn07e
|
|
14
|
+
LPUaB0Ipx/6h/UczJGBINdtcuIbYVu0r7ZfyWbUCAwEAAaAAMA0GCSqGSIb3DQEB
|
|
15
|
+
BQUAA4GBAIhh2o8mN4Byn+w1jdbhq6lxEXYqdqdh1F6GCajt2lQMUBgYP23I5cS/
|
|
16
|
+
Z+SYNhu8vbj52cGQPAwEDN6mm5yLpcXu40wYzgWyfStLXV9d/b4hMy9qLMW00Dzb
|
|
17
|
+
jo2ekdSDdw8qxKyxj1piv8oYzMd4fCjCpL+WDZtq7mdLErVZ92gH
|
|
18
|
+
-----END CERTIFICATE REQUEST-----"
|
|
19
|
+
|
|
20
|
+
# The params hash is populated with the data that is needed for gem to function
|
|
21
|
+
@params = {
|
|
22
|
+
bank: :nordea,
|
|
23
|
+
command: :get_certificate,
|
|
24
|
+
customer_id: '11111111',
|
|
25
|
+
environment: 'TEST',
|
|
26
|
+
csr_plain: csrplain,
|
|
27
|
+
pin: '1234567890',
|
|
28
|
+
# Selected service (For testing: service, For real: ISSUER)
|
|
29
|
+
service: 'service'
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@ar_cert = Sepa::SoapBuilder.new(@params).get_ar_as_base64
|
|
33
|
+
@xml = Nokogiri::XML(Base64.decode64(@ar_cert))
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_that_xml_template_is_unmodified
|
|
37
|
+
sha1 = OpenSSL::Digest::SHA1.new
|
|
38
|
+
|
|
39
|
+
get_certificate_template = File.read("#{@templatepath}/get_certificate.xml")
|
|
40
|
+
|
|
41
|
+
digest = Base64.encode64(sha1.digest(get_certificate_template)).strip
|
|
42
|
+
|
|
43
|
+
assert_equal digest, "mpoY4dd4XW5HskkoRxqtVEM+Tts="
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_schemas_are_unmodified
|
|
47
|
+
sha1 = OpenSSL::Digest::SHA1.new
|
|
48
|
+
|
|
49
|
+
cert_schema = File.read(
|
|
50
|
+
"#{@schemapath}/cert_application_request.xsd")
|
|
51
|
+
|
|
52
|
+
cert_digest = sha1.digest(cert_schema)
|
|
53
|
+
|
|
54
|
+
assert_equal Base64.encode64(cert_digest).strip,"sFwy9Tj+cERTdcmaGhm8WpmJBH4="
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_should_initialize_with_only_get_certificate_params
|
|
58
|
+
assert Sepa::ApplicationRequest.new(@params)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_should_get_argument_errors_unless_command_is_get_certificate
|
|
62
|
+
assert_raises(ArgumentError) do
|
|
63
|
+
@params[:command] = :wrong_command
|
|
64
|
+
ar = Sepa::ApplicationRequest.new(@params)
|
|
65
|
+
xml = ar.get_as_base64
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_should_have_customer_id_set
|
|
70
|
+
assert_equal @xml.at_css("CustomerId").content, @params[:customer_id]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_should_have_timestamp_set_properly
|
|
74
|
+
timestamp = Time.strptime(@xml.at_css("Timestamp").content,
|
|
75
|
+
'%Y-%m-%dT%H:%M:%S%z')
|
|
76
|
+
|
|
77
|
+
assert timestamp <= Time.now && timestamp > (Time.now - 60),
|
|
78
|
+
"Timestamp was not set correctly"
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_should_have_command_set_when_get_certificate
|
|
82
|
+
assert_equal @xml.at_css("Command").content, "GetCertificate"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_should_have_environment_set
|
|
86
|
+
assert_equal @xml.at_css("Environment").content, @params[:environment]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_should_have_service_set
|
|
90
|
+
assert_equal @xml.at_css("Service").content, @params[:service]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def test_should_validate_against_schema
|
|
94
|
+
Dir.chdir(@schemapath) do
|
|
95
|
+
xsd = Nokogiri::XML::Schema(IO.read('cert_application_request.xsd'))
|
|
96
|
+
assert xsd.valid?(@xml)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
require File.expand_path('../../test_helper.rb', __FILE__)
|
|
2
|
+
|
|
3
|
+
class ClientTest < MiniTest::Test
|
|
4
|
+
def setup
|
|
5
|
+
@schemas_path = File.expand_path('../../../lib/sepa/xml_schemas',__FILE__)
|
|
6
|
+
|
|
7
|
+
wsdl_path = File.expand_path('../../../lib/sepa/wsdl/wsdl_nordea.xml',
|
|
8
|
+
__FILE__)
|
|
9
|
+
|
|
10
|
+
keys_path = File.expand_path('../nordea_test_keys', __FILE__)
|
|
11
|
+
|
|
12
|
+
danske_keys_path = File.expand_path('../danske_test_keys', __FILE__)
|
|
13
|
+
|
|
14
|
+
private_key = OpenSSL::PKey::RSA.new File.read "#{keys_path}/nordea.key"
|
|
15
|
+
cert = OpenSSL::X509::Certificate.new File.read "#{keys_path}/nordea.crt"
|
|
16
|
+
certplain = "-----BEGIN CERTIFICATE-----
|
|
17
|
+
MIIDwTCCAqmgAwIBAgIEAX1JuTANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJT
|
|
18
|
+
RTEeMBwGA1UEChMVTm9yZGVhIEJhbmsgQUIgKHB1YmwpMR8wHQYDVQQDExZOb3Jk
|
|
19
|
+
ZWEgQ29ycG9yYXRlIENBIDAxMRQwEgYDVQQFEws1MTY0MDYtMDEyMDAeFw0xMzA1
|
|
20
|
+
MDIxMjI2MzRaFw0xNTA1MDIxMjI2MzRaMEQxCzAJBgNVBAYTAkZJMSAwHgYDVQQD
|
|
21
|
+
DBdOb3JkZWEgRGVtbyBDZXJ0aWZpY2F0ZTETMBEGA1UEBRMKNTc4MDg2MDIzODCB
|
|
22
|
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwtFEfAtbJuGzQwwRumZkvYh2BjGY
|
|
23
|
+
VsAMUeiKtOne3bZSeisfCq+TXqL1gI9LofyeAQ9I/sDm6tL80yrD5iaSUqVm6A73
|
|
24
|
+
9MsmpW/iyZcVf7ms8xAN51ESUgN6akwZCU9pH62ngJDj2gUsktY0fpsoVsARdrvO
|
|
25
|
+
Fk0fTSUXKWd6LbcCAwEAAaOCAR0wggEZMAkGA1UdEwQCMAAwEQYDVR0OBAoECEBw
|
|
26
|
+
2cj7+XMAMBMGA1UdIAQMMAowCAYGKoVwRwEDMBMGA1UdIwQMMAqACEALddbbzwun
|
|
27
|
+
MDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3Aubm9yZGVh
|
|
28
|
+
LnNlL0NDQTAxMA4GA1UdDwEB/wQEAwIFoDCBhQYDVR0fBH4wfDB6oHigdoZ0bGRh
|
|
29
|
+
cCUzQS8vbGRhcC5uYi5zZS9jbiUzRE5vcmRlYStDb3Jwb3JhdGUrQ0ErMDElMkNv
|
|
30
|
+
JTNETm9yZGVhK0JhbmsrQUIrJTI4cHVibCUyOSUyQ2MlM0RTRSUzRmNlcnRpZmlj
|
|
31
|
+
YXRlcmV2b2NhdGlvbmxpc3QwDQYJKoZIhvcNAQEFBQADggEBACLUPB1Gmq6286/s
|
|
32
|
+
ROADo7N+w3eViGJ2fuOTLMy4R0UHOznKZNsuk4zAbS2KycbZsE5py4L8o+IYoaS8
|
|
33
|
+
8YHtEeckr2oqHnPpz/0Eg7wItj8Ad+AFWJqzbn6Hu/LQhlnl5JEzXzl3eZj9oiiJ
|
|
34
|
+
1q/2CGXvFomY7S4tgpWRmYULtCK6jode0NhgNnAgOI9uy76pSS16aDoiQWUJqQgV
|
|
35
|
+
ydowAnqS9h9aQ6gedwbOdtkWmwKMDVXU6aRz9Gvk+JeYJhtpuP3OPNGbbC5L7NVd
|
|
36
|
+
no+B6AtwxmG3ozd+mPcMeVuz6kKLAmQyIiBSrRNa5OrTkq/CUzxO9WUgTnm/Sri7
|
|
37
|
+
zReR6mU=
|
|
38
|
+
-----END CERTIFICATE-----"
|
|
39
|
+
pkeyplain = "-----BEGIN PRIVATE KEY-----
|
|
40
|
+
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMLRRHwLWybhs0MM
|
|
41
|
+
EbpmZL2IdgYxmFbADFHoirTp3t22UnorHwqvk16i9YCPS6H8ngEPSP7A5urS/NMq
|
|
42
|
+
w+YmklKlZugO9/TLJqVv4smXFX+5rPMQDedRElIDempMGQlPaR+tp4CQ49oFLJLW
|
|
43
|
+
NH6bKFbAEXa7zhZNH00lFylnei23AgMBAAECgYEAqt912/7x4jaQTrxlSELLFVp9
|
|
44
|
+
eo1BesVTiPwXvPpsGbbyvGjZ/ztkXNs9zZbh1aCGzZMkiR2U7F5GlsiprlIif4cF
|
|
45
|
+
6Xz7rCjaAs7iDRt9PjhjVuqNGR2I+VIIlbQ9XWFJ3lJFW3v7TIZ8JbLnn0XOFz+Z
|
|
46
|
+
BBSSGTK1zTNh4TBQtjECQQDe5M3uu9m4RwSw9R6GaDw/IFQZgr0oWSv0WIjRwvwW
|
|
47
|
+
nFnSX2lbkNAjulP0daGsmn7vxIpqZxPxwcrU4wFqTF5dAkEA38DnbCm3YfogzwLH
|
|
48
|
+
Nre2hBmGqjWarhtxqtRarrkgnmOd8W0Z1Hb1dSHrliUSVSrINbK5ZdEV15Rpu7VD
|
|
49
|
+
OePzIwJAPMslS+8alANyyR0iJUC65fDYX1jkZOPldDDNqIDJJxWf/hwd7WaTDpuc
|
|
50
|
+
mHmZDi3ZX2Y45oqUywSzYNtFoIuR1QJAZYUZuyqmSK77SdGB36K1DfSi9AFEQDC1
|
|
51
|
+
fwPAbTwTv6mFFPAiYxLiRZXxVPtW+QtjMXH4ymh2V4y/+GnCqbZyLwJBAJQSDAME
|
|
52
|
+
Sn4Uz7Zjk3UrBIbMYEv0u2mcCypwsb0nGE5/gzDPjGE9cxWW+rXARIs+sNQVClnh
|
|
53
|
+
45nhdfYxOjgYff0=
|
|
54
|
+
-----END PRIVATE KEY-----"
|
|
55
|
+
csrplain = "-----BEGIN CERTIFICATE REQUEST-----
|
|
56
|
+
MIIBczCB3QIBADA0MRIwEAYDVQQDEwlEZXZsYWIgT3kxETAPBgNVBAUTCDExMTEx
|
|
57
|
+
MTExMQswCQYDVQQGEwJGSTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo9wU
|
|
58
|
+
c2Ys5hSso4nEanbc+RIhL71aS6GBGiWAegXjhlyb6dpwigrZBFPw4u6UZV/Vq7Y7
|
|
59
|
+
Ku3uBq5rfZwk+lA+c/B634Eu0zWdI+EYfQxKVRrBrmhiGplKEtglHXbNmmMOn07e
|
|
60
|
+
LPUaB0Ipx/6h/UczJGBINdtcuIbYVu0r7ZfyWbUCAwEAAaAAMA0GCSqGSIb3DQEB
|
|
61
|
+
BQUAA4GBAIhh2o8mN4Byn+w1jdbhq6lxEXYqdqdh1F6GCajt2lQMUBgYP23I5cS/
|
|
62
|
+
Z+SYNhu8vbj52cGQPAwEDN6mm5yLpcXu40wYzgWyfStLXV9d/b4hMy9qLMW00Dzb
|
|
63
|
+
jo2ekdSDdw8qxKyxj1piv8oYzMd4fCjCpL+WDZtq7mdLErVZ92gH
|
|
64
|
+
-----END CERTIFICATE REQUEST-----"
|
|
65
|
+
@params = {
|
|
66
|
+
bank: :nordea,
|
|
67
|
+
private_key_plain: pkeyplain,
|
|
68
|
+
cert_plain: certplain,
|
|
69
|
+
command: :get_user_info,
|
|
70
|
+
customer_id: '11111111',
|
|
71
|
+
environment: 'PRODUCTION',
|
|
72
|
+
status: 'NEW',
|
|
73
|
+
target_id: '11111111A1',
|
|
74
|
+
language: 'FI',
|
|
75
|
+
file_type: 'TITO',
|
|
76
|
+
content: Base64.encode64("Kurppa"),
|
|
77
|
+
file_reference: "11111111A12006030329501800000014"
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@certparams = {
|
|
81
|
+
bank: :nordea,
|
|
82
|
+
command: :get_certificate,
|
|
83
|
+
customer_id: '11111111',
|
|
84
|
+
environment: 'TEST',
|
|
85
|
+
pin: '1234567890',
|
|
86
|
+
csr_plain: csrplain,
|
|
87
|
+
service: 'service'
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
encryptpkcsplain = "-----BEGIN CERTIFICATE REQUEST-----
|
|
91
|
+
MIICZjCCAU4CAQAwITESMBAGA1UEAxMJRGV2bGFiIE95MQswCQYDVQQGEwJGSTCC
|
|
92
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKN2ceFGw+i4wAyg6WApu7/h
|
|
93
|
+
5Rpl8tp+QRX1eLbmftYpf6bbzj+JwspWNST/s8p8enGBRrK+HkNT8ayj7ZSubJwx
|
|
94
|
+
g/bAn+ewxk64A984hiMqd0GMJgwFcWhGpHhwH9QiqA5CAQYXY0T1fs2UXf1mIJ1Z
|
|
95
|
+
675yGRhU03ZyQgyIjhdTmXLznCluSLeIGypXPi7DCfHP5w0a6Dfpy31fowqi7n9A
|
|
96
|
+
gyoQ6JZuuXHAdEoQpNmxgpp9gBwxs9U+yBmDaBAvvB0DY3+0kMRFCn2oyCuQw5C4
|
|
97
|
+
mRo+0eOO+kA8Svd2bLXmcbe6js/5SgjvkHvvCgIqi9J6aPiJo0XCrLsB6BjQbpsC
|
|
98
|
+
AwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQAXepnKWQWTCiTKXhuT+e52n0/x5YHd
|
|
99
|
+
bLB8nelPpyMf0hiNeoUdzNTZoMM2OArtzvOhh5HWZ32GbjR/RDCy+kMfAGDm/tlB
|
|
100
|
+
/4uJNcDotMFF+MUsEAHVrAUpZh5n00mBeYDl7m098VnAEayxUxJHbQMYY1J1QdTl
|
|
101
|
+
M62i5c2v3sNJlDlT4GidRtoGW9KAID2oCdOL94krWpwLAZDP4wLwG7ACCbOx3rST
|
|
102
|
+
f9gDE6jFUn7ONuiiYvOBAqjwckDpyOH+vx3WkZH4cwdcp4KVeLnjJzlJZaw7yTIo
|
|
103
|
+
z8BKfQ26LmOO/S4CFe3Vzq6FRNKl3D4nvCu06WoMi5tAAEi57tk05B32
|
|
104
|
+
-----END CERTIFICATE REQUEST-----"
|
|
105
|
+
signingpkcsplain = "-----BEGIN CERTIFICATE REQUEST-----
|
|
106
|
+
MIICZjCCAU4CAQAwITESMBAGA1UEAxMJRGV2bGFiIE95MQswCQYDVQQGEwJGSTCC
|
|
107
|
+
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3yym5CztvmJCxbzhy6tOph
|
|
108
|
+
wzamimFKlJt88cG0VLzwAh0EiAhFz9Yj/39n1HywL+4xOLizIAup794MzLBDs3TH
|
|
109
|
+
OAZe7iZSrb5y4PMh5l9jwhXLPu7/tkqswcvMtstI5HZGqEqdw0kAT0BuKJBXdo+e
|
|
110
|
+
8nOCVsiMPhrtk5ovLY54vWMzwfAQJeBkxbr1LH6Ib4k7IlsysKpQt7+VqQcTc/lL
|
|
111
|
+
IC+MnVfmKDA0qTXFKQsZC2hO353cu9ZfjdrnKpo5gutcPJRu+TBNS8HJNkI+3pNM
|
|
112
|
+
MTGPvweeY461tzgOpeSzL+FkmRFSWksOmPol1Q4DDZryYHaLDv7q6lELNDxEwQ8C
|
|
113
|
+
AwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQAIw3tbNWTsayBm4bUzugNKCFreayTo
|
|
114
|
+
5npG3JUiA+n5jIdj3egqSXwxkXSJ5tdXcv0xqsFkV0wq3l5wEaeG7Jd7vLD6FX2y
|
|
115
|
+
MbtE49PHHcLwcY0U94qBj6qEleRwebGfyKwpMb2M90cAf3V/5IjZUJfvYyjOBQUT
|
|
116
|
+
H6Xhm3JG9g7AScHhFcM8r6PhmzcL1FubYBPTcUBuotDBYc4lbql7sbww/u8OyWvl
|
|
117
|
+
aIFd+oiwXGSYB7L8Fqg469jeIf0QtOZUtUEGOJWjM4JjTy+NnVmsj0jszMbuBZBW
|
|
118
|
+
7wOrp+GMBUZ9/vaY/zr7nvJTfvKz7CJQOgADeh/0imZqhIYfVKIpJxR5
|
|
119
|
+
-----END CERTIFICATE REQUEST-----"
|
|
120
|
+
danskebankencryptplain = "-----BEGIN CERTIFICATE-----
|
|
121
|
+
MIIEATCCAumgAwIBAgIFAQjv8bMwDQYJKoZIhvcNAQELBQAwgZgxEDAOBgNVBAMT
|
|
122
|
+
B0RCR1JPT1QxCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYD
|
|
123
|
+
VQQIEwdEZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UE
|
|
124
|
+
CxMRRGFuc2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MTExMDAwMjAe
|
|
125
|
+
Fw0xMjA4MDEwMDAwMDBaFw0xNDEwMzEwMDAwMDBaMIGYMRAwDgYDVQQDEwdEUENS
|
|
126
|
+
WVBUMQswCQYDVQQGEwJESzETMBEGA1UEBxMKQ29wZW5oYWdlbjEQMA4GA1UECBMH
|
|
127
|
+
RGVubWFyazEaMBgGA1UEChMRRGFuc2tlIEJhbmsgR3JvdXAxGjAYBgNVBAsTEURh
|
|
128
|
+
bnNrZSBCYW5rIEdyb3VwMRgwFgYDVQQFEw82MTEyNjIyODQ5MTAwMDMwggEgMA0G
|
|
129
|
+
CSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQC/kHrOvHOueBsit9drxIHpaD7mXINy
|
|
130
|
+
pXS/l9PbbOZ0lZKVEfW9gtG8xk9XggsPXHJMF/PXpG6mveXvPu9WW/XpryAUqGfv
|
|
131
|
+
YsC7Px3ixaJb2EMOL+2mJYd0v5HKg5RuYkQ82k3K01hMNEGYs0OotjNVAimQcTLt
|
|
132
|
+
VPDGBjK5BUAiwady9LpI6afo7roJWnRmsvSvinDgBqswnfCvUfSfM8cZyhnLLC2u
|
|
133
|
+
j1kBHAD/5xpllmS3aq1M8LqFkBYcCE5PdPmFWhGUumZ/Y5qLjDgcPMAPvUaKLqOs
|
|
134
|
+
h22jvPCZ0pm17eV0bSQzWe5e0zkgCYAepuFRazSlkJQYBdS47Mp68dY5AgEDo1Iw
|
|
135
|
+
UDAfBgNVHSMEGDAWgBSE+uW/3pFJZt/FilLDs7ezIBzHbTAdBgNVHQ4EFgQUP6wH
|
|
136
|
+
VNOmznu212c08M3oeYjeXW4wDgYDVR0PAQH/BAQDAgQwMA0GCSqGSIb3DQEBCwUA
|
|
137
|
+
A4IBAQAvJBfPug+ixGL/zWUnKMweV80atZXMjHJEn4mOE+iUkCNONLImMMt6MXJy
|
|
138
|
+
snJViL1gL5xMrka6A62PLLsVkl79kxDDbzXMPfGt5/mB9L7CMpyzaID0acDii3rs
|
|
139
|
+
ZwT3Wxpnate6wowN4zpmXgpCpTDGbxjuVRiOArsjQblerhfxnD/UAieZ1IWozIAN
|
|
140
|
+
s6SVms/TuOB+bODUr06ITxBkDJhizOJxjsXRIAtwZvvrH4qGjJz5qFcPb3nz4Txw
|
|
141
|
+
swU8X6yvbtqF+q4aAKPA6ZydnGZFQSoSzNJtcF28T1ItxEHN3+xyQqXpTgFviiuL
|
|
142
|
+
277LaAl9YUFFnSgeh7GiFitWJPfD
|
|
143
|
+
-----END CERTIFICATE-----"
|
|
144
|
+
@danskecertparams = {
|
|
145
|
+
bank: :danske,
|
|
146
|
+
command: :create_certificate,
|
|
147
|
+
customer_id: 'ABC123',
|
|
148
|
+
environment: 'customertest',
|
|
149
|
+
key_generator_type: 'software',
|
|
150
|
+
encryption_cert_pkcs10_plain: encryptpkcsplain,
|
|
151
|
+
signing_cert_pkcs10_plain: signingpkcsplain,
|
|
152
|
+
cert_plain: danskebankencryptplain,
|
|
153
|
+
pin: '1234'
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
observer = Class.new {
|
|
157
|
+
def notify(operation_name, builder, globals, locals)
|
|
158
|
+
@operation_name = operation_name
|
|
159
|
+
@builder = builder
|
|
160
|
+
@globals = globals
|
|
161
|
+
@locals = locals
|
|
162
|
+
|
|
163
|
+
HTTPI::Response.new(200,
|
|
164
|
+
{ "Reponse is actually" => "the request, w0000t" },
|
|
165
|
+
locals[:xml])
|
|
166
|
+
end
|
|
167
|
+
}.new
|
|
168
|
+
|
|
169
|
+
Savon.observers << observer
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def test_should_get_error_if_key_gen_type_missing
|
|
173
|
+
@danskecertparams.delete(:key_generator_type)
|
|
174
|
+
|
|
175
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def test_should_raise_error_with_wrong_bank
|
|
179
|
+
@params[:bank] = :royal_bank_of_skopje
|
|
180
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def test_should_raise_error_with_wrong_command_when_bank_doesnt_support_the_command
|
|
184
|
+
@certparams[:bank] = :danske
|
|
185
|
+
@certparams[:command] = :get_certificate
|
|
186
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@certparams) }
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def test_should_not_initialize_with_unsupported_danske_params
|
|
190
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_should_initialize_with_proper_params
|
|
194
|
+
assert Sepa::Client.new(@params)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
def test_should_give_proper_error_if_initialized_with_something_not_hash_like
|
|
198
|
+
not_hashes = ['Merihevonsenkenka', 1, :verhokangas]
|
|
199
|
+
|
|
200
|
+
not_hashes.each do |not_hash|
|
|
201
|
+
assert_raises(ArgumentError) { Sepa::Client.new(not_hash) }
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
def test_should_raise_error_if_private_key_plain_is_wrong
|
|
206
|
+
wrong_pks = ['Im not a key', :leppakerttu, nil]
|
|
207
|
+
|
|
208
|
+
wrong_pks.each do |wrong_pk|
|
|
209
|
+
@params[:private_key_plain] = wrong_pk
|
|
210
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def test_should_raise_error_if_cert_plain_file_is_wrong
|
|
215
|
+
wrong_certs = ['Im not a cert', 99, :leppakerttu, nil]
|
|
216
|
+
|
|
217
|
+
wrong_certs.each do |wrong_cert|
|
|
218
|
+
@params[:cert_plain] = wrong_cert
|
|
219
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def test_should_raise_error_if_command_wrong_or_missing
|
|
224
|
+
wrong_commands = ['string is not a command', 1337, :symbol_but_not_proper,
|
|
225
|
+
nil]
|
|
226
|
+
|
|
227
|
+
wrong_commands.each do |wrong_command|
|
|
228
|
+
@params[:command] = wrong_command
|
|
229
|
+
|
|
230
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def test_should_raise_error_if_customer_id_wrong_or_missing
|
|
235
|
+
wrong_ids = ["I'm a way too long a string and probably also not valid", nil]
|
|
236
|
+
|
|
237
|
+
wrong_ids.each do |wrong_id|
|
|
238
|
+
@params[:customer_id] = wrong_id
|
|
239
|
+
|
|
240
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def test_should_raise_error_if_environment_wrong_or_missing
|
|
245
|
+
wrong_envs = ["not proper", 5, :protuction, nil]
|
|
246
|
+
|
|
247
|
+
wrong_envs.each do |wrong_env|
|
|
248
|
+
@params[:environment] = wrong_env
|
|
249
|
+
|
|
250
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def test_should_raise_error_if_status_wrong
|
|
255
|
+
commands = [:download_file, :download_file_list]
|
|
256
|
+
|
|
257
|
+
commands.each do |command|
|
|
258
|
+
@params[:command] = command
|
|
259
|
+
|
|
260
|
+
wrong_statuses = ["ready", 'steady', 5, :nipsu]
|
|
261
|
+
|
|
262
|
+
wrong_statuses.each do |wrong_status|
|
|
263
|
+
@params[:status] = wrong_status
|
|
264
|
+
|
|
265
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
266
|
+
end
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def test_should_raise_error_if_target_id_wrong
|
|
271
|
+
commands = [:download_file, :download_file_list, :upload_file]
|
|
272
|
+
|
|
273
|
+
commands.each do |command|
|
|
274
|
+
@params[:command] = command
|
|
275
|
+
|
|
276
|
+
wrong_ids = ["ready"*81, nil]
|
|
277
|
+
|
|
278
|
+
wrong_ids.each do |wrong_id|
|
|
279
|
+
@params[:target_id] = wrong_id
|
|
280
|
+
|
|
281
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
def test_should_raise_error_if_language_wrong
|
|
287
|
+
wrong_langs = ["Joo", 7, :protuction]
|
|
288
|
+
|
|
289
|
+
wrong_langs.each do |wrong_lang|
|
|
290
|
+
@params[:language] = wrong_lang
|
|
291
|
+
|
|
292
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def test_should_raise_error_if_file_type_wrong_or_missing
|
|
297
|
+
commands = [:download_file, :download_file_list, :upload_file]
|
|
298
|
+
|
|
299
|
+
commands.each do |command|
|
|
300
|
+
@params[:command] = command
|
|
301
|
+
|
|
302
|
+
wrong_types = ["kalle"*41, nil]
|
|
303
|
+
|
|
304
|
+
wrong_types.each do |wrong_type|
|
|
305
|
+
@params[:file_type] = wrong_type
|
|
306
|
+
|
|
307
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
def test_should_raise_error_if_content_missing
|
|
313
|
+
@params[:command] = :upload_file
|
|
314
|
+
@params.delete(:content)
|
|
315
|
+
|
|
316
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@params) }
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# The response from savon will be the request to check that a proper request
|
|
320
|
+
# was made in the following four tests
|
|
321
|
+
def test_should_send_proper_request_with_get_user_info
|
|
322
|
+
client = Sepa::Client.new(@params)
|
|
323
|
+
response = client.send
|
|
324
|
+
|
|
325
|
+
assert_equal response.body.keys[0], :get_user_infoin
|
|
326
|
+
|
|
327
|
+
Dir.chdir(@schemas_path) do
|
|
328
|
+
xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
|
|
329
|
+
assert xsd.valid?(Nokogiri::XML(response.to_xml))
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
def test_should_send_proper_request_with_download_file_list
|
|
334
|
+
@params[:command] = :download_file_list
|
|
335
|
+
client = Sepa::Client.new(@params)
|
|
336
|
+
response = client.send
|
|
337
|
+
|
|
338
|
+
assert_equal response.body.keys[0], :download_file_listin
|
|
339
|
+
|
|
340
|
+
Dir.chdir(@schemas_path) do
|
|
341
|
+
xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
|
|
342
|
+
assert xsd.valid?(Nokogiri::XML(response.to_xml))
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
|
|
346
|
+
def test_should_send_proper_request_with_download_file
|
|
347
|
+
@params[:command] = :download_file
|
|
348
|
+
client = Sepa::Client.new(@params)
|
|
349
|
+
response = client.send
|
|
350
|
+
|
|
351
|
+
assert_equal response.body.keys[0], :download_filein
|
|
352
|
+
|
|
353
|
+
Dir.chdir(@schemas_path) do
|
|
354
|
+
xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
|
|
355
|
+
assert xsd.valid?(Nokogiri::XML(response.to_xml))
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
def test_should_send_proper_request_with_upload_file
|
|
360
|
+
@params[:command] = :upload_file
|
|
361
|
+
client = Sepa::Client.new(@params)
|
|
362
|
+
response = client.send
|
|
363
|
+
|
|
364
|
+
assert_equal response.body.keys[0], :upload_filein
|
|
365
|
+
|
|
366
|
+
Dir.chdir(@schemas_path) do
|
|
367
|
+
xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
|
|
368
|
+
assert xsd.valid?(Nokogiri::XML(response.to_xml))
|
|
369
|
+
end
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
def test_should_initialize_with_proper_cert_params
|
|
373
|
+
assert Sepa::Client.new(@certparams)
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
def test_should_send_proper_request_with_get_certificate
|
|
377
|
+
client = Sepa::Client.new(@certparams)
|
|
378
|
+
response = client.send
|
|
379
|
+
|
|
380
|
+
assert_equal response.body.keys[0], :get_certificatein
|
|
381
|
+
|
|
382
|
+
Dir.chdir(@schemas_path) do
|
|
383
|
+
xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
|
|
384
|
+
assert xsd.valid?(Nokogiri::XML(response.to_xml))
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
def test_should_raise_error_if_cert_service_missing
|
|
389
|
+
@certparams[:command] = :get_certificate
|
|
390
|
+
@certparams.delete(:service)
|
|
391
|
+
|
|
392
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@certparams) }
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
def test_should_raise_error_if_signing_pkcs_plain_and_path_missing_with_create_certificate
|
|
396
|
+
@danskecertparams[:command] = :create_certificate
|
|
397
|
+
@danskecertparams.delete(:signing_cert_pkcs10_plain)
|
|
398
|
+
@danskecertparams.delete(:signing_cert_pkcs10_path)
|
|
399
|
+
|
|
400
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
def test_should_raise_error_if_encryption_pkcs_plain_and_path_missing_with_create_certificate
|
|
404
|
+
@danskecertparams[:command] = :create_certificate
|
|
405
|
+
@danskecertparams.delete(:encryption_cert_pkcs10_plain)
|
|
406
|
+
@danskecertparams.delete(:encryption_cert_pkcs10_path)
|
|
407
|
+
|
|
408
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
|
|
409
|
+
end
|
|
410
|
+
|
|
411
|
+
def test_should_raise_error_if_pin_missing_with_create_certificate
|
|
412
|
+
@danskecertparams[:command] = :create_certificate
|
|
413
|
+
@danskecertparams.delete(:pin)
|
|
414
|
+
|
|
415
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
|
|
416
|
+
end
|
|
417
|
+
|
|
418
|
+
def test_should_raise_error_if_cert_plain_and_cert_path_missing_with_create_certificate
|
|
419
|
+
@danskecertparams[:command] = :create_certificate
|
|
420
|
+
@danskecertparams.delete(:cert_plain)
|
|
421
|
+
@danskecertparams.delete(:cert_path)
|
|
422
|
+
|
|
423
|
+
assert_raises(ArgumentError) { Sepa::Client.new(@danskecertparams) }
|
|
424
|
+
end
|
|
425
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIEPzCCAyegAwIBAgIEQjoxcjANBgkqhkiG9w0BAQsFADCBmDEQMA4GA1UEAxMH
|
|
3
|
+
REJHUk9PVDELMAkGA1UEBhMCREsxEzARBgNVBAcTCkNvcGVuaGFnZW4xEDAOBgNV
|
|
4
|
+
BAgTB0Rlbm1hcmsxGjAYBgNVBAoTEURhbnNrZSBCYW5rIEdyb3VwMRowGAYDVQQL
|
|
5
|
+
ExFEYW5za2UgQmFuayBHcm91cDEYMBYGA1UEBRMPNjExMjYyMjgxMTEwMDAyMB4X
|
|
6
|
+
DTEwMTAyNzAwMDAwMFoXDTIwMTAyNzAwMDAwMFowgZgxEDAOBgNVBAMTB0RCR1JP
|
|
7
|
+
T1QxCzAJBgNVBAYTAkRLMRMwEQYDVQQHEwpDb3BlbmhhZ2VuMRAwDgYDVQQIEwdE
|
|
8
|
+
ZW5tYXJrMRowGAYDVQQKExFEYW5za2UgQmFuayBHcm91cDEaMBgGA1UECxMRRGFu
|
|
9
|
+
c2tlIEJhbmsgR3JvdXAxGDAWBgNVBAUTDzYxMTI2MjI4MTExMDAwMjCCASAwDQYJ
|
|
10
|
+
KoZIhvcNAQEBBQADggENADCCAQgCggEBAKWRtTRCXNEn5Hj+tA0vVg8VKUi/HnFg
|
|
11
|
+
ioZW/eyaF4gWvR4PNXXJJOS31VNHnb2SQHPLt3ac+5icH7vLu/OtS5rvnDiDFMg+
|
|
12
|
+
TomVDrur6RtlsZNLnihZiaSaooI49+ERTz6vcCjST7xbfhmC03LUhE8eBKI1U70c
|
|
13
|
+
x/lQ55UQKZvIAIbCVaZEks95VS4uJpwnU4M8glNIVGSvJhIUj/LIkSIcqBiryq/t
|
|
14
|
+
9FRVtRl1gVhwKdi8A5O9hp4t3dBIdOanaup2UEL4lp7izzgt2rkMeuyQ1ZjHsN7L
|
|
15
|
+
mDsfjoFcYx/8CID9LBwRCN2p+YCuoWUjuorrdU/2eit2lNh6ypiF6WECAQOjgZAw
|
|
16
|
+
gY0wHQYDVR0OBBYEFIT65b/ekUlm38WKUsOzt7MgHMdtMA4GA1UdDwEB/wQEAwIB
|
|
17
|
+
BjASBgNVHRMBAf8ECDAGAQH/AgEBMEgGA1UdHwRBMD8wPaA7oDmGN2h0dHA6Ly9v
|
|
18
|
+
bmxpbmUuZGFuc2tlYmFuay5jb20vcGtpL0RCR1JPT1RfMTExMTExMDAwMi5jcmww
|
|
19
|
+
DQYJKoZIhvcNAQELBQADggEBAFjnBPCos7jMMLc3FqyQUMt/HJGKgJDrhYiPZBo9
|
|
20
|
+
njGkH52Urryqw1sbT3wXA1NuzbjHE3xTUD+5jNPCncYqML9xqQjSQkBcb9eJfHZ+
|
|
21
|
+
asiclsO38cSn2qriJPIrCREPOpRVqrGQRbZQhmDiB198hpAdLp38khJon/gXbR7u
|
|
22
|
+
9e0rN8MIM4sXn+lFuQIWiPuv+3llGSoLlIxJnjiQQ9FDjhwN5U+N1N2aHaLc5AHu
|
|
23
|
+
4X/qRutLCy7AYUJZMPBoakPLscYceW2Ztvx4VAyOXgHDdvmz0Bd58XWOs1A9bNMZ
|
|
24
|
+
FeYAB14D9yQRCkXYLhr6sm8HuyqaIkGChFpNb+Gf8gcPvtw=
|
|
25
|
+
-----END CERTIFICATE-----
|
|
Binary file
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
+
MIIEowIBAAKCAQEAvTnADLhlBL5Rdh7ckCeVueT+a77DwLymGO/PQJAUnOiCOA3h
|
|
3
|
+
dEPzg2ruKk9VgC5+ADTXDD4HIxYO0LB0l1hNTr0GhIbjGI4HLgBSlE1lS/v9rWy8
|
|
4
|
+
kQvFVBBysh3oo3aW27AqSGIUSZzHdOaf0vVmCM69aoHZ3rNHR4RoXA0nqisxBYKb
|
|
5
|
+
SepKSJ+BdIEthbgzOz5ybHY6CCIEU+TIbCEkhACXFk52hmId2ODmjnK9pF6EOyJ3
|
|
6
|
+
CMD8jOksjrb4E9ylChsX135jVqBWoyv49mkzCW7abhkgEB8Ap2nBp27Cm+nFGElW
|
|
7
|
+
co5gKwdEKjrkA2B/Hz6KoceR6OydaaZnUI7T5QIDAQABAoIBADNUoSZSNwUMY6i5
|
|
8
|
+
QnfQZStiVSoBO7Ti9+O32e7Xpt/RqtFt4oTZkgtKTIUptDXrZr7Dlrp5cRIxf59Y
|
|
9
|
+
3qfXilEbsdLtjFky3fu6lqwoOpxcJTqQTq7CFKtzMsnilyMQnmfF6BJumLZHU0wA
|
|
10
|
+
68YcT6t/+Z4Uz3c8Bs/9uRmPb/0W9qkWhH35JKtlFyN2g6nyKMCpYoll+FNun3nr
|
|
11
|
+
e6gqZ9lNbqWOAnf2hfZWIKXLHxh9Eko/kQQYzo1Y0bwJ9v5nbqpxpXn77Ys9eL63
|
|
12
|
+
Z7gQDVoYhaOVBzWWvp7bDQ0RlJ5dliWwfqSy7l5/u7/yuzcuozsE4/zsuGQEcgve
|
|
13
|
+
b721MhkCgYEA69tYh6QdlQtRq9SRmEe16X2UoWLN+tLNvAqdQxDqbwE0R8JxlW4z
|
|
14
|
+
gMpmM58L49aNQA50485jLZJaGwmK6vRpb9IBKB6iB94q20DtB4t1VNNQU3RtzbMQ
|
|
15
|
+
cdvJ+ocftflqaRMgAtKDbdeDtYxaG27g6Jz+yw8fq6krWaSIwoChHFcCgYEAzWLh
|
|
16
|
+
9+9yEPVlEW8CodIvhbCdeRnklgw/TZs6tg/B+99mN0QDeG/c2jbxBcOZ0DgksAn5
|
|
17
|
+
/bvhh1oRSOsZLDE9+ILjtTThbs6c4U2QyQxgvTRzX/NEHwid8rxk04mBOQtpYMD0
|
|
18
|
+
Y1yDg+qnJl3Zev6+DGQB9WbthJuOX/XWfEn/LCMCgYAxYhnlPK2c+WO+UKGzesBS
|
|
19
|
+
BSNLrz5lmCHPj4Fh+3a6i0wBAmt52DscakR/5ns81z13/g7na91EO3J2Wsclbsts
|
|
20
|
+
yFHJrrBKaXAbvDpk7ARDIIOfFa+v9CArVtOxiv1OwsxO99wp+x3dr9Q5/QsY11xs
|
|
21
|
+
GAMZTS9aZ+9Vs6eW4gvZvQKBgQCOEalHTJ01d9mKfqRudSqkKnAzNaL129DqCMdK
|
|
22
|
+
6ol/hZ95+RUBeTdmxnxgRVYfPsa58py3VAAEFVxBeUY3WHSKc1e5n7OUZ10DSBkv
|
|
23
|
+
yN0d46svIuHrKZXAM2r3HHWDlQ42fCJQnMzoMiefFWn7dzzU61SjgKgpg0Svwii0
|
|
24
|
+
XqcgywKBgAuj8hccUY5e5yRUGAqXrBfFCJN53ftkBaVtV0nqxJ2jXwIEqYCVohuM
|
|
25
|
+
gnUi1U8K+UAVu7JQJG1VUBEDcKFN2p/47KdpBx3calcurRmNL8Ual2ANPMC55RUD
|
|
26
|
+
11qQJynyu37oWB74v3VByP38tYy6tWmHUg55fMbjUtKW2AHdIXV5
|
|
27
|
+
-----END RSA PRIVATE KEY-----
|
|
Binary file
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
require File.expand_path('../../test_helper.rb', __FILE__)
|
|
2
|
+
|
|
3
|
+
class NordeaCertRequestSoapBuilderTest < MiniTest::Test
|
|
4
|
+
def setup
|
|
5
|
+
@schemapath = File.expand_path('../../../lib/sepa/xml_schemas',__FILE__)
|
|
6
|
+
@templatepath = File.expand_path('../../../lib/sepa/xml_templates/soap',__FILE__)
|
|
7
|
+
@keyspath = File.expand_path('../nordea_test_keys', __FILE__)
|
|
8
|
+
|
|
9
|
+
csrplain = "-----BEGIN CERTIFICATE REQUEST-----
|
|
10
|
+
MIIBczCB3QIBADA0MRIwEAYDVQQDEwlEZXZsYWIgT3kxETAPBgNVBAUTCDExMTEx
|
|
11
|
+
MTExMQswCQYDVQQGEwJGSTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAo9wU
|
|
12
|
+
c2Ys5hSso4nEanbc+RIhL71aS6GBGiWAegXjhlyb6dpwigrZBFPw4u6UZV/Vq7Y7
|
|
13
|
+
Ku3uBq5rfZwk+lA+c/B634Eu0zWdI+EYfQxKVRrBrmhiGplKEtglHXbNmmMOn07e
|
|
14
|
+
LPUaB0Ipx/6h/UczJGBINdtcuIbYVu0r7ZfyWbUCAwEAAaAAMA0GCSqGSIb3DQEB
|
|
15
|
+
BQUAA4GBAIhh2o8mN4Byn+w1jdbhq6lxEXYqdqdh1F6GCajt2lQMUBgYP23I5cS/
|
|
16
|
+
Z+SYNhu8vbj52cGQPAwEDN6mm5yLpcXu40wYzgWyfStLXV9d/b4hMy9qLMW00Dzb
|
|
17
|
+
jo2ekdSDdw8qxKyxj1piv8oYzMd4fCjCpL+WDZtq7mdLErVZ92gH
|
|
18
|
+
-----END CERTIFICATE REQUEST-----"
|
|
19
|
+
|
|
20
|
+
# The params hash is populated with the data that is needed for gem to function
|
|
21
|
+
@params = {
|
|
22
|
+
bank: :nordea,
|
|
23
|
+
command: :get_certificate,
|
|
24
|
+
pin: '1234567890',
|
|
25
|
+
customer_id: '11111111',
|
|
26
|
+
environment: 'TEST',
|
|
27
|
+
csr_plain: csrplain,
|
|
28
|
+
# Selected service (For testing: service, For real: ISSUER)
|
|
29
|
+
service: 'service'
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@certrequest = Sepa::SoapBuilder.new(@params)
|
|
33
|
+
|
|
34
|
+
@xml = Nokogiri::XML(@certrequest.to_xml)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_should_fail_if_bank_doesnt_support_command
|
|
38
|
+
@params[:command] = :create_certificate
|
|
39
|
+
|
|
40
|
+
assert_raises(ArgumentError) { Sepa::SoapBuilder.new(@params) }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_that_get_certificate_soap_template_is_unmodified
|
|
44
|
+
sha1 = OpenSSL::Digest::SHA1.new
|
|
45
|
+
template = File.read("#{@templatepath}/get_certificate.xml")
|
|
46
|
+
digest = Base64.encode64(sha1.digest(template)).strip
|
|
47
|
+
|
|
48
|
+
assert_equal digest, "iYJcoQAlXZj5Pp9vLlSROXxY3+k="
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_should_initialize_with_proper_params
|
|
52
|
+
assert Sepa::SoapBuilder.new(@params)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_should_get_error_if_command_missing
|
|
56
|
+
@params.delete(:command)
|
|
57
|
+
|
|
58
|
+
assert_raises(ArgumentError) do
|
|
59
|
+
Sepa::SoapBuilder.new(@params)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_should_get_error_if_customer_id_missing
|
|
64
|
+
@params.delete(:customer_id)
|
|
65
|
+
|
|
66
|
+
assert_raises(ArgumentError) do
|
|
67
|
+
Sepa::SoapBuilder.new(@params)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_should_load_correct_template_with_get_certificate
|
|
72
|
+
@params[:command] = :get_certificate
|
|
73
|
+
xml = Nokogiri::XML(Sepa::SoapBuilder.new(@params).to_xml)
|
|
74
|
+
|
|
75
|
+
assert xml.xpath('//cer:getCertificatein', 'cer' => 'http://bxd.fi/CertificateService').first
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_should_raise_error_if_command_not_correct
|
|
79
|
+
@params[:command] = :wrong_command
|
|
80
|
+
assert_raises(ArgumentError) do
|
|
81
|
+
soap = Sepa::SoapBuilder.new(@params).to_xml
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_timestamp_is_set_correctly
|
|
86
|
+
timestamp_node = @xml.xpath(
|
|
87
|
+
"//cer:Timestamp", 'cer' => 'http://bxd.fi/CertificateService'
|
|
88
|
+
).first
|
|
89
|
+
|
|
90
|
+
timestamp = Time.strptime(timestamp_node.content, '%Y-%m-%dT%H:%M:%S%z')
|
|
91
|
+
|
|
92
|
+
assert timestamp <= Time.now && timestamp > (Time.now - 60)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_application_request_should_be_inserted_properly
|
|
96
|
+
ar_node = @xml.xpath(
|
|
97
|
+
"//cer:ApplicationRequest", 'cer' => 'http://bxd.fi/CertificateService'
|
|
98
|
+
).first
|
|
99
|
+
|
|
100
|
+
ar_doc = Nokogiri::XML(Base64.decode64(ar_node.content))
|
|
101
|
+
|
|
102
|
+
assert ar_doc.respond_to?(:canonicalize)
|
|
103
|
+
assert_equal ar_doc.at_css("CustomerId").content, @params[:customer_id]
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def test_should_validate_against_schema
|
|
107
|
+
Dir.chdir(@schemapath) do
|
|
108
|
+
xsd = Nokogiri::XML::Schema(IO.read('soap.xsd'))
|
|
109
|
+
assert xsd.valid?(@xml)
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|