diff options
Diffstat (limited to 'order.go')
| -rw-r--r-- | order.go | 84 |
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() +} |
