ezii-ebics 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 57a0bc6b19b87f13c759a1a3e9c38f009eddd6d30eec20e11a860ac51f0d3092
4
+ data.tar.gz: e78ea6d59bac9b5c753bf4d85d69ef464a8046c3dea5a8af85e881e3266b51e9
5
+ SHA512:
6
+ metadata.gz: 5037694efa8ce807ff19b049df764885b8fb50cd7a38c97b434668db7239e84bb94e0b16b4f1f44a3b1303f8603c34512d9c649090184733f63cadca533c266e
7
+ data.tar.gz: 7fae7f66cc06841046468daf2cc87434eccbe8413d392edf8632ac0d8eac29a41b7eb027f46b111d3846681d31a2a59ccd587a1cb8bc30bfa70504ea53d9612a
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gem 'nokogiri'
@@ -0,0 +1,12 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ mini_portile (0.6.0)
5
+ nokogiri (1.6.3.1)
6
+ mini_portile (= 0.6.0)
7
+
8
+ PLATFORMS
9
+ ruby
10
+
11
+ DEPENDENCIES
12
+ nokogiri
@@ -0,0 +1,24 @@
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <http://unlicense.org>
@@ -0,0 +1,7 @@
1
+ # EBICS Ruby Client
2
+
3
+ ## Tested against EBICS XML Schema and german Commerzbank EBICS Server in production at sofortwohnen.com
4
+
5
+ * INI
6
+ * HIA
7
+ * HEV
@@ -0,0 +1,12 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'ezii-ebics'
3
+ s.version = '0.1.0'
4
+ s.licenses = ['MIT']
5
+ s.summary = "eZii EBICS Ruby Client"
6
+ s.description = "EBICS 2.5 H004 Implementation in Ruby."
7
+ s.authors = ["Manuel Korfmann"]
8
+ s.email = 'manu@korfmann.info'
9
+ s.files = Dir.glob("**/*")
10
+ s.require_path = 'lib'
11
+ s.homepage = 'https://ezii.ml'
12
+ end
File without changes
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEowIBAAKCAQEA4AcfGjkEG3A2anPNgY5DLM+4/imMhy9ToxfpRG+0eLKhnoqH
3
+ n0BbbJyoU0DiKc2Oxs78qnFPNFx+Owb8pcO2HE4wJoa7n2KhSudHJmXaZffid//t
4
+ StFZSx3rhQmgYuR817yzDr9chiJtBFBdGEnUjKtQqatTbjQ6oBTXUqp1NkCiFzVr
5
+ pZ+EDcQpuxkleFlabhF6tNy9cqGr2O4oFF5xDEtTJkYEXKIDw4QJDyLY04yyYWFA
6
+ umL5WSUwoDoLpd/QF4bkZJv+ZCeb5kH5TrPD8uLNaDL26kUxsLlIDmnpwzv+CjKE
7
+ VY/pB+UeAXvASq3sJRnHeac7onTG4t/hZ9zO+QIDAQABAoIBAFjxGt0LU+Ec3M3I
8
+ qgdMlsjcs2Jc1oj5NihjHt5nxuvAZ8AM2alVILbvPzjGYsQb8xplJRT6JWrxacA/
9
+ luCs4ck9FYrGJQkzXDvjtHC/MUUYdBYWSnxQvzW+bDoGR2HbuuDf7urk+HPciRGU
10
+ YlF5RmSOw1iJR3dSTxAtFgug1yYxJnxcYdd0++ZTlaxltqhRMMVVJ/JLB6gPRlaN
11
+ mW4dRTfwTvCPOCRWsji4htdcaJzmWG74oHle9nMLP7iNucrZ1I2bPU5geCkPlgB/
12
+ ZW5jHsaMA5IAMFf79/3yLGWAjpcV0Us+/7bo3IlnLUhNefDmbadnN0ZNdw1kLjd9
13
+ tukuVfECgYEA/IzNFx+jxB91NqsSgqtwXdSGQvvLtdpNSvGhvZtsyFTta9g+J0za
14
+ QzvaxwPAqDi2rTnTWQrJnuJaM/cxxNlZYcqNMkzroNO8uR7mvrIYqzWLqIc/Fkse
15
+ BYADIeiKdjCqpMng8DUGi9jivB6nJ/g6zwkYoiCubhLsuXBwYlCnTC0CgYEA4xaT
16
+ IK724sH9KwHTEcOTDWZLGq8H8F/LrAudXv5BStc12a3cVDxLGML7lbxdR81UeiB4
17
+ PDjqytCqPEBe8dBqTBsiGuuuc5GUvXz9U5rW2NlBcCqUebbaHTTVGVnDlit7HmJU
18
+ PtB4pKk916JRmL3PDanz1kHBJnoPf+Mhtyn4MX0CgYBXWDMOTkkLaX3WfHAYdUaV
19
+ jQ0qWX9o06lrxAoWU4zZ9FVwuQc1/GR4YFkX/3pAM+0qGBe6cfqtUseztUinNiyt
20
+ n6oZvXS42MIqnD9dsKbLf+dfT/dHtI8bg9yRe6V3nvlFqPR83zn2X/p66XcSYc2l
21
+ ERZN7FOnijAJKpQTzKUvuQKBgGKIJQaFZDI3obXLcN3AUkn6HJRTZcpyhlj8ISha
22
+ gdILVx5ARd12286+q5LozECfYwwqkoDu4VFnALZr58ZcfALRsxajNGqIvFULqo9g
23
+ G+CzQ6V7lDjLkhAiIGSDgk3iR+WDHLK0meQ4WtD5aRYxJWn0WAybM0eSpq8CylpD
24
+ J6GxAoGBALUNRi/+pgeBxxhlHKt4E2YZggcrnbOTCK7tYaCENDc+DNRI4N6l7iUC
25
+ oErpv4iI5gAdvvIydjsGzPmiR8vkG77RJDdS0Z/bbv0C35ANZ16CDF4VUqDm1XM6
26
+ AEggZrAuSpS8saXhXfHvttga14JwPj91xlNgEtmQnhGVDOasmffj
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEA2exIRgXiwjlgplH8VChWedjxT/03cijQK9loIAYgSab8Oijb
3
+ 2HVaT08c6OnJ+ezbdGA9cI9iM01ATFx+Jul6V8tklAwhIkUju6HCc6knpT7q988K
4
+ yYdPmRy/R9l/NVvSXIQltQI9n8/ixywtVIkQfp8AlrcK+r60wUoegPTF9b/w6Fb5
5
+ pcfu0a+eVFP7J/Ij3n7Gb64emYzcPuFCRymfKwJHVG4z9vEwAlePzkMHCn30TYQe
6
+ pXOcLNb7x1FJj+8HcLzLcVviymkBfhnPHwBwy4eWBPlN9ryEsqDyC2Lf+oSXm88c
7
+ YiSZSyRaCoKmau1OpQJh49kKY8loAQicu4XSPwIDAQABAoIBAF1lBUh1R0yD+Kbv
8
+ JhwPOZh44Fquo++aDDVutFBdL8NA/IIUdrva93xb5IDxiS1CVH8Yq9wspyJjbjYL
9
+ wcj9cQBlW9KTLDQau4izd7nH+gS45UyVAAOEqRlul4+8Z+c/VfVucRaVQkHWf1Nq
10
+ 3HaJU3dgv4jYI614w9C+6jnMLXb3JAN6+TgM0Gsx+YvV9ZZ1kmxen4hHEk2qyp/z
11
+ bQrGIo37Za7WKjdn+TbkRqUv7hiPm5t5zW2mKv+yqEFf5ZRwkwMkh2t7p7saxoaH
12
+ ZE57XW41YCvpS90hUUxOjz/V7Foah1jHZhLT0qR+rOZOlx+Oc3tRxJVlY/hqBQLx
13
+ 4gQ4SmkCgYEA+nezNkCccOcqKig873xCscCOWwOXl63Y5vN+ASblWEcvnDD+By0u
14
+ 6GF0dFSz4X4fKfQMq42lm12CuAC0n+K3LliYNWwq2hT6BgCxElj6S1grHO9uG0fP
15
+ /cx8NoxcXfVvAj8n2qs8VrA+8/AVsoI9dQRyLR3UT0sc3VoUu/XgbqsCgYEA3ryO
16
+ ByAG1oliVCeS3zAZkUCzmWWXyxA5WxswiDVf1hZdDGgZcMcBLG6SB1PWhSDESdMb
17
+ AG/mf0Qk6keneRoprg7cAHgGYEPhSDREBonjqF3aSV3vrb5varq5HwFOmieoJnQU
18
+ fJVNi7W59JKdUdeOMupQ3Gpq6Ru8j6Ncy7nEWr0CgYBcXVgRYbJPUHAUK9KM3l4Z
19
+ /tCAb8qvfMTIJnMJKbbZ3yaHiumi696og4fWfoX3WfNUHVOu0AWKTemuwVPawlib
20
+ FsDKsqD621F4dTjXc0iaEGGVwhXwqYLiLU6BLzHA1ImjYnboBM2zijss6hSWR8Ey
21
+ LfmM+bsZorF6T4Xl6r5hEQKBgQCf5+pnPxzppJQNKqQMy3FvkG3f8Mm7JRioSarb
22
+ /sWg40lGAO5Swuwaw/7ed9gIl2+UOJSoCa4HLBr8fxjCnn/R0CUtyP162wC/X5Z+
23
+ wzvHwilWhrPtnkxK6WbB1aRik5nqkWer0Vxssrif1ypOeVxDPWlz9IpwdFM5I+UY
24
+ 9XL8WQKBgQC/4sufNIcsxLCKyayAYDnfNMzprzNIwBrr2arqL6qvuTOh5gftTKjw
25
+ 7jjyl+2dAqjCysKzspo/HMA6GB9rKu+AL5x8FYcyfjHUeiW3xqVChapc9kJy3jbf
26
+ mVFKdIQrHYRrGLD1Es725KIablMshxLLb04oKYDmIXO1vUPcDd+0Pg==
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,17 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDQDCCAiigAwIBAgIBATANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJGUjEOMAwGA1UEBxMF
3
+ UGFyaXMxEzARBgNVBAoTCkUuQi5JLkMuUy4xCTAHBgNVBAsTADEPMA0GA1UEAxMGRS4gQml4MB4X
4
+ DTA5MDcyNzA5MDYxNVoXDTE0MDcyNzA5MDYxNVowTjELMAkGA1UEBhMCRlIxDjAMBgNVBAcTBVBh
5
+ cmlzMRMwEQYDVQQKEwpFLkIuSS5DLlMuMQkwBwYDVQQLEwAxDzANBgNVBAMTBkUuIEJpeDCCASIw
6
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANeOaO2fHl56a7bcS4FAnfTyvGiibmiyed9Jx1wi
7
+ fCojuzzLpnSVWnbDm2wyB1/YXK1V/cllK+LCrav48xMnoga0aRcVxrSCtpAW+PB6Wn1hKkNW2m/w
8
+ IuP1Vg+LB2EAsAVvCiMrCpyGKUUGNQ5x0Ph913xYUgZ41Rq/CNJ2w4AtuCgbr5KvRTwvKEv4JEJ5
9
+ qymedq3Yy1kt6t5HbQkLzMpMOBtMLzUBiZUv1sTApEtK39CdCI8GAEsZdW5ePSdr77y0qsA7QCTx
10
+ WliLpNDBx4BOuYJz9IdejqtNT4zAD7sQB6Yai54LzJ0lpHmA3baK3/Y3gBJqxC3WHSBf68x66icC
11
+ AwEAAaMpMCcwCwYDVR0PBAQDAgZAMAoGA1UdDgQDBAExMAwGA1UdIwQFMAOAATEwDQYJKoZIhvcN
12
+ AQELBQADggEBALo97IHqI3SfAS7rcTRGykCxqImtaDKJ3c77iKaUBIfJtBWuSxMLbLyC5xG5WQmS
13
+ /IdjSLp8WWetDylP2mkKvqk601UJGYHTnvUHblVY9MhG5kD6LB6bfjp6PfOm1629Mlmg5BCZ7cO1
14
+ +pEbQK2IE1MTreCYPiQyJJeT6umUKfeRgS3WFWCya/zfaLlCZDrRy+N8TVFKauMMKa8AugUn9eAm
15
+ 7CuKgt89RkH3ERhJUZWb5Rbo6ykvHzbpDjaCedtnobUURjKeiwNR8cM5Tt8yeH4fOh63vbYZWUBv
16
+ 3jQ5URJX2vHgkOP6sNB/E7/yqYPLxhj3E7Ty2d4/ru3yjJfRiVE=
17
+ -----END CERTIFICATE-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEAxDdGQbH114swLRsKsUp2bKgmqVJM6GGORGCs+2Q+nprnFZN0
3
+ a5g8bOY0j0pqkG/D1L/IIzUslnGg91K24GXPuGvthpGNjyEqqcUR2KXxnSiSIkDf
4
+ zgSPisuFoF0cwiYMWSYNgAqSE3+L1XUOC6EuYbRUAGMF3216kFb5Ky02ZtUX6y2I
5
+ gqqFQygIaQKd+uJtsWO4lhTo/J2G5hTmm0V2LO9yWuduwGH6kDjaeL7UfgGdlbjx
6
+ Es2eE66vNfppcAGLRZXpUp5/mAnRcFSJPUHJXXcnuLTsX30WxvSM2pha8yUj9uIR
7
+ KH4TxOIf0vRhPh5iScldKle35MsVTMxgXe7buwIDAQABAoIBAQCS9w+xXxjTI9am
8
+ wi1lE2/V/LBQfGtMVt2XS43lEXVxmHZjC7nUaQdBTb+qX8OngX79V9QQwuAtotg8
9
+ xwBg3QETkgsrktOjk+T/mbK/QbPR0bR64XqANZxKChyBO5yxsovnLgBImiJFZnAX
10
+ JoCpp0U1Ozr7uy+H5Nk7SVmBxHCN3dc5ommEyVR+Tp7lhCt8Rv9UdPkeqkdQNO2N
11
+ 9g/RA0NL/5WXGe7xXB45uD0PASL0GjL/uDq7pJXtFifa17lTvymHRnCSOICXIZfa
12
+ XGlPqUFoU60IOehRWEMMP2UfBwXVvLGvkp7QXvREw6GdhtlBfbHNM0g2mcvYXLsH
13
+ llBYWH0BAoGBAPIcvLdzZfIzAeOp5b3Kdsf6vou5Dftle83fJUZOZwl7xuYcfP9p
14
+ XjEsgbeoE3zjgIURkrZrY03sGsuWtSfcips0NnF2KGCYn+3Ff1ECAkkB9RvGc6zl
15
+ Cu5u5nv2QHDzNFE4VJ6LRabBPyzt2DYsmgZ1HxH2r7R3pLCSArMcGu+BAoGBAM94
16
+ lDuDCqMTYxZwwO0O2PiUwqIRMA41hwZOlGRge6AqPFzVc4kHUg8biL9oBlJ1xyAW
17
+ 0j7ztQyygtCWKWaWCHz504oHEHIpY9r6not+AViOlzqjhqzsfqljD95YADXTQ6jk
18
+ Bw9E7tiVwzf69Ecv6rdtJc3MBkARd+vOwqWiXik7AoGAaFwcuFKkmd6ErPZ50fIo
19
+ exDI+38b2MYotFfAQGrhHQReeqfC9XEcqcOOcnSfWdDSgAlQHRNy7Y6dCi5/DZyR
20
+ nk7GPOf6hZCkNyBPPcLI62FNnthO2jKsIJRrAvnlUwpx/aRzTRepQTTBH4OyE7/r
21
+ 8GahquOTXw3HTljRkxTFQ4ECgYATBDNaDRXRgrpnWShl0iGTD1eTsU2dT8yziEpT
22
+ tQA/2v8zZyEy4yfjWJu9J5TExCTfTRgySvZCVq5k3g6nZ4MZqXB5S1J3lFGhxaz4
23
+ jjEjY9Z6unhiqz6k2f6fW6ORS279MQFwpdnaokeFfwwa5kp2S5vWdCfygWdjhs0S
24
+ j4Jf9wKBgQDBJzBBxN7LObQTzButu0xLuKLs5EvrECJfyqBWNKcstgPNacG8UCru
25
+ lRbhkQOt5h/1Vb3jtbZSDipIKkAV5i5lzB50n33eyUkDp+SPvdDamCVDs86Sc5q2
26
+ 1zdWBwQLJ3iaB6PlJyPjtZMy3ZFSXW5Gqs52GvENVYAGcnX1wkK6SA==
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,104 @@
1
+ require 'zlib'
2
+ require 'base64'
3
+ require 'erb'
4
+ require 'openssl'
5
+ require 'time'
6
+ require 'digest/sha2'
7
+
8
+ module EBICS
9
+ class Request
10
+ def render_order_data(name)
11
+ zipped_order_data = Zlib::Deflate.deflate raw_order_data(name)
12
+ Base64.strict_encode64(zipped_order_data)
13
+ end
14
+
15
+ def raw_order_data(name)
16
+ request_template(name)
17
+ end
18
+
19
+ def request_template(name)
20
+ raw = File.read(File.join(File.dirname(__FILE__), '../templates/' + name + '.erb'))
21
+ ERB.new(raw).result(binding)
22
+ end
23
+ end
24
+
25
+ class HEV < Request
26
+ attr_accessor :bank
27
+
28
+ def render
29
+ request_template('HEV.xml')
30
+ end
31
+ end
32
+
33
+ class INI < Request
34
+ attr_accessor :user
35
+ attr_accessor :bank
36
+
37
+ def render
38
+ request_template('INI.xml')
39
+ end
40
+ end
41
+
42
+ class HIA < Request
43
+ attr_accessor :user
44
+ attr_accessor :bank
45
+
46
+ def render
47
+ request_template('HIA.xml')
48
+ end
49
+ end
50
+
51
+
52
+ class User
53
+ attr_accessor :partner_id
54
+ attr_accessor :member_id
55
+ def initialize(&block)
56
+ @key_initializer = block
57
+ @keys = {}
58
+ end
59
+
60
+ def key(type)
61
+ @keys[type.to_sym] || (@keys[type] = initialize_key(type))
62
+ end
63
+
64
+ def initialize_key(type)
65
+ key = Key.new(type)
66
+ @key_initializer.call(key)
67
+ return key
68
+ end
69
+ end
70
+
71
+ class Bank
72
+ attr_accessor :host_id
73
+
74
+ end
75
+
76
+ class Key
77
+ attr_accessor :rsa, :type
78
+ attr_writer :created_at
79
+
80
+ def initialize(type)
81
+ @type = type
82
+ end
83
+
84
+ def public_modulus
85
+ Base64.strict_encode64(@rsa.public_key.n.to_s(16))
86
+ end
87
+
88
+ def public_exponent
89
+ Base64.strict_encode64(@rsa.public_key.e.to_s(2))
90
+ end
91
+
92
+ def public_sha_256
93
+ public_key_string = "#{ @rsa.public_key.e.to_s(16).downcase } #{ @rsa.public_key.n.to_s(16).downcase }"
94
+ public_key_string.gsub! /\A0/, ''
95
+ puts public_key_string
96
+ public_key_string.encode!('US-ASCII')
97
+ Digest::SHA256.hexdigest(public_key_string)
98
+ end
99
+
100
+ def created_at
101
+ @created_at.iso8601(10)
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ebics:ebicsHEVRequest xsi:schemaLocation="http://www.ebics.org/H000 ebics_hev.xsd"
3
+ xmlns:ebics="http://www.ebics.org/H000" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4
+ <ebics:HostID><%= @bank.host_id %></ebics:HostID>
5
+ </ebics:ebicsHEVRequest>
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ebicsUnsecuredRequest xmlns="http://www.ebics.org/H003" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Revision="1" Version="H003" xsi:schemaLocation="http://www.ebics.org/H003 http://www.ebics.org/H003/ebics_keymgmt_request.xsd">
3
+ <header authenticate="true">
4
+ <static>
5
+ <HostID><%= @bank.host_id%></HostID>
6
+ <PartnerID><%= @user.partner_id %></PartnerID>
7
+ <UserID><%= @user.member_id %></UserID>
8
+ <OrderDetails>
9
+ <OrderType>HIA</OrderType>
10
+ <OrderID>A026</OrderID>
11
+ <OrderAttribute>DZNNN</OrderAttribute>
12
+ </OrderDetails>
13
+ <SecurityMedium>0000</SecurityMedium>
14
+ </static>
15
+ <mutable/>
16
+ </header>
17
+ <body>
18
+ <DataTransfer>
19
+ <OrderData><%= render_order_data 'HIA_order_data.xml' %></OrderData>
20
+ </DataTransfer>
21
+ </body>
22
+ </ebicsUnsecuredRequest>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <HIARequestOrderData xmlns="http://www.ebics.org/H003" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="http://www.ebics.org/H003 http://www.ebics.org/H003/ebics_orders.xsd">
3
+ <AuthenticationPubKeyInfo>
4
+ <PubKeyValue>
5
+ <ds:RSAKeyValue>
6
+ <ds:Modulus><%= @user.key('x002').public_modulus %></ds:Modulus>
7
+ <ds:Exponent><%= @user.key('x002').public_exponent %></ds:Exponent>
8
+ </ds:RSAKeyValue>
9
+ </PubKeyValue>
10
+ <AuthenticationVersion>X002</AuthenticationVersion>
11
+ </AuthenticationPubKeyInfo>
12
+
13
+ <EncryptionPubKeyInfo>
14
+ <PubKeyValue>
15
+ <ds:RSAKeyValue>
16
+ <ds:Modulus><%= @user.key('e002').public_modulus %></ds:Modulus>
17
+ <ds:Exponent><%= @user.key('e002').public_exponent %></ds:Exponent>
18
+ </ds:RSAKeyValue>
19
+ </PubKeyValue>
20
+ <EncryptionVersion>E002</EncryptionVersion>
21
+ </EncryptionPubKeyInfo>
22
+
23
+ <PartnerID><%= @user.partner_id %></PartnerID>
24
+ <UserID><%= @user.member_id %></UserID>
25
+ </HIARequestOrderData>
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ebicsUnsecuredRequest xmlns="http://www.ebics.org/H003" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Revision="1" Version="H003" xsi:schemaLocation="http://www.ebics.org/H003 http://www.ebics.org/H003/ebics_keymgmt_request.xsd">
3
+ <header authenticate="true">
4
+ <static>
5
+ <HostID><%= @bank.host_id%></HostID>
6
+ <PartnerID><%= @user.partner_id %></PartnerID>
7
+ <UserID><%= @user.member_id %></UserID>
8
+ <OrderDetails>
9
+ <OrderType>INI</OrderType>
10
+ <OrderID>A025</OrderID>
11
+ <OrderAttribute>DZNNN</OrderAttribute>
12
+ </OrderDetails>
13
+ <SecurityMedium>0000</SecurityMedium>
14
+ </static>
15
+ <mutable/>
16
+ </header>
17
+ <body>
18
+ <DataTransfer>
19
+ <OrderData><%= render_order_data 'INI_order_data.xml' %></OrderData>
20
+ </DataTransfer>
21
+ </body>
22
+ </ebicsUnsecuredRequest>
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <SignaturePubKeyOrderData xmlns="http://www.ebics.org/S001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xsi:schemaLocation="http://www.ebics.org/S001 http://www.ebics.org/S001/ebics_signature.xsd">
3
+ <SignaturePubKeyInfo>
4
+ <PubKeyValue>
5
+ <ds:RSAKeyValue>
6
+ <ds:Modulus><%= @user.key('a005').public_modulus %></ds:Modulus>
7
+ <ds:Exponent><%= @user.key('a005').public_exponent %></ds:Exponent>
8
+ </ds:RSAKeyValue>
9
+ <TimeStamp><%= @user.key('a005').created_at %></TimeStamp>
10
+ </PubKeyValue>
11
+ <SignatureVersion>A005</SignatureVersion>
12
+ </SignaturePubKeyInfo>
13
+ <PartnerID><%= @user.partner_id %></PartnerID>
14
+ <UserID><%= @user.member_id %></UserID>
15
+ </SignaturePubKeyOrderData>
@@ -0,0 +1,92 @@
1
+ require 'minitest/autorun'
2
+ require 'nokogiri'
3
+ require_relative '../lib/ebics'
4
+
5
+ # TODO: Need to refactor every test cases.
6
+
7
+ class SchemaTest < MiniTest::Unit::TestCase
8
+ def setup
9
+ @bank = EBICS::Bank.new
10
+ @bank.host_id = 'EBIXH'
11
+
12
+ @user = EBICS::User.new do |key|
13
+ path = '../keys/' + key.type + '.pem'
14
+ if File.exists?(path)
15
+ key.rsa = OpenSSL::PKey::RSA.new(File.read(path))
16
+ else
17
+ key.rsa = OpenSSL::PKey::RSA.new(2048)
18
+ File.open(path, 'w') do |file|
19
+ file.write key.rsa.to_pem
20
+ end
21
+ end
22
+
23
+ key.created_at = File.mtime(path)
24
+ end
25
+
26
+ @user.partner_id = 'EBIXP'
27
+ @user.member_id = 'EBIXU'
28
+
29
+ @hia = EBICS::HIA.new
30
+ @hia.user = @user
31
+ @hia.bank = @bank
32
+
33
+ @ini = EBICS::INI.new
34
+ @ini.user = @user
35
+ @ini.bank = @bank
36
+
37
+ end
38
+
39
+ def test_ini_schema
40
+ doc = Nokogiri::XML(@ini.render.to_s.tap { |ini| ini })
41
+
42
+ Dir.chdir('../xsd/H003/') do
43
+ xsd = Nokogiri::XML::Schema(File.read('ebics.xsd'))
44
+ errors = []
45
+ xsd.validate(doc).each do |error|
46
+ errors << error
47
+ end
48
+ assert_empty errors, errors.join("\n")
49
+ end
50
+ end
51
+
52
+ def test_ini_order_data_schema
53
+ doc = Nokogiri::XML(@ini.raw_order_data('INI_order_data.xml').to_s.tap { |ini| puts ini })
54
+
55
+ Dir.chdir('../xsd/H003/') do
56
+ xsd = Nokogiri::XML::Schema(File.read('ebics_signature.xsd'))
57
+ errors = []
58
+ xsd.validate(doc).each do |error|
59
+ errors << error
60
+ end
61
+ assert_empty errors, errors.join("\n")
62
+ end
63
+ end
64
+
65
+
66
+ def test_hia_schema
67
+ doc = Nokogiri::XML(@hia.render.to_s.tap { |hia| puts hia })
68
+
69
+ Dir.chdir('../xsd/H003/') do
70
+ xsd = Nokogiri::XML::Schema(File.read('ebics.xsd'))
71
+ errors = []
72
+ xsd.validate(doc).each do |error|
73
+ errors << error
74
+ end
75
+ assert_empty errors, errors.join("\n")
76
+ end
77
+ end
78
+
79
+ def test_hia_order_data_schema
80
+ doc = Nokogiri::XML(@hia.raw_order_data('HIA_order_data.xml').to_s.tap { |hia| puts hia })
81
+
82
+ Dir.chdir('../xsd/H003/') do
83
+ xsd = Nokogiri::XML::Schema(File.read('ebics.xsd'))
84
+ errors = []
85
+ xsd.validate(doc).each do |error|
86
+ errors << error
87
+ end
88
+ assert_empty errors, errors.join("\n")
89
+ end
90
+ end
91
+ end
92
+