epics 2.11.0 → 3.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.semaphore/semaphore.yml +17 -8
- data/CHANGELOG.md +93 -0
- data/EBICS_REFERENCES.md +169 -0
- data/README.md +219 -50
- data/lib/epics/azv.rb +3 -10
- data/lib/epics/b2b.rb +3 -10
- data/lib/epics/bka.rb +3 -14
- data/lib/epics/builders/body_builder/base.rb +26 -0
- data/lib/epics/builders/body_builder/v2.rb +9 -0
- data/lib/epics/builders/body_builder/v3.rb +9 -0
- data/lib/epics/builders/body_builder.rb +6 -0
- data/lib/epics/builders/data_encryption_info_builder.rb +29 -0
- data/lib/epics/builders/data_transfer_builder/base.rb +52 -0
- data/lib/epics/builders/data_transfer_builder/v2.rb +9 -0
- data/lib/epics/builders/data_transfer_builder/v3.rb +12 -0
- data/lib/epics/builders/data_transfer_builder.rb +6 -0
- data/lib/epics/builders/header_builder/base.rb +26 -0
- data/lib/epics/builders/header_builder/v2.rb +9 -0
- data/lib/epics/builders/header_builder/v3.rb +9 -0
- data/lib/epics/builders/header_builder.rb +6 -0
- data/lib/epics/builders/mutable_builder.rb +28 -0
- data/lib/epics/builders/order_details_builder/base.rb +100 -0
- data/lib/epics/builders/order_details_builder/v2.rb +21 -0
- data/lib/epics/builders/order_details_builder/v3.rb +51 -0
- data/lib/epics/builders/order_details_builder.rb +10 -0
- data/lib/epics/builders/request_builder.rb +25 -0
- data/lib/epics/builders/static_builder/base.rb +75 -0
- data/lib/epics/builders/static_builder/v2.rb +9 -0
- data/lib/epics/builders/static_builder/v3.rb +9 -0
- data/lib/epics/builders/static_builder.rb +9 -0
- data/lib/epics/builders/transfer_receipt_builder.rb +19 -0
- data/lib/epics/builders/xml_builder/base.rb +92 -0
- data/lib/epics/builders/xml_builder/v24.rb +31 -0
- data/lib/epics/builders/xml_builder/v25.rb +31 -0
- data/lib/epics/builders/xml_builder/v3.rb +31 -0
- data/lib/epics/builders/xml_builder.rb +7 -0
- data/lib/epics/builders.rb +13 -0
- data/lib/epics/c2s.rb +3 -10
- data/lib/epics/c52.rb +2 -14
- data/lib/epics/c53.rb +2 -14
- data/lib/epics/c54.rb +2 -14
- data/lib/epics/c5n.rb +3 -14
- data/lib/epics/ccs.rb +3 -10
- data/lib/epics/cct.rb +3 -10
- data/lib/epics/cd1.rb +3 -10
- data/lib/epics/cdb.rb +3 -10
- data/lib/epics/cdd.rb +3 -10
- data/lib/epics/cds.rb +3 -10
- data/lib/epics/cdz.rb +3 -14
- data/lib/epics/cip.rb +3 -10
- data/lib/epics/client.rb +489 -125
- data/lib/epics/crypt/aes.rb +56 -0
- data/lib/epics/crypt/x_509.rb +52 -0
- data/lib/epics/crypt.rb +5 -0
- data/lib/epics/crz.rb +3 -14
- data/lib/epics/factories/crypt/aes_factory.rb +5 -0
- data/lib/epics/factories/crypt.rb +4 -0
- data/lib/epics/factories/request_factory/base.rb +236 -0
- data/lib/epics/factories/request_factory/v2.rb +194 -0
- data/lib/epics/factories/request_factory/v24.rb +32 -0
- data/lib/epics/factories/request_factory/v25.rb +31 -0
- data/lib/epics/factories/request_factory/v3.rb +305 -0
- data/lib/epics/factories/request_factory.rb +8 -0
- data/lib/epics/factories.rb +5 -0
- data/lib/epics/fdl.rb +3 -18
- data/lib/epics/ful.rb +3 -15
- data/lib/epics/generic_request.rb +31 -92
- data/lib/epics/generic_upload_request.rb +14 -67
- data/lib/epics/haa.rb +3 -9
- data/lib/epics/hac.rb +3 -14
- data/lib/epics/handlers/auth_signature_handler.rb +102 -0
- data/lib/epics/handlers/order_data_handler/base.rb +98 -0
- data/lib/epics/handlers/order_data_handler/v2.rb +39 -0
- data/lib/epics/handlers/order_data_handler/v24.rb +11 -0
- data/lib/epics/handlers/order_data_handler/v25.rb +11 -0
- data/lib/epics/handlers/order_data_handler/v3.rb +41 -0
- data/lib/epics/handlers/order_data_handler.rb +8 -0
- data/lib/epics/handlers/user_signature_handler/base.rb +10 -0
- data/lib/epics/handlers/user_signature_handler/v2.rb +17 -0
- data/lib/epics/handlers/user_signature_handler/v3.rb +17 -0
- data/lib/epics/handlers/user_signature_handler.rb +6 -0
- data/lib/epics/handlers.rb +6 -0
- data/lib/epics/hev.rb +2 -15
- data/lib/epics/hia.rb +4 -55
- data/lib/epics/hkd.rb +3 -9
- data/lib/epics/hpb.rb +3 -13
- data/lib/epics/hpd.rb +3 -9
- data/lib/epics/htd.rb +3 -9
- data/lib/epics/ini.rb +4 -46
- data/lib/epics/keyring.rb +17 -0
- data/lib/epics/letter_renderer.rb +17 -22
- data/lib/epics/ptk.rb +3 -14
- data/lib/epics/response.rb +34 -29
- data/lib/epics/services/crypt_service.rb +62 -0
- data/lib/epics/services/digest_resolver/base.rb +30 -0
- data/lib/epics/services/digest_resolver/v2.rb +13 -0
- data/lib/epics/services/digest_resolver/v3.rb +19 -0
- data/lib/epics/services/digest_resolver.rb +6 -0
- data/lib/epics/services.rb +5 -0
- data/lib/epics/signature.rb +50 -0
- data/lib/epics/{key.rb → signature_algorithm/base.rb} +14 -21
- data/lib/epics/signature_algorithm/rsa.rb +50 -0
- data/lib/epics/signature_algorithm/rsapkcs1.rb +16 -0
- data/lib/epics/signature_algorithm/rsapss.rb +20 -0
- data/lib/epics/signature_algorithm.rb +2 -0
- data/lib/epics/sta.rb +3 -14
- data/lib/epics/version.rb +1 -1
- data/lib/epics/vmk.rb +3 -14
- data/lib/epics/wss.rb +3 -9
- data/lib/epics/xct.rb +3 -10
- data/lib/epics/xds.rb +3 -10
- data/lib/epics/xe2.rb +3 -10
- data/lib/epics/xe3.rb +3 -10
- data/lib/epics/xek.rb +5 -0
- data/lib/epics/yct.rb +6 -0
- data/lib/epics/z01.rb +2 -14
- data/lib/epics/z52.rb +2 -14
- data/lib/epics/z53.rb +2 -14
- data/lib/epics/z54.rb +2 -14
- data/lib/epics/zsr.rb +5 -0
- data/lib/epics.rb +68 -5
- data/lib/letter/ini.erb +27 -6
- data/spec/aes_spec.rb +46 -0
- data/spec/auth_signature_handler_spec.rb +58 -0
- data/spec/builders_spec.rb +616 -0
- data/spec/certificate_handling_spec.rb +189 -0
- data/spec/client_setup_block_spec.rb +41 -0
- data/spec/client_spec.rb +143 -91
- data/spec/crypt_service_spec.rb +132 -0
- data/spec/date_range_spec.rb +46 -0
- data/spec/digest_resolver_spec.rb +164 -0
- data/spec/fixtures/bank_x509.pem +3 -0
- data/spec/fixtures/xml/haa.xml +40 -1
- data/spec/fixtures/xml/haa_receipt.xml +33 -30
- data/spec/fixtures/xml/haa_response_h004.xml +4 -0
- data/spec/fixtures/xml/haa_response_h005.xml +38 -0
- data/spec/fixtures/xml/hia_request_order_data.xml +24 -1
- data/spec/fixtures/xml/hpb_request.xml +1 -1
- data/spec/fixtures/xml/hpb_response_x509.xml +16 -0
- data/spec/fixtures/xml/htd_order_data_h005.xml +55 -0
- data/spec/fixtures/xml/jruby/hia.xml +20 -22
- data/spec/fixtures/xml/jruby/ini.xml +1 -3
- data/spec/fixtures/xml/ruby/hia.xml +21 -1
- data/spec/fixtures/xml/ruby/ini.xml +21 -1
- data/spec/handlers_spec.rb +267 -0
- data/spec/hpb_malformed_certificate_spec.rb +36 -0
- data/spec/key_file_decryption_spec.rb +27 -0
- data/spec/key_file_preservation_spec.rb +78 -0
- data/spec/keyring_spec.rb +349 -0
- data/spec/middleware/parse_ebics_spec.rb +2 -1
- data/spec/order_id_spec.rb +65 -0
- data/spec/orders/azv_spec.rb +63 -7
- data/spec/orders/b2b_spec.rb +68 -3
- data/spec/orders/bka_spec.rb +34 -4
- data/spec/orders/c2s_spec.rb +62 -9
- data/spec/orders/c52_spec.rb +34 -4
- data/spec/orders/c53_spec.rb +34 -4
- data/spec/orders/c54_spec.rb +36 -4
- data/spec/orders/c5n_spec.rb +36 -4
- data/spec/orders/camt_parity_spec.rb +80 -0
- data/spec/orders/ccs_spec.rb +62 -9
- data/spec/orders/cct_spec.rb +83 -9
- data/spec/orders/cd1_spec.rb +50 -7
- data/spec/orders/cdb_spec.rb +64 -7
- data/spec/orders/cdd_spec.rb +64 -7
- data/spec/orders/cds_spec.rb +74 -0
- data/spec/orders/cdz_spec.rb +67 -4
- data/spec/orders/cip_spec.rb +61 -9
- data/spec/orders/crz_spec.rb +67 -4
- data/spec/orders/fdl_spec.rb +143 -13
- data/spec/orders/ful_spec.rb +51 -10
- data/spec/orders/haa_spec.rb +115 -9
- data/spec/orders/hac_spec.rb +89 -10
- data/spec/orders/hev_spec.rb +1 -6
- data/spec/orders/hia_spec.rb +25 -22
- data/spec/orders/hkd_spec.rb +23 -4
- data/spec/orders/hpb_spec.rb +7 -4
- data/spec/orders/hpd_spec.rb +23 -4
- data/spec/orders/htd_spec.rb +23 -4
- data/spec/orders/ini_spec.rb +23 -18
- data/spec/orders/ptk_spec.rb +27 -4
- data/spec/orders/sta_spec.rb +129 -11
- data/spec/orders/vmk_spec.rb +36 -4
- data/spec/orders/wss_spec.rb +29 -3
- data/spec/orders/x_509_certificate_spec.rb +9 -1
- data/spec/orders/xct_spec.rb +63 -0
- data/spec/orders/xds_spec.rb +13 -6
- data/spec/orders/xe2_spec.rb +64 -7
- data/spec/orders/xe3_spec.rb +64 -7
- data/spec/orders/xek_spec.rb +31 -0
- data/spec/orders/yct_spec.rb +43 -0
- data/spec/orders/z01_spec.rb +34 -4
- data/spec/orders/z52_spec.rb +34 -4
- data/spec/orders/z53_spec.rb +34 -4
- data/spec/orders/z54_spec.rb +36 -4
- data/spec/orders/zsr_spec.rb +31 -0
- data/spec/request_factory_spec.rb +444 -0
- data/spec/response_business_error_spec.rb +45 -0
- data/spec/response_validation_spec.rb +23 -0
- data/spec/{key_spec.rb → signature_algorithm/rsa_pss_spec.rb} +4 -13
- data/spec/support/ebics_matcher.rb +17 -9
- data/spec/support/ebics_shared_examples.rb +642 -0
- data/spec/support/h005_client_helper.rb +23 -0
- data/spec/upload_digest_spec.rb +69 -0
- data/spec/user_signature_handler_spec.rb +25 -0
- data/spec/version_support_error_spec.rb +76 -0
- data/spec/xsd/{ebics_hev.xsd → H000/ebics_hev.xsd} +0 -0
- data/spec/xsd/H003/ebics.xsd +11 -0
- data/spec/xsd/H003/ebics_keymgmt_request.xsd +555 -0
- data/spec/xsd/H003/ebics_keymgmt_response.xsd +131 -0
- data/spec/xsd/H003/ebics_orders.xsd +1811 -0
- data/spec/xsd/H003/ebics_request.xsd +354 -0
- data/spec/xsd/H003/ebics_response.xsd +161 -0
- data/spec/xsd/{ebics_signature.xsd → H003/ebics_signature.xsd} +0 -0
- data/spec/xsd/H003/ebics_types.xsd +2361 -0
- data/spec/xsd/H003/xmldsig-core-schema.xsd +318 -0
- data/spec/xsd/H004/ebics_signature.xsd +217 -0
- data/spec/xsd/H005/ebics_H005.xsd +11 -0
- data/spec/xsd/H005/ebics_keymgmt_request_H005.xsd +523 -0
- data/spec/xsd/H005/ebics_keymgmt_response_H005.xsd +137 -0
- data/spec/xsd/H005/ebics_orders_H005.xsd +2094 -0
- data/spec/xsd/H005/ebics_request_H005.xsd +349 -0
- data/spec/xsd/H005/ebics_response_H005.xsd +167 -0
- data/spec/xsd/H005/ebics_signature_S002.xsd +177 -0
- data/spec/xsd/H005/ebics_types_H005.xsd +1885 -0
- data/spec/xsd/H005/xmldsig-core-schema.xsd +318 -0
- metadata +197 -36
- data/lib/epics/header_request.rb +0 -58
- data/lib/epics/middleware/xmlsig.rb +0 -16
- data/lib/epics/signer.rb +0 -40
- data/lib/epics/x_509_certificate.rb +0 -15
- data/lib/letter/ini_with_certs.erb +0 -335
- data/spec/generic_upload_spec.rb +0 -58
- data/spec/hpb_spec.rb +0 -15
- data/spec/signer_spec.rb +0 -34
- /data/spec/xsd/{ebics_H004.xsd → H004/ebics_H004.xsd} +0 -0
- /data/spec/xsd/{ebics_keymgmt_request_H004.xsd → H004/ebics_keymgmt_request_H004.xsd} +0 -0
- /data/spec/xsd/{ebics_keymgmt_response_H004.xsd → H004/ebics_keymgmt_response_H004.xsd} +0 -0
- /data/spec/xsd/{ebics_orders_H004.xsd → H004/ebics_orders_H004.xsd} +0 -0
- /data/spec/xsd/{ebics_request_H004.xsd → H004/ebics_request_H004.xsd} +0 -0
- /data/spec/xsd/{ebics_response_H004.xsd → H004/ebics_response_H004.xsd} +0 -0
- /data/spec/xsd/{ebics_types_H004.xsd → H004/ebics_types_H004.xsd} +0 -0
- /data/spec/xsd/{xmldsig-core-schema.xsd → H004/xmldsig-core-schema.xsd} +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
class Epics::Builders::OrderDetailsBuilder::Base
|
|
2
|
+
def initialize
|
|
3
|
+
Nokogiri::XML::Builder.new do |xml|
|
|
4
|
+
@xml = xml
|
|
5
|
+
xml.OrderDetails do
|
|
6
|
+
yield self
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def add_order_type
|
|
12
|
+
raise NotImplementedError
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def add_admin_order_type
|
|
16
|
+
raise NotImplementedError
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def add_order_id(order_id)
|
|
20
|
+
@xml.OrderID order_id.to_s(36).upcase.rjust(4, '0')
|
|
21
|
+
self
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def add_order_attribute(order_attribute)
|
|
25
|
+
raise NotImplementedError
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def add_standard_order_params(start_date = nil, end_date = nil)
|
|
29
|
+
date_range = create_date_range(start_date, end_date)
|
|
30
|
+
@xml.StandardOrderParams do |xml|
|
|
31
|
+
xml.parent.add_child(date_range) if date_range
|
|
32
|
+
end
|
|
33
|
+
self
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def add_fdl_order_params(format, start_date = nil, end_date = nil)
|
|
37
|
+
date_range = create_date_range(start_date, end_date)
|
|
38
|
+
@xml.FDLOrderParams do |xml|
|
|
39
|
+
xml.parent.add_child(date_range) if date_range
|
|
40
|
+
xml.FileFormat format
|
|
41
|
+
end
|
|
42
|
+
self
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def add_ful_order_params(format)
|
|
46
|
+
@xml.FULOrderParams do |xml|
|
|
47
|
+
xml.FileFormat format
|
|
48
|
+
end
|
|
49
|
+
self
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def add_btd_order_params
|
|
53
|
+
raise NotImplementedError
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def add_btu_order_params
|
|
57
|
+
raise NotImplementedError
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def doc
|
|
61
|
+
@xml.doc.root
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
protected
|
|
65
|
+
|
|
66
|
+
# Start and End are both mandatory within DateRange: no bounds means no range, one
|
|
67
|
+
# bound cannot be rendered at all.
|
|
68
|
+
def create_date_range(start_date, end_date)
|
|
69
|
+
return if start_date.nil? && end_date.nil?
|
|
70
|
+
|
|
71
|
+
if start_date.nil? || end_date.nil?
|
|
72
|
+
raise ArgumentError, 'DateRange requires both a start and an end date, got ' \
|
|
73
|
+
"start_date=#{start_date.inspect} end_date=#{end_date.inspect}"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
start_date = coerce_date(start_date, 'start_date')
|
|
77
|
+
end_date = coerce_date(end_date, 'end_date')
|
|
78
|
+
|
|
79
|
+
Nokogiri::XML::Builder.new do |xml|
|
|
80
|
+
xml.DateRange do
|
|
81
|
+
xml.Start start_date.iso8601
|
|
82
|
+
xml.End end_date.iso8601
|
|
83
|
+
end
|
|
84
|
+
end.doc.root
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Start and End are xs:date; Time and DateTime would render an xs:dateTime with an
|
|
88
|
+
# offset and be rejected.
|
|
89
|
+
def coerce_date(value, name)
|
|
90
|
+
case value
|
|
91
|
+
when String
|
|
92
|
+
puts "DEPRECATION WARNING: #{name} is a String, use Date instead"
|
|
93
|
+
Date.parse(value)
|
|
94
|
+
when DateTime, Time
|
|
95
|
+
value.to_date
|
|
96
|
+
else
|
|
97
|
+
value
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
class Epics::Builders::OrderDetailsBuilder::V2 < Epics::Builders::OrderDetailsBuilder::Base
|
|
2
|
+
def add_order_type(order_type)
|
|
3
|
+
@xml.OrderType order_type
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def add_admin_order_type(order_type)
|
|
7
|
+
raise Epics::VersionSupportError, 3.0
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def add_order_attribute(order_attribute)
|
|
11
|
+
@xml.OrderAttribute order_attribute
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def add_btd_order_params
|
|
15
|
+
raise Epics::VersionSupportError, 3.0
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def add_btu_order_params
|
|
19
|
+
raise Epics::VersionSupportError, 3.0
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
class Epics::Builders::OrderDetailsBuilder::V3 < Epics::Builders::OrderDetailsBuilder::Base
|
|
2
|
+
def add_order_type(_order_type)
|
|
3
|
+
raise Epics::VersionSupportError.new(3.0, 'below')
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def add_admin_order_type(order_type)
|
|
7
|
+
@xml.AdminOrderType order_type
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def add_order_attribute(_order_attribute)
|
|
11
|
+
raise Epics::VersionSupportError.new(3.0, 'below')
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def add_btd_order_params(
|
|
15
|
+
service_name:, msg_name:, scope: nil, service_option: nil,
|
|
16
|
+
container_type: nil, start_date: nil, end_date: nil, msg_name_version: nil, msg_name_variant: nil, msg_name_format: nil
|
|
17
|
+
)
|
|
18
|
+
@xml.BTDOrderParams do |xml|
|
|
19
|
+
xml.Service do
|
|
20
|
+
xml.ServiceName service_name
|
|
21
|
+
xml.Scope scope if scope
|
|
22
|
+
xml.ServiceOption service_option if service_option
|
|
23
|
+
xml.Container '', containerType: container_type if container_type
|
|
24
|
+
msg_name_attributes = {}
|
|
25
|
+
msg_name_attributes[:version] = msg_name_version if msg_name_version
|
|
26
|
+
msg_name_attributes[:variant] = msg_name_variant if msg_name_variant
|
|
27
|
+
msg_name_attributes[:format] = msg_name_format if msg_name_format
|
|
28
|
+
xml.MsgName msg_name, msg_name_attributes
|
|
29
|
+
end
|
|
30
|
+
xml.parent.add_child(create_date_range(start_date, end_date)) if start_date && end_date
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def add_btu_order_params(
|
|
35
|
+
filename:, service_name:, msg_name:, scope: nil, service_option: nil, container_type: nil, msg_name_version: nil, msg_name_variant: nil, msg_name_format: nil
|
|
36
|
+
)
|
|
37
|
+
@xml.BTUOrderParams fileName: filename do |xml|
|
|
38
|
+
xml.Service do
|
|
39
|
+
xml.ServiceName service_name
|
|
40
|
+
xml.Scope scope if scope
|
|
41
|
+
xml.ServiceOption service_option if service_option
|
|
42
|
+
xml.Container '', containerType: container_type if container_type
|
|
43
|
+
msg_name_attributes = {}
|
|
44
|
+
msg_name_attributes[:version] = msg_name_version if msg_name_version
|
|
45
|
+
msg_name_attributes[:variant] = msg_name_variant if msg_name_variant
|
|
46
|
+
msg_name_attributes[:format] = msg_name_format if msg_name_format
|
|
47
|
+
xml.MsgName msg_name, msg_name_attributes
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module Epics::Builders::OrderDetailsBuilder
|
|
2
|
+
ORDER_ATTRIBUTE_DZNNN = 'DZNNN'
|
|
3
|
+
ORDER_ATTRIBUTE_DZHNN = 'DZHNN'
|
|
4
|
+
ORDER_ATTRIBUTE_UZHNN = 'UZHNN'
|
|
5
|
+
ORDER_ATTRIBUTE_OZHNN = 'OZHNN'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
require 'epics/builders/order_details_builder/base'
|
|
9
|
+
require 'epics/builders/order_details_builder/v2'
|
|
10
|
+
require 'epics/builders/order_details_builder/v3'
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class Epics::Builders::RequestBuilder
|
|
2
|
+
def initialize(xml_builder)
|
|
3
|
+
@xml_builder = xml_builder
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def add_container_unsecured(&)
|
|
7
|
+
@xml_builder.create_unsecured(&)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def add_container_secured_no_pubkey_digests(&)
|
|
11
|
+
@xml_builder.create_secured_no_pubkey_digests(&)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def add_container_secured(&)
|
|
15
|
+
@xml_builder.create_secured(&)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def add_container_unsigned(&)
|
|
19
|
+
@xml_builder.create_unsigned(&)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def add_container_hev(&)
|
|
23
|
+
@xml_builder.create_hev(&)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
class Epics::Builders::StaticBuilder::Base
|
|
2
|
+
def initialize
|
|
3
|
+
Nokogiri::XML::Builder.new do |xml|
|
|
4
|
+
@xml = xml
|
|
5
|
+
xml.static do
|
|
6
|
+
yield self
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def add_host_id(host_id)
|
|
12
|
+
@xml.HostID host_id
|
|
13
|
+
self
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def add_nonce(data)
|
|
17
|
+
@xml.Nonce data
|
|
18
|
+
self
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def add_random_nonce
|
|
22
|
+
add_nonce SecureRandom.hex(16)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def add_timestamp(datetime)
|
|
26
|
+
@xml.Timestamp datetime.iso8601
|
|
27
|
+
self
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def add_partner_id(partner_id)
|
|
31
|
+
@xml.PartnerID partner_id
|
|
32
|
+
self
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def add_user_id(user_id)
|
|
36
|
+
@xml.UserID user_id
|
|
37
|
+
self
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def add_product(product, language)
|
|
41
|
+
@xml.Product product, Language: language
|
|
42
|
+
self
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def add_order_details
|
|
46
|
+
raise NotImplementedError
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def add_num_segments(num_segments)
|
|
50
|
+
@xml.NumSegments num_segments
|
|
51
|
+
self
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def add_bank_pubbey_digests(authentication_version, authentication_digest, encryption_version, encryption_digest, algorithm = 'sha256')
|
|
55
|
+
@xml.BankPubKeyDigests do
|
|
56
|
+
@xml.Authentication Base64.strict_encode64(authentication_digest), Version: authentication_version, Algorithm: "http://www.w3.org/2001/04/xmlenc##{algorithm}"
|
|
57
|
+
@xml.Encryption Base64.strict_encode64(encryption_digest), Version: encryption_version, Algorithm: "http://www.w3.org/2001/04/xmlenc##{algorithm}"
|
|
58
|
+
end
|
|
59
|
+
self
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def add_security_medium(security_medium)
|
|
63
|
+
@xml.SecurityMedium security_medium
|
|
64
|
+
self
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def add_transaction_id(transaction_id)
|
|
68
|
+
@xml.TransactionID transaction_id
|
|
69
|
+
self
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def doc
|
|
73
|
+
@xml.doc.root
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Epics::Builders::StaticBuilder
|
|
2
|
+
SECURITY_MEDIUM_0000 = '0000'
|
|
3
|
+
SECURITY_MEDIUM_0100 = '0100'
|
|
4
|
+
SECURITY_MEDIUM_0200 = '0200'
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
require 'epics/builders/static_builder/base'
|
|
8
|
+
require 'epics/builders/static_builder/v2'
|
|
9
|
+
require 'epics/builders/static_builder/v3'
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class Epics::Builders::TransferReceiptBuilder
|
|
2
|
+
def initialize
|
|
3
|
+
Nokogiri::XML::Builder.new do |xml|
|
|
4
|
+
@xml = xml
|
|
5
|
+
xml.TransferReceipt(authenticate: true) do
|
|
6
|
+
yield self
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def add_receipt_code(receipt_code)
|
|
12
|
+
@xml.ReceiptCode receipt_code
|
|
13
|
+
self
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def doc
|
|
17
|
+
@xml.doc.root
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
class Epics::Builders::XmlBuilder::Base
|
|
2
|
+
EBICS_REQUEST = 'ebicsRequest'
|
|
3
|
+
EBICS_UNSECURED_REQUEST = 'ebicsUnsecuredRequest'
|
|
4
|
+
EBICS_UNSIGNED_REQUEST = 'ebicsUnsignedRequest'
|
|
5
|
+
EBICS_NO_PUB_KEY_DIGESTS = 'ebicsNoPubKeyDigestsRequest'
|
|
6
|
+
EBICS_HEV = 'ebicsHEVRequest'
|
|
7
|
+
|
|
8
|
+
def initialize
|
|
9
|
+
Nokogiri::XML::Builder.new do |xml|
|
|
10
|
+
@xml = xml
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create_unsecured(&)
|
|
15
|
+
create_h00x(EBICS_UNSECURED_REQUEST, &)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def create_secured_no_pubkey_digests(&)
|
|
19
|
+
create_h00x(EBICS_NO_PUB_KEY_DIGESTS, true, &)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create_secured(&)
|
|
23
|
+
create_h00x(EBICS_REQUEST, true, &)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def create_unsigned(&)
|
|
27
|
+
create_h00x(EBICS_UNSIGNED_REQUEST, &)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def create_hev(&)
|
|
31
|
+
create_h000(EBICS_HEV, &)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def add_header
|
|
35
|
+
raise NotImplementedError
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def add_body
|
|
39
|
+
raise NotImplementedError
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def add_host_id(host_id)
|
|
43
|
+
@xml.HostID host_id
|
|
44
|
+
self
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def xml
|
|
48
|
+
@xml
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def to_xml
|
|
52
|
+
@xml.to_xml(save_with: Nokogiri::XML::Node::SaveOptions::AS_XML, encoding: 'utf-8')
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
protected
|
|
56
|
+
|
|
57
|
+
def h00x_version
|
|
58
|
+
raise NotImplementedError
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def h00x_namespace
|
|
62
|
+
raise NotImplementedError
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def h00x_schema_location
|
|
66
|
+
raise NotImplementedError
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
private
|
|
70
|
+
|
|
71
|
+
def create_h00x(container, secured = false)
|
|
72
|
+
namespaces = { xmlns: h00x_namespace }
|
|
73
|
+
namespaces['xmlns:ds'] = 'http://www.w3.org/2000/09/xmldsig#' if secured
|
|
74
|
+
namespaces['xmlns:xsi'] = 'http://www.w3.org/2001/XMLSchema-instance'
|
|
75
|
+
attributes = { Version: h00x_version, Revision: '1' }
|
|
76
|
+
attributes['xsi:schemaLocation'] = "#{h00x_namespace} #{h00x_schema_location}"
|
|
77
|
+
@xml.send(container, **namespaces, **attributes) do
|
|
78
|
+
yield self
|
|
79
|
+
end
|
|
80
|
+
self
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def create_h000(container)
|
|
84
|
+
namespaces = { xmlns: 'http://www.ebics.org/H000' }
|
|
85
|
+
namespaces['xmlns:xsi'] = 'http://www.w3.org/2001/XMLSchema-instance'
|
|
86
|
+
namespaces['xsi:schemaLocation'] = 'http://www.ebics.org/H000 http://www.ebics.org/H000/ebics_hev.xsd'
|
|
87
|
+
@xml.send(container, **namespaces) do
|
|
88
|
+
yield self
|
|
89
|
+
end
|
|
90
|
+
self
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class Epics::Builders::XmlBuilder::V24 < Epics::Builders::XmlBuilder::Base
|
|
2
|
+
def add_header
|
|
3
|
+
instance = Epics::Builders::HeaderBuilder::V2.new do |instance|
|
|
4
|
+
yield instance
|
|
5
|
+
end
|
|
6
|
+
@xml.parent.add_child(instance.doc)
|
|
7
|
+
self
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def add_body
|
|
11
|
+
instance = Epics::Builders::BodyBuilder::V2.new do |instance|
|
|
12
|
+
yield instance if block_given?
|
|
13
|
+
end
|
|
14
|
+
@xml.parent.add_child(instance.doc)
|
|
15
|
+
self
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
protected
|
|
19
|
+
|
|
20
|
+
def h00x_version
|
|
21
|
+
'H003'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def h00x_namespace
|
|
25
|
+
'http://www.ebics.org/H003'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def h00x_schema_location
|
|
29
|
+
'http://www.ebics.org/H003/ebics_H003.xsd'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class Epics::Builders::XmlBuilder::V25 < Epics::Builders::XmlBuilder::Base
|
|
2
|
+
def add_header
|
|
3
|
+
instance = Epics::Builders::HeaderBuilder::V2.new do |instance|
|
|
4
|
+
yield instance
|
|
5
|
+
end
|
|
6
|
+
@xml.parent.add_child(instance.doc)
|
|
7
|
+
self
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def add_body
|
|
11
|
+
instance = Epics::Builders::BodyBuilder::V2.new do |instance|
|
|
12
|
+
yield instance if block_given?
|
|
13
|
+
end
|
|
14
|
+
@xml.parent.add_child(instance.doc)
|
|
15
|
+
self
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
protected
|
|
19
|
+
|
|
20
|
+
def h00x_version
|
|
21
|
+
'H004'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def h00x_namespace
|
|
25
|
+
'urn:org:ebics:H004'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def h00x_schema_location
|
|
29
|
+
'http://www.ebics.org/H004/ebics_H004.xsd'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class Epics::Builders::XmlBuilder::V3 < Epics::Builders::XmlBuilder::Base
|
|
2
|
+
def add_header
|
|
3
|
+
instance = Epics::Builders::HeaderBuilder::V3.new do |instance|
|
|
4
|
+
yield instance
|
|
5
|
+
end
|
|
6
|
+
@xml.parent.add_child(instance.doc)
|
|
7
|
+
self
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def add_body
|
|
11
|
+
instance = Epics::Builders::BodyBuilder::V3.new do |instance|
|
|
12
|
+
yield instance if block_given?
|
|
13
|
+
end
|
|
14
|
+
@xml.parent.add_child(instance.doc)
|
|
15
|
+
self
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
protected
|
|
19
|
+
|
|
20
|
+
def h00x_version
|
|
21
|
+
'H005'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def h00x_namespace
|
|
25
|
+
'urn:org:ebics:H005'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def h00x_schema_location
|
|
29
|
+
'http://www.ebics.org/H005/ebics_H005.xsd'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Epics::Builders
|
|
2
|
+
end
|
|
3
|
+
|
|
4
|
+
require 'epics/builders/body_builder'
|
|
5
|
+
require 'epics/builders/data_encryption_info_builder'
|
|
6
|
+
require 'epics/builders/data_transfer_builder'
|
|
7
|
+
require 'epics/builders/header_builder'
|
|
8
|
+
require 'epics/builders/mutable_builder'
|
|
9
|
+
require 'epics/builders/order_details_builder'
|
|
10
|
+
require 'epics/builders/request_builder'
|
|
11
|
+
require 'epics/builders/static_builder'
|
|
12
|
+
require 'epics/builders/transfer_receipt_builder'
|
|
13
|
+
require 'epics/builders/xml_builder'
|
data/lib/epics/c2s.rb
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
class Epics::C2S < Epics::GenericUploadRequest
|
|
2
|
-
def
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
timestamp: timestamp,
|
|
6
|
-
order_type: 'C2S',
|
|
7
|
-
order_attribute: 'DZHNN',
|
|
8
|
-
order_params: {},
|
|
9
|
-
num_segments: 1,
|
|
10
|
-
mutable: { TransactionPhase: 'Initialisation' }
|
|
11
|
-
)
|
|
2
|
+
def to_xml
|
|
3
|
+
builder = request_factory.create_c2s(document_digest, transaction_key, **options)
|
|
4
|
+
builder.to_xml
|
|
12
5
|
end
|
|
13
6
|
end
|
data/lib/epics/c52.rb
CHANGED
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
class Epics::C52 < Epics::GenericRequest
|
|
2
|
-
def
|
|
3
|
-
|
|
4
|
-
nonce: nonce,
|
|
5
|
-
timestamp: timestamp,
|
|
6
|
-
order_type: 'C52',
|
|
7
|
-
order_attribute: 'DZHNN',
|
|
8
|
-
order_params: {
|
|
9
|
-
DateRange: {
|
|
10
|
-
Start: options[:from],
|
|
11
|
-
End: options[:to]
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
mutable: { TransactionPhase: 'Initialisation' }
|
|
15
|
-
)
|
|
2
|
+
def to_xml
|
|
3
|
+
request_factory.create_c52(options[:from], options[:to], **service_options).to_xml
|
|
16
4
|
end
|
|
17
5
|
end
|
data/lib/epics/c53.rb
CHANGED
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
class Epics::C53 < Epics::GenericRequest
|
|
2
|
-
def
|
|
3
|
-
|
|
4
|
-
nonce: nonce,
|
|
5
|
-
timestamp: timestamp,
|
|
6
|
-
order_type: 'C53',
|
|
7
|
-
order_attribute: 'DZHNN',
|
|
8
|
-
order_params: {
|
|
9
|
-
DateRange: {
|
|
10
|
-
Start: options[:from],
|
|
11
|
-
End: options[:to]
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
mutable: { TransactionPhase: 'Initialisation' }
|
|
15
|
-
)
|
|
2
|
+
def to_xml
|
|
3
|
+
request_factory.create_c53(options[:from], options[:to], **service_options).to_xml
|
|
16
4
|
end
|
|
17
5
|
end
|
data/lib/epics/c54.rb
CHANGED
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
class Epics::C54 < Epics::GenericRequest
|
|
2
|
-
def
|
|
3
|
-
|
|
4
|
-
nonce: nonce,
|
|
5
|
-
timestamp: timestamp,
|
|
6
|
-
order_type: 'C54',
|
|
7
|
-
order_attribute: 'DZHNN',
|
|
8
|
-
order_params: {
|
|
9
|
-
DateRange: {
|
|
10
|
-
Start: options[:from],
|
|
11
|
-
End: options[:to]
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
mutable: { TransactionPhase: 'Initialisation' }
|
|
15
|
-
)
|
|
2
|
+
def to_xml
|
|
3
|
+
request_factory.create_c54(options[:from], options[:to], **service_options).to_xml
|
|
16
4
|
end
|
|
17
5
|
end
|
data/lib/epics/c5n.rb
CHANGED
|
@@ -1,17 +1,6 @@
|
|
|
1
1
|
class Epics::C5N < Epics::GenericRequest
|
|
2
|
-
def
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
timestamp: timestamp,
|
|
6
|
-
order_type: 'C5N',
|
|
7
|
-
order_attribute: 'DZHNN',
|
|
8
|
-
order_params: {
|
|
9
|
-
DateRange: {
|
|
10
|
-
Start: options[:from],
|
|
11
|
-
End: options[:to]
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
mutable: { TransactionPhase: 'Initialisation' }
|
|
15
|
-
)
|
|
2
|
+
def to_xml
|
|
3
|
+
builder = request_factory.create_c5n(options[:from], options[:to])
|
|
4
|
+
builder.to_xml
|
|
16
5
|
end
|
|
17
6
|
end
|
data/lib/epics/ccs.rb
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
class Epics::CCS < Epics::GenericUploadRequest
|
|
2
|
-
def
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
timestamp: timestamp,
|
|
6
|
-
order_type: 'CCS',
|
|
7
|
-
order_attribute: 'DZHNN',
|
|
8
|
-
order_params: {},
|
|
9
|
-
num_segments: 1,
|
|
10
|
-
mutable: { TransactionPhase: 'Initialisation' }
|
|
11
|
-
)
|
|
2
|
+
def to_xml
|
|
3
|
+
builder = request_factory.create_ccs(document_digest, transaction_key, **options)
|
|
4
|
+
builder.to_xml
|
|
12
5
|
end
|
|
13
6
|
end
|
data/lib/epics/cct.rb
CHANGED
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
class Epics::CCT < Epics::GenericUploadRequest
|
|
2
|
-
def
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
timestamp: timestamp,
|
|
6
|
-
order_type: 'CCT',
|
|
7
|
-
order_attribute: 'OZHNN',
|
|
8
|
-
order_params: {},
|
|
9
|
-
num_segments: 1,
|
|
10
|
-
mutable: { TransactionPhase: 'Initialisation' }
|
|
11
|
-
)
|
|
2
|
+
def to_xml
|
|
3
|
+
builder = request_factory.create_cct(document_digest, transaction_key, **options)
|
|
4
|
+
builder.to_xml
|
|
12
5
|
end
|
|
13
6
|
end
|