diff --git a/go.mod b/go.mod
index 10ea29fb..9a00b6b0 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-20200329150250-5812999b292b
+ github.com/matterbridge/go-xmpp v0.0.0-20200418162626-e69b0b8696ef
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 efa453ce..27f24ff2 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-20200329150250-5812999b292b h1:ZYI2HCj9zPzI4Si1ouSOi/ImA2xSQLUCJPQsLWr8FE0=
-github.com/matterbridge/go-xmpp v0.0.0-20200329150250-5812999b292b/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
+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/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 bb1438e9..3d2f8bf9 100644
--- a/vendor/github.com/matterbridge/go-xmpp/xmpp.go
+++ b/vendor/github.com/matterbridge/go-xmpp/xmpp.go
@@ -713,15 +713,44 @@ func (c *Client) Recv() (stanza interface{}, err error) {
Errors: errsStr,
}, nil
}
- case v.Type == "result" && v.ID == "unsub1":
- // Unsubscribing MAY contain a pubsub element. But it does
- // not have to
- return PubsubUnsubscription{
- SubID: "",
- JID: v.From,
- Node: "",
- Errors: nil,
- }, nil
+ case v.Type == "result":
+ switch v.ID {
+ case "unsub1":
+ // 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
+ err := xml.Unmarshal(v.InnerXML, &itemsQuery)
+ if err != nil {
+ return []DiscoItem{}, err
+ }
+
+ return DiscoItems{
+ Jid: v.From,
+ Items: clientDiscoItemsToReturn(itemsQuery.Items),
+ }, nil
+ }
+ case "info3":
+ if v.Query.XMLName.Space == XMPPNS_DISCO_INFO {
+ var disco clientDiscoQuery
+ err := xml.Unmarshal(v.InnerXML, &disco)
+ if err != nil {
+ return DiscoResult{}, err
+ }
+
+ return DiscoResult{
+ Features: clientFeaturesToReturn(disco.Features),
+ Identities: clientIdentitiesToReturn(disco.Identities),
+ }, nil
+ }
+ }
case v.Query.XMLName.Local == "pubsub":
switch v.ID {
case "sub1":
@@ -1049,6 +1078,8 @@ type clientIQ struct {
Query XMLElement `xml:",any"`
Error clientError
Bind bindBind
+
+ InnerXML []byte `xml:",innerxml"`
}
type clientError struct {
diff --git a/vendor/github.com/matterbridge/go-xmpp/xmpp_disco.go b/vendor/github.com/matterbridge/go-xmpp/xmpp_disco.go
new file mode 100644
index 00000000..0bca664a
--- /dev/null
+++ b/vendor/github.com/matterbridge/go-xmpp/xmpp_disco.go
@@ -0,0 +1,99 @@
+package xmpp
+
+import (
+ "encoding/xml"
+)
+
+const (
+ XMPPNS_DISCO_ITEMS = "http://jabber.org/protocol/disco#items"
+ XMPPNS_DISCO_INFO = "http://jabber.org/protocol/disco#info"
+)
+
+type clientDiscoFeature struct {
+ XMLName xml.Name `xml:"feature"`
+ Var string `xml:"var,attr"`
+}
+
+type clientDiscoIdentity struct {
+ XMLName xml.Name `xml:"identity"`
+ Category string `xml:"category,attr"`
+ Type string `xml:"type,attr"`
+ Name string `xml:"name,attr"`
+}
+
+type clientDiscoQuery struct {
+ XMLName xml.Name `xml:"query"`
+ Features []clientDiscoFeature `xml:"feature"`
+ Identities []clientDiscoIdentity `xml:"identity"`
+}
+
+type clientDiscoItem struct {
+ XMLName xml.Name `xml:"item"`
+ Jid string `xml:"jid,attr"`
+ Node string `xml:"node,attr"`
+ Name string `xml:"name,attr"`
+}
+
+type clientDiscoItemsQuery struct {
+ XMLName xml.Name `xml:"query"`
+ Items []clientDiscoItem `xml:"item"`
+}
+
+type DiscoIdentity struct {
+ Category string
+ Type string
+ Name string
+}
+
+type DiscoItem struct {
+ Jid string
+ Name string
+ Node string
+}
+
+type DiscoResult struct {
+ Features []string
+ Identities []DiscoIdentity
+}
+
+type DiscoItems struct {
+ Jid string
+ Items []DiscoItem
+}
+
+func clientFeaturesToReturn(features []clientDiscoFeature) []string {
+ var ret []string
+
+ for _, feature := range features {
+ ret = append(ret, feature.Var)
+ }
+
+ return ret
+}
+
+func clientIdentitiesToReturn(identities []clientDiscoIdentity) []DiscoIdentity {
+ var ret []DiscoIdentity
+
+ for _, id := range identities {
+ ret = append(ret, DiscoIdentity{
+ Category: id.Category,
+ Type: id.Type,
+ Name: id.Name,
+ })
+ }
+
+ return ret
+}
+
+func clientDiscoItemsToReturn(items []clientDiscoItem) []DiscoItem {
+ var ret []DiscoItem
+ for _, item := range items {
+ ret = append(ret, DiscoItem{
+ Jid: item.Jid,
+ Name: item.Name,
+ Node: item.Node,
+ })
+ }
+
+ return ret
+}
diff --git a/vendor/github.com/matterbridge/go-xmpp/xmpp_information_query.go b/vendor/github.com/matterbridge/go-xmpp/xmpp_information_query.go
index 2a699222..15114c9f 100644
--- a/vendor/github.com/matterbridge/go-xmpp/xmpp_information_query.go
+++ b/vendor/github.com/matterbridge/go-xmpp/xmpp_information_query.go
@@ -10,10 +10,26 @@ const IQTypeSet = "set"
const IQTypeResult = "result"
func (c *Client) Discovery() (string, error) {
- const namespace = "http://jabber.org/protocol/disco#items"
// use getCookie for a pseudo random id.
reqID := strconv.FormatUint(uint64(getCookie()), 10)
- return c.RawInformationQuery(c.jid, c.domain, reqID, IQTypeGet, namespace, "")
+ return c.RawInformationQuery(c.jid, c.domain, reqID, IQTypeGet, XMPPNS_DISCO_ITEMS, "")
+}
+
+// Discover information about a node
+func (c *Client) DiscoverNodeInfo(node string) (string, error) {
+ query := fmt.Sprintf("", XMPPNS_DISCO_INFO, node)
+ return c.RawInformation(c.jid, c.domain, "info3", IQTypeGet, query)
+}
+
+// Discover items that the server exposes
+func (c *Client) DiscoverServerItems() (string, error) {
+ return c.DiscoverEntityItems(c.domain)
+}
+
+// Discover items that an entity exposes
+func (c *Client) DiscoverEntityItems(jid string) (string, error) {
+ query := fmt.Sprintf("", XMPPNS_DISCO_ITEMS)
+ return c.RawInformation(c.jid, jid, "info1", IQTypeGet, query)
}
// RawInformationQuery sends an information query request to the server.
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 6e33ec3c..7877b634 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-20200329150250-5812999b292b
+# github.com/matterbridge/go-xmpp v0.0.0-20200418162626-e69b0b8696ef
github.com/matterbridge/go-xmpp
# github.com/matterbridge/gomatrix v0.0.0-20200209224845-c2104d7936a6
github.com/matterbridge/gomatrix