80 lines
1.8 KiB
Go
80 lines
1.8 KiB
Go
package xmpp
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/bdlm/log"
|
|
"gosrc.io/xmpp"
|
|
"gosrc.io/xmpp/stanza"
|
|
|
|
"dev.sum7.eu/sum7/logmania/database"
|
|
)
|
|
|
|
func (out *Output) Join(to string) {
|
|
toJID, err := xmpp.NewJid(to)
|
|
if err != nil {
|
|
logger.Errorf("jid not generate to join muc %s : %s", to, err)
|
|
return
|
|
}
|
|
toJID.Resource = nickname
|
|
|
|
if err = out.client.Send(stanza.Presence{Attrs: stanza.Attrs{To: toJID.Full()},
|
|
Extensions: []stanza.PresExtension{
|
|
stanza.MucPresence{
|
|
History: stanza.History{MaxStanzas: stanza.NewNullableInt(0)},
|
|
}},
|
|
}); err != nil {
|
|
logger.Errorf("muc not join %s : %s", toJID.Full(), err)
|
|
} else {
|
|
out.channels[to] = true
|
|
}
|
|
}
|
|
|
|
func (out *Output) Send(e *log.Entry, to *database.Notify) bool {
|
|
if out.client == nil {
|
|
logger.Error("xmpp not connected (yet)")
|
|
return false
|
|
}
|
|
html, text := formatLog(e)
|
|
if html == "" || text == "" {
|
|
logger.Error("during format notify")
|
|
return false
|
|
}
|
|
html = strings.TrimRight(to.RunReplace(html), "\n")
|
|
text = strings.TrimRight(to.RunReplace(text), "\n")
|
|
|
|
msg := stanza.Message{
|
|
Attrs: stanza.Attrs{
|
|
To: to.To,
|
|
},
|
|
Body: text,
|
|
Extensions: []stanza.MsgExtension{
|
|
stanza.HTML{Body: stanza.HTMLBody{InnerXML: html}},
|
|
},
|
|
}
|
|
if to.Protocol == protoGroup {
|
|
if _, ok := out.channels[to.To]; ok {
|
|
out.Join(to.To)
|
|
}
|
|
msg.Type = stanza.MessageTypeGroupchat
|
|
if err := out.client.Send(msg); err != nil {
|
|
logger.WithFields(map[string]interface{}{
|
|
"muc": to.To,
|
|
"text": text,
|
|
}).Errorf("log message not forwarded: %s", err)
|
|
}
|
|
return true
|
|
}
|
|
if to.Protocol == proto {
|
|
msg.Type = stanza.MessageTypeChat
|
|
if err := out.client.Send(msg); err != nil {
|
|
logger.WithFields(map[string]interface{}{
|
|
"user": to.To,
|
|
"text": text,
|
|
}).Errorf("log message not forwarded: %s", err)
|
|
}
|
|
return true
|
|
}
|
|
return false
|
|
}
|