diff --git a/iqstructs.go b/iqstructs.go index 5276655..c9196dd 100644 --- a/iqstructs.go +++ b/iqstructs.go @@ -30,28 +30,6 @@ type OxMessageElement struct { } // Created with https://github.com/miku/zek -type OxCryptElement struct { - XMLName xml.Name `xml:"signcrypt"` - Text string `xml:",chardata"` - Xmlns string `xml:"xmlns,attr"` - To struct { - Text string `xml:",chardata"` - Jid string `xml:"jid,attr"` - } `xml:"to"` - Time struct { - Text string `xml:",chardata"` - Stamp string `xml:"stamp,attr"` - } `xml:"time"` - Rpad string `xml:"rpad"` - Payload struct { - Text string `xml:",chardata"` - Body struct { - Text string `xml:",chardata"` - Xmlns string `xml:"xmlns,attr"` - } `xml:"body"` - } `xml:"payload"` -} - // Created with https://github.com/miku/zek type OxPublicKeysList struct { XMLName xml.Name `xml:"pubsub"` @@ -76,18 +54,6 @@ type OxPublicKeysList struct { } `xml:"items"` } -// Created with https://github.com/miku/zek -type IQPubsubRequest 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"` - MaxItems string `xml:"max_items,attr"` - } `xml:"items"` -} - // Created with https://github.com/miku/zek type IQDiscoItemsType struct { XMLName xml.Name `xml:"query"` diff --git a/ox.go b/ox.go index fcf0908..b6e25ea 100644 --- a/ox.go +++ b/ox.go @@ -373,21 +373,23 @@ func oxRecvPublicKeys(client *xmpp.Client, recipient string, } func oxGetPublicKeyRing(client *xmpp.Client, recipient string) (*crypto.KeyRing, error) { - var oxPublicKeyListRequest IQPubsubRequest var oxPublicKeyListXML OxPublicKeysList publicKeyRing, err := crypto.NewKeyRing(nil) if err != nil { return nil, err } - oxPublicKeyListRequest.Xmlns = nsPubsub - oxPublicKeyListRequest.Items.Node = nsOxPubKeys - oxPublicKeyListRequest.Items.MaxItems = "1" - opkl, err := xml.Marshal(oxPublicKeyListRequest) + oxPubKeyListReq := etree.NewDocument() + oxPubKeyListReqPs := oxPubKeyListReq.CreateElement("pubsub") + oxPubKeyListReqPs.CreateAttr("xmlns", nsPubsub) + oxPubKeyListReqPsItems := oxPubKeyListReqPs.CreateElement("items") + oxPubKeyListReqPsItems.CreateAttr("node", nsOxPubKeys) + oxPubKeyListReqPsItems.CreateAttr("max_items", "1") + opkl, err := oxPubKeyListReq.WriteToString() if err != nil { log.Fatal(err) } - oxPublicKeyList, err := sendIQ(client, recipient, "get", string(opkl)) + oxPublicKeyList, err := sendIQ(client, recipient, "get", opkl) if err != nil { log.Fatal(err) } @@ -487,7 +489,6 @@ func oxGetPublicKeyRing(client *xmpp.Client, recipient string) (*crypto.KeyRing, func oxEncrypt(client *xmpp.Client, oxPrivKey *crypto.Key, recipient string, keyRing *crypto.KeyRing, message string) (string, error) { - var oxCryptMessage OxCryptElement var oxMessage OxMessageElement privKeyRing, err := crypto.NewKeyRing(oxPrivKey) if err != nil { @@ -501,13 +502,20 @@ func oxEncrypt(client *xmpp.Client, oxPrivKey *crypto.Key, recipient string, _ = keyRing.AddKey(ownKey) } } - oxCryptMessage.Xmlns = nsOx - oxCryptMessage.To.Jid = recipient - oxCryptMessage.Time.Stamp = time.Now().UTC().Format("2006-01-02T15:04:05Z") - oxCryptMessage.Rpad = getRpad() - oxCryptMessage.Payload.Body.Xmlns = nsJabberClient - oxCryptMessage.Payload.Body.Text = message - ocm, err := xml.Marshal(oxCryptMessage) + oxCryptMessage := etree.NewDocument() + oxCryptMessagePs := oxCryptMessage.CreateElement("pubsub") + oxCryptMessagePs.CreateAttr("xmlns", nsOx) + oxCryptMessagePsTo := oxCryptMessagePs.CreateElement("to") + oxCryptMessagePsTo.CreateAttr("jid", recipient) + oxCryptMessagePsTime := oxCryptMessagePs.CreateElement("time") + oxCryptMessagePsTime.CreateAttr("stamp", time.Now().UTC().Format("2006-01-02T15:04:05Z")) + oxCryptMessagePsRpad := oxCryptMessagePs.CreateElement("rpad") + oxCryptMessagePsRpad.CreateText(getRpad()) + oxCryptMessagePsPayload := oxCryptMessagePs.CreateElement("payload") + oxCryptMessagePsPayloadBody := oxCryptMessagePsPayload.CreateElement("body") + oxCryptMessagePsPayloadBody.CreateAttr("xmlns", nsJabberClient) + oxCryptMessagePsPayloadBody.CreateText(message) + ocm, err := oxCryptMessage.WriteToString() if err != nil { return "error", err }