From 2595dd30bf3eb014e2da1235b555f0cd88f6bf28 Mon Sep 17 00:00:00 2001
From: Wim <wim@42.be>
Date: Sun, 19 Apr 2020 01:06:44 +0200
Subject: [PATCH] Update matterbridge/go-xmpp. Fixes #1097 (#1099)

---
 go.mod                                        |   2 +-
 go.sum                                        |   4 +-
 .../github.com/matterbridge/go-xmpp/xmpp.go   | 143 +++++++++---------
 vendor/modules.txt                            |   2 +-
 4 files changed, 78 insertions(+), 73 deletions(-)

diff --git a/go.mod b/go.mod
index 9a00b6b0..dc165f50 100644
--- a/go.mod
+++ b/go.mod
@@ -24,7 +24,7 @@ require (
 	github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20200411204219-d5c18ce75048
 	github.com/matterbridge/discordgo v0.18.1-0.20200308151012-aa40f01cbcc3
 	github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible
-	github.com/matterbridge/go-xmpp v0.0.0-20200418162626-e69b0b8696ef
+	github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050
 	github.com/matterbridge/gomatrix v0.0.0-20200209224845-c2104d7936a6
 	github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18
 	github.com/matterbridge/logrus-prefixed-formatter v0.0.0-20180806162718-01618749af61
diff --git a/go.sum b/go.sum
index 27f24ff2..56543ae2 100644
--- a/go.sum
+++ b/go.sum
@@ -130,8 +130,8 @@ github.com/matterbridge/discordgo v0.18.1-0.20200308151012-aa40f01cbcc3 h1:VP/DN
 github.com/matterbridge/discordgo v0.18.1-0.20200308151012-aa40f01cbcc3/go.mod h1:5a1bHtG/38ofcx9cgwM5eTW/Pl4SpbQksNDnTRcGA2Y=
 github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible h1:oaOqwbg5HxHRxvAbd84ks0Okwoc1ISyUZ87EiVJFhGI=
 github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible/go.mod h1:igE6rUAn3jai2wCdsjFHfhUoekjrFthoEjFObKKwSb4=
-github.com/matterbridge/go-xmpp v0.0.0-20200418162626-e69b0b8696ef h1:CDIIh3ZViXddwWh9vctOmOOQPXhWeuHdGnwNkPc5JtE=
-github.com/matterbridge/go-xmpp v0.0.0-20200418162626-e69b0b8696ef/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
+github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050 h1:kWkP1lXpkvtoNL08jkP3XQH/zvDOEXJpdCJd/DlIvMw=
+github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
 github.com/matterbridge/gomatrix v0.0.0-20200209224845-c2104d7936a6 h1:Kl65VJv38HjYFnnwH+MP6Z8hcJT5UHuSpHVU5vW1HH0=
 github.com/matterbridge/gomatrix v0.0.0-20200209224845-c2104d7936a6/go.mod h1:+jWeaaUtXQbBRdKYWfjW6JDDYiI2XXE+3NnTjW5kg8g=
 github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18 h1:fLhwXtWGtfTgZVxHG1lcKjv+re7dRwyyuYFNu69xdho=
diff --git a/vendor/github.com/matterbridge/go-xmpp/xmpp.go b/vendor/github.com/matterbridge/go-xmpp/xmpp.go
index 3d2f8bf9..56b08f5b 100644
--- a/vendor/github.com/matterbridge/go-xmpp/xmpp.go
+++ b/vendor/github.com/matterbridge/go-xmpp/xmpp.go
@@ -715,15 +715,46 @@ func (c *Client) Recv() (stanza interface{}, err error) {
 				}
 			case v.Type == "result":
 				switch v.ID {
+				case "sub1":
+					if v.Query.XMLName.Local == "pubsub" {
+						// Subscription or unsubscription was successful
+						var sub clientPubsubSubscription
+						err := xml.Unmarshal([]byte(v.Query.InnerXML), &sub)
+						if err != nil {
+							return PubsubSubscription{}, err
+						}
+
+						return PubsubSubscription{
+							SubID:  sub.SubID,
+							JID:    sub.JID,
+							Node:   sub.Node,
+							Errors: nil,
+						}, nil
+					}
 				case "unsub1":
-					// Unsubscribing MAY contain a pubsub element. But it does
-					// not have to
-					return PubsubUnsubscription{
-						SubID:  "",
-						JID:    v.From,
-						Node:   "",
-						Errors: nil,
-					}, nil
+					if v.Query.XMLName.Local == "pubsub" {
+						var sub clientPubsubSubscription
+						err := xml.Unmarshal([]byte(v.Query.InnerXML), &sub)
+						if err != nil {
+							return PubsubUnsubscription{}, err
+						}
+
+						return PubsubUnsubscription{
+							SubID:  sub.SubID,
+							JID:    v.From,
+							Node:   sub.Node,
+							Errors: nil,
+						}, nil
+					} else {
+						// Unsubscribing MAY contain a pubsub element. But it does
+						// not have to
+						return PubsubUnsubscription{
+							SubID:  "",
+							JID:    v.From,
+							Node:   "",
+							Errors: nil,
+						}, nil
+					}
 				case "info1":
 					if v.Query.XMLName.Space == XMPPNS_DISCO_ITEMS {
 						var itemsQuery clientDiscoItemsQuery
@@ -750,56 +781,28 @@ func (c *Client) Recv() (stanza interface{}, err error) {
 							Identities: clientIdentitiesToReturn(disco.Identities),
 						}, nil
 					}
-				}
-			case v.Query.XMLName.Local == "pubsub":
-				switch v.ID {
-				case "sub1":
-					// Subscription or unsubscription was successful
-					var sub clientPubsubSubscription
-					err := xml.Unmarshal([]byte(v.Query.InnerXML), &sub)
-					if err != nil {
-						return PubsubSubscription{}, err
-					}
-
-					return PubsubSubscription{
-						SubID:  sub.SubID,
-						JID:    sub.JID,
-						Node:   sub.Node,
-						Errors: nil,
-					}, nil
-				case "unsub1":
-					var sub clientPubsubSubscription
-					err := xml.Unmarshal([]byte(v.Query.InnerXML), &sub)
-					if err != nil {
-						return PubsubUnsubscription{}, err
-					}
-
-					return PubsubUnsubscription{
-						SubID:  sub.SubID,
-						JID:    v.From,
-						Node:   sub.Node,
-						Errors: nil,
-					}, nil
 				case "items1", "items3":
-					var p clientPubsubItems
-					err := xml.Unmarshal([]byte(v.Query.InnerXML), &p)
-					if err != nil {
-						return PubsubItems{}, err
-					}
+					if v.Query.XMLName.Local == "pubsub" {
+						var p clientPubsubItems
+						err := xml.Unmarshal([]byte(v.Query.InnerXML), &p)
+						if err != nil {
+							return PubsubItems{}, err
+						}
 
-					switch p.Node {
-					case XMPPNS_AVATAR_PEP_DATA:
-						return handleAvatarData(p.Items[0].Body,
-							v.From,
-							p.Items[0].ID)
-					case XMPPNS_AVATAR_PEP_METADATA:
-						return handleAvatarMetadata(p.Items[0].Body,
-							v.From)
-					default:
-						return PubsubItems{
-							p.Node,
-							pubsubItemsToReturn(p.Items),
-						}, nil
+						switch p.Node {
+						case XMPPNS_AVATAR_PEP_DATA:
+							return handleAvatarData(p.Items[0].Body,
+								v.From,
+								p.Items[0].ID)
+						case XMPPNS_AVATAR_PEP_METADATA:
+							return handleAvatarMetadata(p.Items[0].Body,
+								v.From)
+						default:
+							return PubsubItems{
+								p.Node,
+								pubsubItemsToReturn(p.Items),
+							}, nil
+						}
 					}
 					// Note: XEP-0084 states that metadata and data
 					// should be fetched with an id of retrieve1.
@@ -807,20 +810,22 @@ func (c *Client) Recv() (stanza interface{}, err error) {
 					// can just use items1 and items3 to do the same
 					// as an Avatar node is just a PEP (PubSub) node.
 					/*case "retrieve1":
-					var p clientPubsubItems
-					err := xml.Unmarshal([]byte(v.Query.InnerXML), &p)
-					if err != nil {
-						return PubsubItems{}, err
-					}
+					if v.Query.XMLName.Local == "pubsub" {
+						var p clientPubsubItems
+						err := xml.Unmarshal([]byte(v.Query.InnerXML), &p)
+						if err != nil {
+							return PubsubItems{}, err
+						}
 
-					switch p.Node {
-					case XMPPNS_AVATAR_PEP_DATA:
-						return handleAvatarData(p.Items[0].Body,
-							v.From,
-							p.Items[0].ID)
-					case XMPPNS_AVATAR_PEP_METADATA:
-						return handleAvatarMetadata(p.Items[0].Body,
-							v
+						switch p.Node {
+						case XMPPNS_AVATAR_PEP_DATA:
+							return handleAvatarData(p.Items[0].Body,
+								v.From,
+								p.Items[0].ID)
+						case XMPPNS_AVATAR_PEP_METADATA:
+							return handleAvatarMetadata(p.Items[0].Body,
+								v.From)
+						}
 					}*/
 				}
 			case v.Query.XMLName.Local == "":
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 7877b634..38017238 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -103,7 +103,7 @@ github.com/matterbridge/Rocket.Chat.Go.SDK/rest
 github.com/matterbridge/discordgo
 # github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible
 github.com/matterbridge/emoji
-# github.com/matterbridge/go-xmpp v0.0.0-20200418162626-e69b0b8696ef
+# github.com/matterbridge/go-xmpp v0.0.0-20200418225040-c8a3a57b4050
 github.com/matterbridge/go-xmpp
 # github.com/matterbridge/gomatrix v0.0.0-20200209224845-c2104d7936a6
 github.com/matterbridge/gomatrix