Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit ca247cf81a4126580b2bfd627a5f50f38beb1498 Author: Simon THOBY <git@nightmared.fr> Date: Wed Nov 25 23:51:23 2020 +0000 Show mxids in case of clashing usernames (matrix) (#1309) Fixes #1302. diff --git a/bridge/matrix/helpers.go b/bridge/matrix/helpers.go index 91aea80..8256dc7 100644 --- a/bridge/matrix/helpers.go +++ b/bridge/matrix/helpers.go @@ -36 +37 @@ package bmatrix  import (   "encoding/json"   "errors" + "fmt"   "html"   "strings"   "time" @@ -8220 +8336 @@ func (b *Bmatrix) getDisplayName(mxid string) string {  func (b *Bmatrix) cacheDisplayName(mxid string, displayName string) string {   now := time.Now()   - // scan to delete old entries, to stop memory usage from becoming too high with old entries + // scan to delete old entries, to stop memory usage from becoming too high with old entries. + // In addition, we also detect if another user have the same username, and if so, we append their mxids to their usernames to differentiate them.   toDelete := []string{} - b.RLock() - for k, v := range b.NicknameMap { + conflict := false + + b.Lock() + for mxid, v := range b.NicknameMap { + // to prevent username reuse across matrix servers - or even on the same server, append + // the mxid to the username when there is a conflict + if v.displayName == displayName { + conflict = true + // TODO: it would be nice to be able to rename previous messages from this user. + // The current behavior is that only users with clashing usernames and *that have spoken since the bridge last started* will get their mxids shown, and I don't know if that's the expected behavior. + v.displayName = fmt.Sprintf("%s (%s)", displayName, mxid) + b.NicknameMap[mxid] = v + } +   if now.Sub(v.lastUpdated) > 10*time.Minute { - toDelete = append(toDelete, k) + toDelete = append(toDelete, mxid)   }   } - b.RUnlock()   - b.Lock() + if conflict { + displayName = fmt.Sprintf("%s (%s)", displayName, mxid) + } +   for _, v := range toDelete {   delete(b.NicknameMap, v)   } +   b.NicknameMap[mxid] = NicknameCacheEntry{   displayName: displayName,   lastUpdated: now,