summaryrefslogtreecommitdiff
path: root/order.go
diff options
context:
space:
mode:
Diffstat (limited to 'order.go')
-rw-r--r--order.go84
1 files changed, 84 insertions, 0 deletions
diff --git a/order.go b/order.go
new file mode 100644
index 0000000..bf90078
--- /dev/null
+++ b/order.go
@@ -0,0 +1,84 @@
+package libebics
+
+import (
+ "bytes"
+ "compress/zlib"
+ "encoding/base64"
+ "fmt"
+
+ "github.com/beevik/etree"
+)
+
+func GenerateIniRequest(signatureCertificate EbicsCertificate) (string, error) {
+ if signatureCertificate.ebicsCertificateType != A005 &&
+ signatureCertificate.ebicsCertificateType != A006 {
+ return "", fmt.Errorf("signature certificate has invalid certificate type %s", signatureCertificate.ebicsCertificateType.String())
+ }
+ var zlibWriterBuffer bytes.Buffer
+ zlibWriter := zlib.NewWriter(&zlibWriterBuffer)
+
+ var orderdata *etree.Element
+
+ ini := etree.NewDocument()
+ ini.Indent(2) // Not technically efficient but nice for debugging purposes
+ ini.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`)
+ ini.CreateChild("ebicsUnsecuredRequest", func(e *etree.Element) {
+ e.CreateAttr("xmlns", "urn:org:ebics:H005")
+ e.CreateAttr("Version", "H005")
+ e.CreateAttr("Revision", "1")
+
+ e.CreateChild("header", func(e *etree.Element) {
+ e.CreateAttr("authenticate", "true")
+ e.CreateChild("static", func(e *etree.Element) {
+ e.CreateElement("HostID").CreateText("MULTIVIA")
+ e.CreateElement("PartnerID").CreateText("MV008078")
+ e.CreateElement("UserID").CreateText("SCHOLZ01")
+ e.CreateChild("Product", func(e *etree.Element) {
+ e.CreateAttr("Language", "en")
+ e.CreateText("libebics")
+ })
+ e.CreateElement("OrderDetails").CreateElement("AdminOrderType").CreateText("INI")
+ e.CreateElement("SecurityMedium").CreateText("0000")
+ })
+ e.CreateElement("mutable")
+ })
+
+ e.CreateChild("body", func(e *etree.Element) {
+ orderdata = e.CreateElement("DataTransfer").CreateElement("OrderData")
+ })
+ })
+
+ orderdata_content := etree.NewDocument()
+ orderdata_content.Indent(2) // Not technically efficient but nice for debugging purposes
+ orderdata_content.CreateChild("esig:SignaturePubKeyOrderData", func(e *etree.Element) {
+ e.CreateAttr("xmlns:esig", "http://www.ebics.org/S002")
+ e.CreateAttr("xmlns:ds", "http://www.w3.org/2000/09/xmldsig#")
+ e.CreateChild("esig:SignaturePubKeyInfo", func(e *etree.Element) {
+ e.CreateChild("ds:X509Data", func(e *etree.Element) {
+ e.CreateElement("ds:X509Certificate").CreateText(
+ base64.StdEncoding.EncodeToString(
+ signatureCertificate.x509Certificate,
+ ),
+ )
+ })
+ e.CreateElement("esig:SignatureVersion").CreateText(signatureCertificate.ebicsCertificateType.String())
+ })
+ e.CreateElement("esig:PartnerID").CreateText("MV008078")
+ e.CreateElement("esig:UserID").CreateText("SCHOLZ01")
+ })
+
+ orderdata_bytes, err := orderdata_content.WriteToBytes()
+ if err != nil {
+ panic(err.Error())
+ }
+ zlibWriter.Write(orderdata_bytes)
+ zlibWriter.Close()
+
+ orderdata.CreateText(
+ base64.StdEncoding.EncodeToString(
+ zlibWriterBuffer.Bytes(),
+ ),
+ )
+
+ return ini.WriteToString()
+}