From 09557cf3f9a3d44688de3f1d92c8bc3086705510 Mon Sep 17 00:00:00 2001 From: Martin Dosch Date: Thu, 19 Jan 2023 20:01:07 +0100 Subject: [PATCH] moar progress --- ox.go | 43 ++++-------------------------------- oxstanzas.go | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 40 deletions(-) diff --git a/ox.go b/ox.go index d7ff055..492d762 100644 --- a/ox.go +++ b/ox.go @@ -446,16 +446,9 @@ func oxGetPublicKeyRing(client *xmpp.Client, iqc chan xmpp.IQ, if err != nil { return nil, err } - - 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() + opkl, err := oxGetPubKeyRingRequest() if err != nil { - log.Fatal(err) + return nil, err } oxPublicKeyList, err := sendIQ(client, iqc, recipient, "get", opkl) if err != nil { @@ -600,20 +593,7 @@ func oxEncrypt(client *xmpp.Client, iqc chan xmpp.IQ, oxPrivKey *crypto.Key, _ = keyRing.AddKey(ownKey) } } - oxCryptMessage := etree.NewDocument() - oxCryptMessageSc := oxCryptMessage.CreateElement("signcrypt") - oxCryptMessageSc.CreateAttr("xmlns", nsOx) - oxCryptMessageScTo := oxCryptMessageSc.CreateElement("to") - oxCryptMessageScTo.CreateAttr("jid", recipient) - oxCryptMessageScTime := oxCryptMessageSc.CreateElement("time") - oxCryptMessageScTime.CreateAttr("stamp", time.Now().UTC().Format("2006-01-02T15:04:05Z")) - oxCryptMessageScRpad := oxCryptMessageSc.CreateElement("rpad") - oxCryptMessageScRpad.CreateText(getRpad(len(message))) - oxCryptMessageScPayload := oxCryptMessageSc.CreateElement("payload") - oxCryptMessageScPayloadBody := oxCryptMessageScPayload.CreateElement("body") - oxCryptMessageScPayloadBody.CreateAttr("xmlns", nsJabberClient) - oxCryptMessageScPayloadBody.CreateText(message) - ocm, err := oxCryptMessage.WriteToString() + ocm, err := oxCryptMessage(recipient, message) if err != nil { return "error", err } @@ -622,24 +602,9 @@ func oxEncrypt(client *xmpp.Client, iqc chan xmpp.IQ, oxPrivKey *crypto.Key, if err != nil { return "error", err } - om := etree.NewDocument() - omMessage := om.CreateElement("message") - omMessage.CreateAttr("to", recipient) - omMessage.CreateAttr("id", getID()) - omMessageStore := omMessage.CreateElement("store") - omMessageStore.CreateAttr("xmlns", nsHints) - omMessageEme := omMessage.CreateElement("encryption") - omMessageEme.CreateAttr("xmlns", nsEme) - omMessageEme.CreateAttr("namespace", nsOx) - omMessageOpgp := omMessage.CreateElement("openpgp") - omMessageOpgp.CreateAttr("xmlns", nsOx) - omMessageOpgp.CreateText(base64.StdEncoding.EncodeToString(pgpMessage.Data)) - omMessageBody := omMessage.CreateElement("body") - omMessageBody.CreateText(oxAltBody) - oms, err := om.WriteToString() + oms, err := oxMessage(recipient, pgpMessage) if err != nil { return "error", err } - return oms, nil } diff --git a/oxstanzas.go b/oxstanzas.go index 4e7ed3f..1c4f914 100644 --- a/oxstanzas.go +++ b/oxstanzas.go @@ -1,10 +1,13 @@ package main import ( + "encoding/base64" "errors" "strings" + "time" - "github.com/beevik/etree" // BSD-2-clause + "github.com/ProtonMail/gopenpgp/v2/crypto" // MIT License + "github.com/beevik/etree" // BSD-2-clause ) func oxNodeListRequest() (string, error) { @@ -178,3 +181,60 @@ func oxRecvPubKeysRequest(fingerprint string) (string, error) { } return output, nil } + +func oxGetPubKeyRingRequest() (string, error) { + oxPubKeyListReq := etree.NewDocument() + oxPubKeyListReqPs := oxPubKeyListReq.CreateElement("pubsub") + oxPubKeyListReqPs.CreateAttr("xmlns", nsPubsub) + oxPubKeyListReqPsItems := oxPubKeyListReqPs.CreateElement("items") + oxPubKeyListReqPsItems.CreateAttr("node", nsOxPubKeys) + oxPubKeyListReqPsItems.CreateAttr("max_items", "1") + output, err := oxPubKeyListReq.WriteToString() + if err != nil { + return output, err + } + return output, err +} + +func oxCryptMessage(recipient string, message string) (string, error) { + oxCryptMessage := etree.NewDocument() + oxCryptMessageSc := oxCryptMessage.CreateElement("signcrypt") + oxCryptMessageSc.CreateAttr("xmlns", nsOx) + oxCryptMessageScTo := oxCryptMessageSc.CreateElement("to") + oxCryptMessageScTo.CreateAttr("jid", recipient) + oxCryptMessageScTime := oxCryptMessageSc.CreateElement("time") + oxCryptMessageScTime.CreateAttr("stamp", time.Now().UTC().Format("2006-01-02T15:04:05Z")) + oxCryptMessageScRpad := oxCryptMessageSc.CreateElement("rpad") + oxCryptMessageScRpad.CreateText(getRpad(len(message))) + oxCryptMessageScPayload := oxCryptMessageSc.CreateElement("payload") + oxCryptMessageScPayloadBody := oxCryptMessageScPayload.CreateElement("body") + oxCryptMessageScPayloadBody.CreateAttr("xmlns", nsJabberClient) + oxCryptMessageScPayloadBody.CreateText(message) + output, err := oxCryptMessage.WriteToString() + if err != nil { + return output, err + } + return output, nil +} + +func oxMessage(recipient string, pgpMessage *crypto.PGPMessage) (string, error) { + om := etree.NewDocument() + omMessage := om.CreateElement("message") + omMessage.CreateAttr("to", recipient) + omMessage.CreateAttr("id", getID()) + omMessageStore := omMessage.CreateElement("store") + omMessageStore.CreateAttr("xmlns", nsHints) + omMessageEme := omMessage.CreateElement("encryption") + omMessageEme.CreateAttr("xmlns", nsEme) + omMessageEme.CreateAttr("namespace", nsOx) + omMessageOpgp := omMessage.CreateElement("openpgp") + omMessageOpgp.CreateAttr("xmlns", nsOx) + omMessageOpgp.CreateText(base64.StdEncoding.EncodeToString(pgpMessage.Data)) + omMessageBody := omMessage.CreateElement("body") + omMessageBody.CreateText(oxAltBody) + output, err := om.WriteToString() + if err != nil { + return output, err + } + return output, nil +}