aboutsummaryrefslogtreecommitdiff
path: root/xmpp/handlers.go
diff options
context:
space:
mode:
authorBohdan Horbeshko <bodqhrohro@gmail.com>2023-03-19 00:43:11 +0300
committerBohdan Horbeshko <bodqhrohro@gmail.com>2023-03-19 00:43:11 +0300
commit42ed16bf9e9d72bf226045f1f291b9d58e2a6200 (patch)
treee01b63ea0f49afdab1e8463cd1b10138f5db7816 /xmpp/handlers.go
parent90807b2d9e0565629a913d3b28b09c5fc9d746e6 (diff)
Simulate carbons
Diffstat (limited to 'xmpp/handlers.go')
-rw-r--r--xmpp/handlers.go34
1 files changed, 20 insertions, 14 deletions
diff --git a/xmpp/handlers.go b/xmpp/handlers.go
index acf62a2..2bdbaef 100644
--- a/xmpp/handlers.go
+++ b/xmpp/handlers.go
@@ -79,7 +79,7 @@ func HandleMessage(s xmpp.Sender, p stanza.Packet) {
}).Warn("Message")
log.Debugf("%#v", msg)
- bare, resource, ok := splitFrom(msg.From)
+ bare, resource, ok := gateway.SplitJID(msg.From)
if !ok {
return
}
@@ -152,6 +152,23 @@ func HandleMessage(s xmpp.Sender, p stanza.Packet) {
}
log.Warn("Unknown purpose of the message, skipping")
}
+
+ if msg.Body == "" {
+ var privilege extensions.ComponentPrivilege
+ if ok := msg.Get(&privilege); ok {
+ log.Debugf("privilege: %#v", privilege)
+ }
+
+ for _, perm := range privilege.Perms {
+ if perm.Access == "message" && perm.Type == "outgoing" {
+ gateway.MessageOutgoingPermission = true
+ }
+ }
+ }
+
+ if msg.Type == "error" {
+ log.Errorf("MESSAGE ERROR: %#v", p)
+ }
}
// HandlePresence processes an incoming XMPP presence
@@ -196,7 +213,7 @@ func handleSubscription(s xmpp.Sender, p stanza.Presence) {
if !ok {
return
}
- bare, _, ok := splitFrom(p.From)
+ bare, _, ok := gateway.SplitJID(p.From)
if !ok {
return
}
@@ -227,7 +244,7 @@ func handlePresence(s xmpp.Sender, p stanza.Presence) {
log.Debugf("%#v", p)
// create session
- bare, resource, ok := splitFrom(p.From)
+ bare, resource, ok := gateway.SplitJID(p.From)
if !ok {
return
}
@@ -385,17 +402,6 @@ func handleGetDiscoInfo(s xmpp.Sender, iq *stanza.IQ) {
_ = gateway.ResumableSend(component, answer)
}
-func splitFrom(from string) (string, string, bool) {
- fromJid, err := stanza.NewJid(from)
- if err != nil {
- log.WithFields(log.Fields{
- "from": from,
- }).Error(errors.Wrap(err, "Invalid from JID!"))
- return "", "", false
- }
- return fromJid.Bare(), fromJid.Resource, true
-}
-
func toToID(to string) (int64, bool) {
toParts := strings.Split(to, "@")
if len(toParts) < 2 {