From 11cf616e997d06d1a4ae9cb5ad689e3b3f7f6068 Mon Sep 17 00:00:00 2001 From: Martin Dosch Date: Sat, 23 Apr 2022 23:34:03 +0200 Subject: [PATCH] Change from encoding/xml to etree. --- iqstructs.go | 20 -------------------- ox.go | 27 +++++++++++++++++---------- 2 files changed, 17 insertions(+), 30 deletions(-) diff --git a/iqstructs.go b/iqstructs.go index 4d61170..5276655 100644 --- a/iqstructs.go +++ b/iqstructs.go @@ -52,26 +52,6 @@ type OxCryptElement struct { } `xml:"payload"` } -// Created with https://github.com/miku/zek -type OxPublicKey struct { - XMLName xml.Name `xml:"pubsub"` - Text string `xml:",chardata"` - Xmlns string `xml:"xmlns,attr"` - Items struct { - Text string `xml:",chardata"` - Node string `xml:"node,attr"` - Item struct { - Text string `xml:",chardata"` - ID string `xml:"id,attr"` - Pubkey []struct { - Text string `xml:",chardata"` - Xmlns string `xml:"xmlns,attr"` - Data string `xml:"data"` - } `xml:"pubkey"` - } `xml:"item"` - } `xml:"items"` -} - // Created with https://github.com/miku/zek type OxPublicKeysList struct { XMLName xml.Name `xml:"pubsub"` diff --git a/ox.go b/ox.go index 934f869..fcf0908 100644 --- a/ox.go +++ b/ox.go @@ -320,16 +320,17 @@ func oxGenPrivKey(jid string, client *xmpp.Client, passphrase string) error { func oxRecvPublicKeys(client *xmpp.Client, recipient string, fingerprint string) (*crypto.KeyRing, error) { - var oxPublicKeyRequest IQPubsubRequest - var oxPublicKeyXML OxPublicKey - oxPublicKeyRequest.Xmlns = nsPubsub - oxPublicKeyRequest.Items.Node = nsOxPubKeys + ":" + fingerprint - oxPublicKeyRequest.Items.MaxItems = "1" - opk, err := xml.Marshal(oxPublicKeyRequest) + opkr := etree.NewDocument() + opkrPs := opkr.CreateElement("pubsub") + opkrPs.CreateAttr("xmlns", nsPubsub) + opkrPsItems := opkrPs.CreateElement("items") + opkrPsItems.CreateAttr("node", nsOxPubKeys+":"+fingerprint) + opkrPsItems.CreateAttr("max_items", "1") + opkrString, err := opkr.WriteToString() if err != nil { return nil, err } - oxPublicKey, err := sendIQ(client, recipient, "get", string(opk)) + oxPublicKey, err := sendIQ(client, recipient, "get", opkrString) if err != nil { return nil, err } @@ -337,7 +338,8 @@ func oxRecvPublicKeys(client *xmpp.Client, recipient string, return nil, errors.New("Error while requesting public key for " + recipient) } - err = xml.Unmarshal(oxPublicKey.Query, &oxPublicKeyXML) + oxPublicKeyXML := etree.NewDocument() + err = oxPublicKeyXML.ReadFromBytes(oxPublicKey.Query) if err != nil { return nil, err } @@ -345,8 +347,13 @@ func oxRecvPublicKeys(client *xmpp.Client, recipient string, if err != nil { return nil, err } - for _, r := range oxPublicKeyXML.Items.Item.Pubkey { - decodedPubKey, err := base64.StdEncoding.DecodeString(r.Data) + oxPublicKeyXMLPubsub := oxPublicKeyXML.SelectElement("pubsub") + oxPublicKeyXMLItems := oxPublicKeyXMLPubsub.SelectElement("items") + oxPublicKeyXMLItem := oxPublicKeyXMLItems.SelectElement("item") + oxPublicKeyXMLPubkeys := oxPublicKeyXMLItem.SelectElements("pubkey") + for _, r := range oxPublicKeyXMLPubkeys { + data := r.SelectElement("data") + decodedPubKey, err := base64.StdEncoding.DecodeString(data.Text()) if err != nil { return nil, err }