package libebics import ( "bytes" "compress/zlib" "encoding/base64" "encoding/xml" "fmt" ) 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) orderData := S002SignaturePubKeyOrderDataType{ Esig: "http://www.ebics.org/S002", Ds: "http://www.w3.org/2000/09/xmldsig#", SignaturePubKeyInfo: S002SignaturePubKeyInfoType{ X509Data: DSIGX509Data{ DSIGX509Certificate: base64.StdEncoding.EncodeToString( signatureCertificate.x509Certificate, // TODO Proper Base64 Marshalling ), }, SignatureVersion: signatureCertificate.ebicsCertificateType, }, 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 := H005UnsecuredRequest{ Xmlns: "urn:org:ebics:H005", Version: "H005", Revision: "1", Header: H005UnsecuredRequestHeader{ Authenticate: true, Static: H005UnsecuredRequestStaticHeaderType{ HostID: "MULTIVIA", PartnerID: "MV008078", UserID: "SCHOLZ01", Product: H005ProductElementType{ Language: "en", Name: "libebics", }, OrderDetails: H005UnsecuredReqOrderDetailsType{ AdminOrderType: "INI", }, SecurityMedium: "0000", }, }, Body: H005UnsecuredRequestBody{ DataTransfer: H005UnsecuredRequestDataTransfer{ OrderData: base64.StdEncoding.EncodeToString( zlibWriterBuffer.Bytes(), ), }, }, } marshal, err := xml.MarshalIndent(ini, "", " ") 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 := H005HIARequestOrderDataType{ Xmlns: "urn:org:ebics:H005", Esig: "http://www.ebics.org/S002", Ds: "http://www.w3.org/2000/09/xmldsig#", AuthenticationPubKeyInfo: H005AuthenticationPubKeyInfo{ X509Data: DSIGX509Data{ DSIGX509Certificate: base64.StdEncoding.EncodeToString( authenticationCertificate.x509Certificate, // TODO Proper Base64 Marshalling ), }, AuthenticationVersion: authenticationCertificate.ebicsCertificateType, }, EncryptionPubKeyInfo: H005EncryptionPubKeyInfo{ X509Data: DSIGX509Data{ DSIGX509Certificate: base64.StdEncoding.EncodeToString( encryptionCertificate.x509Certificate, // TODO Proper Base64 Marshalling ), }, EncryptionVersion: encryptionCertificate.ebicsCertificateType, }, 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 := H005UnsecuredRequest{ Xmlns: "urn:org:ebics:H005", Version: "H005", Revision: "1", Header: H005UnsecuredRequestHeader{ Authenticate: true, Static: H005UnsecuredRequestStaticHeaderType{ HostID: "MULTIVIA", PartnerID: "MV008078", UserID: "SCHOLZ01", Product: H005ProductElementType{ Language: "en", Name: "libebics", }, OrderDetails: H005UnsecuredReqOrderDetailsType{ AdminOrderType: "HIA", }, SecurityMedium: "0000", }, }, Body: H005UnsecuredRequestBody{ DataTransfer: H005UnsecuredRequestDataTransfer{ OrderData: base64.StdEncoding.EncodeToString( zlibWriterBuffer.Bytes(), ), }, }, } marshal, err := xml.MarshalIndent(ini, "", " ") return (xml.Header + string(marshal)), err }