diff --git a/const.go b/const.go index a47dd9e..ad0bca1 100644 --- a/const.go +++ b/const.go @@ -21,5 +21,6 @@ const ( oxAltBody = "This message is encrypted (XEP-0373: OpenPGP for XMPP)." pubsubPubOptions = "http://jabber.org/protocol/pubsub#publish-options" strChat = "chat" + strError = "error" strGroupchat = "groupchat" ) diff --git a/ox.go b/ox.go index cffe51a..857bda0 100644 --- a/ox.go +++ b/ox.go @@ -81,7 +81,7 @@ func oxDecrypt(m xmpp.Chat, client *xmpp.Client, iqc chan xmpp.IQ, cryptMsgByte, err = base64.StdEncoding.DecodeString(r.InnerXML) if err != nil { - return "error", time.Now(), err + return strError, time.Now(), err } break } @@ -89,53 +89,53 @@ func oxDecrypt(m xmpp.Chat, client *xmpp.Client, iqc chan xmpp.IQ, oxMsg := crypto.NewPGPMessage(cryptMsgByte) keyRing, err := crypto.NewKeyRing(oxPrivKey) if err != nil { - return "error", time.Now(), err + return strError, time.Now(), err } senderKeyRing, err := oxGetPublicKeyRing(client, iqc, sender) if err != nil { - return "error", time.Now(), err + return strError, time.Now(), err } decryptMsg, err := keyRing.Decrypt(oxMsg, senderKeyRing, crypto.GetUnixTime()) if err != nil { - return "error", time.Now(), err + return strError, time.Now(), err } // Remove invalid code points. message := validUTF8(string(decryptMsg.Data)) doc := etree.NewDocument() err = doc.ReadFromString(message) if err != nil { - return "error", time.Now(), err + return strError, time.Now(), err } signcrypt := doc.SelectElement("signcrypt") if signcrypt == nil { - return "error", time.Now(), errors.New("ox: no signcrypt element") + return strError, time.Now(), errors.New("ox: no signcrypt element") } to := signcrypt.SelectElement("to") if to == nil { - return "error", time.Now(), errors.New("ox: no to element") + return strError, time.Now(), errors.New("ox: no to element") } jid := to.SelectAttr("jid") if jid == nil { - return "error", time.Now(), errors.New("ox: no jid attribute") + return strError, time.Now(), errors.New("ox: no jid attribute") } if strings.Split(jid.Value, "/")[0] != user { - return "error", time.Now(), errors.New("ox: encrypted for wrong user") + return strError, time.Now(), errors.New("ox: encrypted for wrong user") } timestamp := signcrypt.SelectElement("time") if timestamp == nil { - return "error", time.Now(), errors.New("ox: no time element") + return strError, time.Now(), errors.New("ox: no time element") } stamp := timestamp.SelectAttr("stamp") if stamp == nil { - return "error", time.Now(), errors.New("ox: no stamp attribute") + return strError, time.Now(), errors.New("ox: no stamp attribute") } msgStamp, err := time.Parse("2006-01-02T15:04:05Z0700", stamp.Value) if err != nil { - return "error", time.Now(), err + return strError, time.Now(), err } payload := signcrypt.SelectElement("payload") if payload == nil { - return "error", time.Now(), errors.New("ox: no payload element") + return strError, time.Now(), errors.New("ox: no payload element") } body := payload.SelectElement("body") if body == nil { @@ -334,10 +334,10 @@ func oxGetPrivKeyLoc(jid string) (string, error) { default: homeDir, err = os.UserHomeDir() if err != nil { - return "error", err + return strError, err } if homeDir == "" { - return "error", err + return strError, err } dataDir = homeDir + "/.local/share" } @@ -345,7 +345,7 @@ func oxGetPrivKeyLoc(jid string) (string, error) { if _, err = os.Stat(dataDir); os.IsNotExist(err) { err = os.MkdirAll(dataDir, 0700) if err != nil { - return "error", err + return strError, err } } dataFile := dataDir + base64.StdEncoding.EncodeToString([]byte(jid)) @@ -367,10 +367,10 @@ func oxGetPubKeyLoc(fingerprint string) (string, error) { default: homeDir, err = os.UserHomeDir() if err != nil { - return "error", err + return strError, err } if homeDir == "" { - return "error", err + return strError, err } dataDir = homeDir + "/.local/share" } @@ -378,7 +378,7 @@ func oxGetPubKeyLoc(fingerprint string) (string, error) { if _, err = os.Stat(dataDir); os.IsNotExist(err) { err = os.MkdirAll(dataDir, 0700) if err != nil { - return "error", err + return strError, err } } dataFile := dataDir + fingerprint @@ -703,7 +703,7 @@ func oxEncrypt(client *xmpp.Client, iqc chan xmpp.IQ, oxPrivKey *crypto.Key, } privKeyRing, err := crypto.NewKeyRing(oxPrivKey) if err != nil { - return "error", err + return strError, err } ownJid := strings.Split(client.JID(), "/")[0] if recipient != ownJid { @@ -729,12 +729,12 @@ func oxEncrypt(client *xmpp.Client, iqc chan xmpp.IQ, oxPrivKey *crypto.Key, oxCryptMessageScPayloadBody.CreateText(message) ocm, err := oxCryptMessage.WriteToString() if err != nil { - return "error", err + return strError, err } plainMessage := crypto.NewPlainMessage([]byte(ocm)) pgpMessage, err := keyRing.Encrypt(plainMessage, privKeyRing) if err != nil { - return "error", err + return strError, err } om := etree.NewDocument() om.WriteSettings.AttrSingleQuote = true @@ -753,7 +753,7 @@ func oxEncrypt(client *xmpp.Client, iqc chan xmpp.IQ, oxPrivKey *crypto.Key, omMessageBody.CreateText(oxAltBody) oms, err := om.WriteToString() if err != nil { - return "error", err + return strError, err } return oms, nil diff --git a/stanzahandling.go b/stanzahandling.go index 1050d20..d3859fe 100644 --- a/stanzahandling.go +++ b/stanzahandling.go @@ -88,11 +88,11 @@ func rcvStanzas(client *xmpp.Client, iqc chan xmpp.IQ, msgc chan xmpp.Chat) { root := etree.NewDocument() root.WriteSettings.AttrSingleQuote = true reply := root.CreateElement("iq") - reply.CreateAttr("type", "error") + reply.CreateAttr("type", strError) reply.CreateAttr("from", client.JID()) reply.CreateAttr("to", v.From) reply.CreateAttr("id", v.ID) - errorReply := reply.CreateElement("error") + errorReply := reply.CreateElement(strError) errorReply.CreateAttr("type", "cancel") su := errorReply.CreateElement("service-unavailable") su.CreateAttr("xmlns", nsXMPPStanzas) @@ -108,11 +108,11 @@ func rcvStanzas(client *xmpp.Client, iqc chan xmpp.IQ, msgc chan xmpp.Chat) { root := etree.NewDocument() root.WriteSettings.AttrSingleQuote = true reply := root.CreateElement("iq") - reply.CreateAttr("type", "error") + reply.CreateAttr("type", strError) reply.CreateAttr("from", client.JID()) reply.CreateAttr("to", v.From) reply.CreateAttr("id", v.ID) - errorReply := reply.CreateElement("error") + errorReply := reply.CreateElement(strError) errorReply.CreateAttr("type", "cancel") su := errorReply.CreateElement("service-unavailable") su.CreateAttr("xmlns", nsXMPPStanzas) @@ -123,7 +123,7 @@ func rcvStanzas(client *xmpp.Client, iqc chan xmpp.IQ, msgc chan xmpp.Chat) { log.Println(err) } } - case "reply", "error": + case "reply", strError: iqc <- v default: iqc <- v