[WIP] Fix ban by software version, some other under-hood changes
- Use updated version of upstream go-xmpp + fixes on client-side - Introduce golangci-lint v2 + fixes - Move especially noisy debugging stuff to separate config handles to be able to switch them off - Add a bit debug to ban by software path
This commit is contained in:
@@ -9,7 +9,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/eleksir/go-xmpp"
|
||||
"github.com/xmppo/go-xmpp"
|
||||
)
|
||||
|
||||
// BunyPresense производит проверку по бело-чёрным спискам. Если presence пришёл от злодея (из чёрного списка), то
|
||||
@@ -28,7 +28,11 @@ func (j *Jabber) BunyPresense(v xmpp.Presence) error { //nolint:gocognit,gocyclo
|
||||
room := strings.SplitN(v.From, "/", 2)[0]
|
||||
|
||||
if room == "" {
|
||||
log.Infof("We got empty room field in presence event, which kinda strange: %s", spew.Sdump(v))
|
||||
msg := "We got empty room field in presence event, which kinda strange: " + spew.Sdump(v)
|
||||
|
||||
for str := range strings.SplitSeq(msg, "\n") {
|
||||
log.Info(str)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
@@ -419,32 +423,42 @@ func (j *Jabber) BunySoftwareVersion(v xmpp.IQ, ver IqResultSoftwareVersion) err
|
||||
|
||||
_ = json.Unmarshal([]byte(presenceJSONString), &p)
|
||||
|
||||
if p.Affiliation == "admin" || p.Affiliation == "owner" {
|
||||
log.Infof("Skipping useragent blacklist check for %s because his affiliation is %s", v.From, p.Affiliation)
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
// На всякий случай.
|
||||
if p.Role == "moderator" {
|
||||
log.Infof("Skipping useragent blacklist check for %s because his role is %s", v.From, p.Role)
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
if v.From == p.From {
|
||||
log.Errorf("Found jid of %s in presence db: %s", v.From, p.JID)
|
||||
log.Infof("Found jid of %s in presence db: %s", v.From, p.JID)
|
||||
|
||||
if p.Affiliation == "admin" || p.Affiliation == "owner" {
|
||||
log.Infof("Skipping useragent blacklist check for %s because his affiliation is %s", v.From, p.Affiliation)
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
// На всякий случай.
|
||||
if p.Role == "moderator" {
|
||||
log.Infof("Skipping useragent blacklist check for %s because his role is %s", v.From, p.Role)
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
log.Debug("Useragent is not owner or moderator, proceeding with check...")
|
||||
|
||||
// Lookup in global blacklist.
|
||||
log.Debug("Find our room in connected room list...")
|
||||
|
||||
for _, cRoom := range j.RoomsConnected {
|
||||
if cRoom == room {
|
||||
log.Debug("Found our room in list of connected rooms")
|
||||
|
||||
for _, bEntry := range j.BlackList.Blacklist {
|
||||
// Обработаем правила глобального чёрного списка.
|
||||
if bEntry.RoomName == "" {
|
||||
log.Debugf("Check in global blacklist")
|
||||
|
||||
for _, useragent := range bEntry.UserAgent {
|
||||
switch {
|
||||
case useragent.Name != "" && useragent.Version != "" && useragent.Os != "":
|
||||
if ver.Name == useragent.Name && ver.Version == useragent.Version && ver.Os == useragent.Os {
|
||||
log.Debug("Found all 3 components in black list, it is ban")
|
||||
|
||||
id, err := j.Squash(room, p.JID, bEntry.ReasonEnable, v.Type)
|
||||
|
||||
if err != nil {
|
||||
@@ -462,6 +476,8 @@ func (j *Jabber) BunySoftwareVersion(v xmpp.IQ, ver IqResultSoftwareVersion) err
|
||||
|
||||
case useragent.Name != "" && useragent.Version != "":
|
||||
if ver.Name == useragent.Name && ver.Version == useragent.Version {
|
||||
log.Debug("Found sw name and version in blacklist, it is ban")
|
||||
|
||||
id, err := j.Squash(room, p.JID, bEntry.ReasonEnable, v.Type)
|
||||
|
||||
if err != nil {
|
||||
@@ -479,6 +495,8 @@ func (j *Jabber) BunySoftwareVersion(v xmpp.IQ, ver IqResultSoftwareVersion) err
|
||||
|
||||
case useragent.Name != "":
|
||||
if ver.Name == useragent.Name {
|
||||
log.Debug("Found sw name in blacklist, it is ban")
|
||||
|
||||
id, err := j.Squash(room, p.JID, bEntry.ReasonEnable, v.Type)
|
||||
|
||||
if err != nil {
|
||||
@@ -496,6 +514,8 @@ func (j *Jabber) BunySoftwareVersion(v xmpp.IQ, ver IqResultSoftwareVersion) err
|
||||
|
||||
case useragent.Version != "":
|
||||
if ver.Version == useragent.Version {
|
||||
log.Debug("Found sw version in blacklist, it is ban")
|
||||
|
||||
id, err := j.Squash(room, p.JID, bEntry.ReasonEnable, v.Type)
|
||||
|
||||
if err != nil {
|
||||
@@ -515,10 +535,14 @@ func (j *Jabber) BunySoftwareVersion(v xmpp.IQ, ver IqResultSoftwareVersion) err
|
||||
}
|
||||
|
||||
if bEntry.RoomName == room {
|
||||
log.Debug("Found blacklist entries for room")
|
||||
|
||||
for _, useragent := range bEntry.UserAgent {
|
||||
switch {
|
||||
case useragent.Name != "" && useragent.Version != "" && useragent.Os != "":
|
||||
if ver.Name == useragent.Name && ver.Version == useragent.Version && ver.Os == useragent.Os {
|
||||
log.Debug("Found all 3 components in black list, it is ban")
|
||||
|
||||
id, err := j.Squash(room, p.JID, bEntry.ReasonEnable, v.Type)
|
||||
|
||||
if err != nil {
|
||||
@@ -536,6 +560,8 @@ func (j *Jabber) BunySoftwareVersion(v xmpp.IQ, ver IqResultSoftwareVersion) err
|
||||
|
||||
case useragent.Name != "" && useragent.Version != "":
|
||||
if ver.Name == useragent.Name && ver.Version == useragent.Version {
|
||||
log.Debug("Found sw name and version in blacklist, it is ban")
|
||||
|
||||
id, err := j.Squash(room, p.JID, bEntry.ReasonEnable, v.Type)
|
||||
|
||||
if err != nil {
|
||||
@@ -553,6 +579,8 @@ func (j *Jabber) BunySoftwareVersion(v xmpp.IQ, ver IqResultSoftwareVersion) err
|
||||
|
||||
case useragent.Name != "":
|
||||
if ver.Name == useragent.Name {
|
||||
log.Debug("Found sw name in blacklist, it is ban")
|
||||
|
||||
id, err := j.Squash(room, p.JID, bEntry.ReasonEnable, v.Type)
|
||||
|
||||
if err != nil {
|
||||
@@ -570,6 +598,8 @@ func (j *Jabber) BunySoftwareVersion(v xmpp.IQ, ver IqResultSoftwareVersion) err
|
||||
|
||||
case useragent.Version != "":
|
||||
if ver.Version == useragent.Version {
|
||||
log.Debug("Found sw version in blacklist, it is ban")
|
||||
|
||||
id, err := j.Squash(room, p.JID, bEntry.ReasonEnable, v.Type)
|
||||
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user