aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2020-02-26 16:51:15 +0100
committerAlex Auvolat <alex@adnab.me>2020-02-26 16:51:15 +0100
commitd97a76fcc338e7a532d0796ce5b12bdefb0a6f17 (patch)
treef8237e03007293bf4215348cd8452d65c69d5b0d
parentfacc375e8cf41f87f6b90fe5117754e2b639ce83 (diff)
downloadeasybridge-d97a76fcc338e7a532d0796ce5b12bdefb0a6f17.tar.gz
easybridge-d97a76fcc338e7a532d0796ce5b12bdefb0a6f17.zip
Handle event IDs on xmpp; do not echo back messages
-rw-r--r--connector/xmpp/xmpp.go8
-rw-r--r--go.mod1
-rw-r--r--go.sum2
-rw-r--r--server.go4
4 files changed, 14 insertions, 1 deletions
diff --git a/connector/xmpp/xmpp.go b/connector/xmpp/xmpp.go
index 1215a66..0573ddb 100644
--- a/connector/xmpp/xmpp.go
+++ b/connector/xmpp/xmpp.go
@@ -7,7 +7,8 @@ import (
"fmt"
"strings"
- gxmpp "github.com/mattn/go-xmpp"
+ gxmpp "github.com/matterbridge/go-xmpp"
+ "github.com/rs/xid"
log "github.com/sirupsen/logrus"
. "git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
@@ -225,6 +226,7 @@ func (xm *XMPP) handleXMPP() error {
if v.Type == "groupchat" && len(remote_sp) == 2 {
event.Room = RoomID(remote_sp[0])
event.Author = UserID(remote_sp[1] + "@" + remote_sp[0])
+ event.Id = v.ID
xm.handler.Event(event)
}
}
@@ -331,10 +333,14 @@ func (xm *XMPP) Send(event *Event) error {
})
return err
} else if len(event.Room) > 0 {
+ if event.Id == "" {
+ event.Id = xid.New().String()
+ }
_, err := xm.conn.Send(gxmpp.Chat{
Type: "groupchat",
Remote: string(event.Room),
Text: event.Text,
+ ID: event.Id,
})
return err
} else {
diff --git a/go.mod b/go.mod
index c0f3f77..0cba426 100644
--- a/go.mod
+++ b/go.mod
@@ -13,6 +13,7 @@ require (
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91
github.com/mattermost/mattermost-server v5.11.1+incompatible
github.com/mattn/go-xmpp v0.0.0-20200128155807-a86b6abcb3ad
+ github.com/rs/xid v1.2.1
github.com/sirupsen/logrus v1.4.2
golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
diff --git a/go.sum b/go.sum
index 22f0e27..b7eef24 100644
--- a/go.sum
+++ b/go.sum
@@ -115,6 +115,7 @@ github.com/matterbridge/Rocket.Chat.Go.SDK v0.0.0-20190210153444-cc9d05784d5d/go
github.com/matterbridge/emoji v2.1.1-0.20191117213217-af507f6b02db+incompatible/go.mod h1:igE6rUAn3jai2wCdsjFHfhUoekjrFthoEjFObKKwSb4=
github.com/matterbridge/go-xmpp v0.0.0-20180131083630-7ec2b8b7def6 h1:GDh7egrbDEzP41mScMt7Q/uPM2nJENh9LNFXjUOGts8=
github.com/matterbridge/go-xmpp v0.0.0-20180131083630-7ec2b8b7def6/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
+github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91 h1:KzDEcy8eDbTx881giW8a6llsAck3e2bJvMyKvh1IK+k=
github.com/matterbridge/go-xmpp v0.0.0-20180529212104-cd19799fba91/go.mod h1:ECDRehsR9TYTKCAsRS8/wLeOk6UUqDydw47ln7wG41Q=
github.com/matterbridge/gomatrix v0.0.0-20191026211822-6fc7accd00ca/go.mod h1:+jWeaaUtXQbBRdKYWfjW6JDDYiI2XXE+3NnTjW5kg8g=
github.com/matterbridge/gozulipbot v0.0.0-20190212232658-7aa251978a18/go.mod h1:yAjnZ34DuDyPHMPHHjOsTk/FefW4JJjoMMCGt/8uuQA=
@@ -169,6 +170,7 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
+github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU=
diff --git a/server.go b/server.go
index 84a1e85..c61ad7f 100644
--- a/server.go
+++ b/server.go
@@ -105,6 +105,7 @@ func handleTxnEvent(e *mxlib.Event) error {
ev := &connector.Event{
Type: connector.EVENT_MESSAGE,
Text: e.Content["body"].(string),
+ Id: e.EventId,
}
typ := e.Content["msgtype"].(string)
if typ == "m.emote" {
@@ -129,6 +130,9 @@ func handleTxnEvent(e *mxlib.Event) error {
return acct.Conn.Send(ev)
}
} else if room := dbIsPublicRoom(e.RoomId); room != nil {
+ cache_key := fmt.Sprintf("%s/event_seen/%s/%s",
+ room.Protocol, e.RoomId, ev.Id)
+ dbCachePut(cache_key, "yes")
// If this is a regular room
acct := FindJoinedAccount(e.Sender, room.Protocol, room.RoomID)
if acct != nil {