1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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()
}
|