summaryrefslogtreecommitdiff
path: root/order.go
diff options
context:
space:
mode:
Diffstat (limited to 'order.go')
-rw-r--r--order.go110
1 files changed, 108 insertions, 2 deletions
diff --git a/order.go b/order.go
index eea8d5c..38578a0 100644
--- a/order.go
+++ b/order.go
@@ -61,13 +61,36 @@ type EbicsDataTransfer struct {
type EbicsSignaturePubKeyOrderData struct {
XMLName xml.Name `xml:"esig:SignaturePubKeyOrderData"`
- Esig string `xml:"xmlns:esi,attr"`
+ Esig string `xml:"xmlns:esig,attr"`
Ds string `xml:"xmlns:ds,attr"`
SignaturePubKeyInfo EbicsSignaturePubKeyInfo `xml:"esig:SignaturePubKeyInfo"`
PartnerID string `xml:"esig:PartnerID"`
UserID string `xml:"esig:UserID"`
}
+type EbicsHiaRequestOrderData struct {
+ XMLName xml.Name `xml:"HIARequestOrderData"`
+ Xmlns string `xml:"xmlns,attr"`
+ Esig string `xml:"xmlns:esig,attr"`
+ Ds string `xml:"xmlns:ds,attr"`
+ AuthenticationPubKeyInfo EbicsAuthenticationPubKeyInfo `xml:"AuthenticationPubKeyInfo"`
+ EncryptionPubKeyInfo EbicsEncryptionPubKeyInfo `xml:"EncryptionPubKeyInfo"`
+ PartnerID string `xml:"PartnerID"`
+ UserID string `xml:"UserID"`
+}
+
+type EbicsAuthenticationPubKeyInfo struct {
+ XMLName xml.Name `xml:"AuthenticationPubKeyInfo"`
+ X509Data EbicsX509Data `xml:"ds:X509Data"`
+ AuthenticationVersion string `xml:"AuthenticationVersion"` // TODO Use ENUM
+}
+
+type EbicsEncryptionPubKeyInfo struct {
+ XMLName xml.Name `xml:"EncryptionPubKeyInfo"`
+ X509Data EbicsX509Data `xml:"ds:X509Data"`
+ EncryptionVersion string `xml:"EncryptionVersion"` // TODO Use ENUM
+}
+
type EbicsSignaturePubKeyInfo struct {
XMLName xml.Name `xml:"esig:SignaturePubKeyInfo"`
X509Data EbicsX509Data `xml:"ds:X509Data"`
@@ -90,10 +113,12 @@ func GenerateIniRequest(signatureCertificate EbicsCertificate) (string, error) {
zlibWriter := zlib.NewWriter(&zlibWriterBuffer)
orderData := EbicsSignaturePubKeyOrderData{
+ Esig: "http://www.ebics.org/S002",
+ Ds: "http://www.w3.org/2000/09/xmldsig#",
SignaturePubKeyInfo: EbicsSignaturePubKeyInfo{
X509Data: EbicsX509Data{
X509Certificate: base64.StdEncoding.EncodeToString(
- signatureCertificate.x509Certificate,
+ signatureCertificate.x509Certificate, // TODO Proper Base64 Marshalling
),
},
SignatureVersion: signatureCertificate.ebicsCertificateType.String(),
@@ -143,3 +168,84 @@ func GenerateIniRequest(signatureCertificate EbicsCertificate) (string, error) {
return (xml.Header + string(marshal)), err
}
+
+func GenerateHiaRequest(authenticationCertificate EbicsCertificate, encryptionCertificate EbicsCertificate) (string, error) {
+
+ if authenticationCertificate.ebicsCertificateType != X002 {
+ return "", fmt.Errorf("authentication certificate has invalid certificate type %s", authenticationCertificate.ebicsCertificateType.String())
+ }
+
+ if encryptionCertificate.ebicsCertificateType != E002 {
+ return "", fmt.Errorf("encryption certificate has invalid certificate type %s", encryptionCertificate.ebicsCertificateType.String())
+ }
+
+ var zlibWriterBuffer bytes.Buffer
+ zlibWriter := zlib.NewWriter(&zlibWriterBuffer)
+
+ orderData := EbicsHiaRequestOrderData{
+ Xmlns: "urn:org:ebics:H005",
+ Esig: "http://www.ebics.org/S002",
+ Ds: "http://www.w3.org/2000/09/xmldsig#",
+ AuthenticationPubKeyInfo: EbicsAuthenticationPubKeyInfo{
+ X509Data: EbicsX509Data{
+ X509Certificate: base64.StdEncoding.EncodeToString(
+ authenticationCertificate.x509Certificate, // TODO Proper Base64 Marshalling
+ ),
+ },
+ AuthenticationVersion: authenticationCertificate.ebicsCertificateType.String(),
+ },
+ EncryptionPubKeyInfo: EbicsEncryptionPubKeyInfo{
+ X509Data: EbicsX509Data{
+ X509Certificate: base64.StdEncoding.EncodeToString(
+ encryptionCertificate.x509Certificate, // TODO Proper Base64 Marshalling
+ ),
+ },
+ EncryptionVersion: encryptionCertificate.ebicsCertificateType.String(),
+ },
+ PartnerID: "MV008078",
+ UserID: "SCHOLZ01",
+ }
+
+ orderData_xml, err := xml.Marshal(orderData)
+ if err != nil {
+ return "", err
+ }
+
+ fmt.Print(string(orderData_xml))
+
+ zlibWriter.Write(orderData_xml)
+ zlibWriter.Close()
+
+ ini := EbicsUnsecuredRequest{
+ Xmlns: "urn:org:ebics:H005",
+ Version: "H005",
+ Revision: "1",
+ Header: EbicsHeader{
+ Authenticate: true,
+ Static: EbicsHeaderStatic{
+ HostID: "MULTIVIA",
+ PartnerID: "MV008078",
+ UserID: "SCHOLZ01",
+ Product: EbicsProduct{
+ Language: "en",
+ Name: "libebics",
+ },
+ OrderDetails: EbicsOrderDetails{
+ AdminOrderType: "HIA",
+ },
+ SecurityMedium: "0000",
+ },
+ },
+ Body: EbicsBody{
+ DataTransfer: EbicsDataTransfer{
+ OrderData: base64.StdEncoding.EncodeToString(
+ zlibWriterBuffer.Bytes(),
+ ),
+ },
+ },
+ }
+
+ marshal, err := xml.MarshalIndent(ini, "", " ")
+
+ return (xml.Header + string(marshal)), err
+}