diff options
Diffstat (limited to 'order.go')
| -rw-r--r-- | order.go | 110 |
1 files changed, 108 insertions, 2 deletions
@@ -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 +} |
