aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBohdan Horbeshko <bodqhrohro@gmail.com>2023-08-03 00:08:06 +0300
committerBohdan Horbeshko <bodqhrohro@gmail.com>2023-08-03 00:08:06 +0300
commitc03ccfdfb713d4fcb089600d9fd91f03e469daca (patch)
treed759d1fe9b227f3f2887411d579c51561996c0e9
parent608f67551297a14e2e23603413bbce66f6ad5cd9 (diff)
Support urn:xmpp:privilege:2v1.7.4
-rw-r--r--Makefile2
-rw-r--r--telegabber.go2
-rw-r--r--telegram/commands.go2
-rw-r--r--telegram/utils.go4
-rw-r--r--xmpp/extensions/extensions.go26
-rw-r--r--xmpp/gateway/gateway.go22
-rw-r--r--xmpp/handlers.go21
7 files changed, 58 insertions, 21 deletions
diff --git a/Makefile b/Makefile
index 6732740..7857e17 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
COMMIT := $(shell git rev-parse --short HEAD)
TD_COMMIT := "8517026415e75a8eec567774072cbbbbb52376c1"
-VERSION := "v1.7.3"
+VERSION := "v1.7.4"
MAKEOPTS := "-j4"
all:
diff --git a/telegabber.go b/telegabber.go
index 3d7d2ea..df13dd6 100644
--- a/telegabber.go
+++ b/telegabber.go
@@ -15,7 +15,7 @@ import (
goxmpp "gosrc.io/xmpp"
)
-var version string = "1.7.3"
+var version string = "1.7.4"
var commit string
var sm *goxmpp.StreamManager
diff --git a/telegram/commands.go b/telegram/commands.go
index 206e049..0c83945 100644
--- a/telegram/commands.go
+++ b/telegram/commands.go
@@ -384,7 +384,7 @@ func (c *Client) ProcessTransportCommand(cmdline string, resource string) string
}
case "config":
if len(args) > 1 {
- if !gateway.MessageOutgoingPermission && args[0] == "carbons" && args[1] == "true" {
+ if gateway.MessageOutgoingPermissionVersion == 0 && args[0] == "carbons" && args[1] == "true" {
return "The server did not allow to enable carbons"
}
diff --git a/telegram/utils.go b/telegram/utils.go
index 62ce945..4caf88c 100644
--- a/telegram/utils.go
+++ b/telegram/utils.go
@@ -842,7 +842,7 @@ func (c *Client) messageToPrefix(message *client.Message, previewString string,
prefix := []string{}
// message direction
var directionChar string
- if !isPM || !gateway.MessageOutgoingPermission || !c.Session.Carbons {
+ if !isPM || gateway.MessageOutgoingPermissionVersion == 0 || !c.Session.Carbons {
if c.Session.AsciiArrows {
if message.IsOutgoing {
directionChar = "> "
@@ -914,7 +914,7 @@ func (c *Client) ensureDownloadFile(file *client.File) *client.File {
func (c *Client) ProcessIncomingMessage(chatId int64, message *client.Message) {
var isPM bool
var err error
- if gateway.MessageOutgoingPermission && c.Session.Carbons {
+ if gateway.MessageOutgoingPermissionVersion > 0 && c.Session.Carbons {
isPM, err = c.IsPM(chatId)
if err != nil {
log.Errorf("Could not determine if chat is PM: %v", err)
diff --git a/xmpp/extensions/extensions.go b/xmpp/extensions/extensions.go
index 2d547af..192b630 100644
--- a/xmpp/extensions/extensions.go
+++ b/xmpp/extensions/extensions.go
@@ -154,12 +154,19 @@ type CarbonSent struct {
}
// ComponentPrivilege is from XEP-0356
-type ComponentPrivilege struct {
+type ComponentPrivilege1 struct {
XMLName xml.Name `xml:"urn:xmpp:privilege:1 privilege"`
Perms []ComponentPerm `xml:"perm"`
Forwarded stanza.Forwarded `xml:"urn:xmpp:forward:0 forwarded"`
}
+// ComponentPrivilege is from XEP-0356
+type ComponentPrivilege2 struct {
+ XMLName xml.Name `xml:"urn:xmpp:privilege:2 privilege"`
+ Perms []ComponentPerm `xml:"perm"`
+ Forwarded stanza.Forwarded `xml:"urn:xmpp:forward:0 forwarded"`
+}
+
// ComponentPerm is from XEP-0356
type ComponentPerm struct {
XMLName xml.Name `xml:"perm"`
@@ -227,7 +234,12 @@ func (c CarbonSent) Namespace() string {
}
// Namespace is a namespace!
-func (c ComponentPrivilege) Namespace() string {
+func (c ComponentPrivilege1) Namespace() string {
+ return c.XMLName.Space
+}
+
+// Namespace is a namespace!
+func (c ComponentPrivilege2) Namespace() string {
return c.XMLName.Space
}
@@ -297,11 +309,17 @@ func init() {
"sent",
}, CarbonSent{})
- // component privilege
+ // component privilege v1
stanza.TypeRegistry.MapExtension(stanza.PKTMessage, xml.Name{
"urn:xmpp:privilege:1",
"privilege",
- }, ComponentPrivilege{})
+ }, ComponentPrivilege1{})
+
+ // component privilege v2
+ stanza.TypeRegistry.MapExtension(stanza.PKTMessage, xml.Name{
+ "urn:xmpp:privilege:2",
+ "privilege",
+ }, ComponentPrivilege2{})
// message edit
stanza.TypeRegistry.MapExtension(stanza.PKTMessage, xml.Name{
diff --git a/xmpp/gateway/gateway.go b/xmpp/gateway/gateway.go
index 1be2fca..7a2500e 100644
--- a/xmpp/gateway/gateway.go
+++ b/xmpp/gateway/gateway.go
@@ -38,8 +38,8 @@ var IdsDB badger.IdsDB
// were changed and need to be re-flushed to the YamlDB
var DirtySessions = false
-// MessageOutgoingPermission allows to fake outgoing messages by foreign JIDs
-var MessageOutgoingPermission = false
+// MessageOutgoingPermissionVersion contains a XEP-0356 version to fake outgoing messages by foreign JIDs
+var MessageOutgoingPermissionVersion = 0
// SendMessage creates and sends a message stanza
func SendMessage(to string, from string, body string, id string, component *xmpp.Component, reply *Reply, isCarbon bool) {
@@ -142,11 +142,19 @@ func sendMessageWrapper(to string, from string, body string, id string, componen
To: toJid.Domain,
},
}
- privilegeMessage.Extensions = append(privilegeMessage.Extensions, extensions.ComponentPrivilege{
- Forwarded: stanza.Forwarded{
- Stanza: carbonMessage,
- },
- })
+ if MessageOutgoingPermissionVersion == 2 {
+ privilegeMessage.Extensions = append(privilegeMessage.Extensions, extensions.ComponentPrivilege2{
+ Forwarded: stanza.Forwarded{
+ Stanza: carbonMessage,
+ },
+ })
+ } else {
+ privilegeMessage.Extensions = append(privilegeMessage.Extensions, extensions.ComponentPrivilege1{
+ Forwarded: stanza.Forwarded{
+ Stanza: carbonMessage,
+ },
+ })
+ }
sendMessage(&privilegeMessage, component)
} else {
sendMessage(&message, component)
diff --git a/xmpp/handlers.go b/xmpp/handlers.go
index 4e3354e..6679a72 100644
--- a/xmpp/handlers.go
+++ b/xmpp/handlers.go
@@ -209,14 +209,25 @@ func HandleMessage(s xmpp.Sender, p stanza.Packet) {
}
if msg.Body == "" {
- var privilege extensions.ComponentPrivilege
- if ok := msg.Get(&privilege); ok {
- log.Debugf("privilege: %#v", privilege)
+ var privilege1 extensions.ComponentPrivilege1
+ if ok := msg.Get(&privilege1); ok {
+ log.Debugf("privilege1: %#v", privilege1)
}
- for _, perm := range privilege.Perms {
+ for _, perm := range privilege1.Perms {
if perm.Access == "message" && perm.Type == "outgoing" {
- gateway.MessageOutgoingPermission = true
+ gateway.MessageOutgoingPermissionVersion = 1
+ }
+ }
+
+ var privilege2 extensions.ComponentPrivilege2
+ if ok := msg.Get(&privilege2); ok {
+ log.Debugf("privilege2: %#v", privilege2)
+ }
+
+ for _, perm := range privilege2.Perms {
+ if perm.Access == "message" && perm.Type == "outgoing" {
+ gateway.MessageOutgoingPermissionVersion = 2
}
}
}