summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/channel.go2
-rw-r--r--api/user.go3
-rw-r--r--api/web_hub.go1
-rw-r--r--store/sql_user_store.go13
-rw-r--r--store/store.go1
5 files changed, 20 insertions, 0 deletions
diff --git a/api/channel.go b/api/channel.go
index 81220a503..ea39ee398 100644
--- a/api/channel.go
+++ b/api/channel.go
@@ -1176,6 +1176,8 @@ func updateNotifyProps(c *Context, w http.ResponseWriter, r *http.Request) {
c.Err = result.Err
return
} else {
+ InvalidateCacheForUser(userId)
+
// return the updated notify properties including any unchanged ones
w.Write([]byte(model.MapToJson(member.NotifyProps)))
}
diff --git a/api/user.go b/api/user.go
index b961aa609..e78b5be03 100644
--- a/api/user.go
+++ b/api/user.go
@@ -1398,6 +1398,8 @@ func updateUser(c *Context, w http.ResponseWriter, r *http.Request) {
go sendEmailChangeUsername(c, rusers[1].Username, rusers[0].Username, rusers[0].Email, c.GetSiteURL())
}
+ InvalidateCacheForUser(user.Id)
+
updatedUser := rusers[0]
updatedUser = sanitizeProfile(c, updatedUser)
@@ -1955,6 +1957,7 @@ func updateUserNotify(c *Context, w http.ResponseWriter, r *http.Request) {
return
} else {
c.LogAuditWithUserId(user.Id, "")
+ InvalidateCacheForUser(user.Id)
ruser := result.Data.([2]*model.User)[0]
options := utils.Cfg.GetSanitizeOptions()
diff --git a/api/web_hub.go b/api/web_hub.go
index 73b94bf1d..b607703f2 100644
--- a/api/web_hub.go
+++ b/api/web_hub.go
@@ -112,6 +112,7 @@ func InvalidateCacheForUser(userId string) {
func InvalidateCacheForUserSkipClusterSend(userId string) {
Srv.Store.Channel().InvalidateAllChannelMembersForUser(userId)
+ Srv.Store.User().InvalidateProfilesInChannelCacheByUser(userId)
GetHubForUserId(userId).InvalidateUser(userId)
}
diff --git a/store/sql_user_store.go b/store/sql_user_store.go
index 984b544d7..aa3bb4380 100644
--- a/store/sql_user_store.go
+++ b/store/sql_user_store.go
@@ -555,6 +555,19 @@ func (us SqlUserStore) GetProfiles(teamId string, offset int, limit int) StoreCh
return storeChannel
}
+func (us SqlUserStore) InvalidateProfilesInChannelCacheByUser(userId string) {
+ keys := profilesInChannelCache.Keys()
+
+ for _, key := range keys {
+ if cacheItem, ok := profilesInChannelCache.Get(key); ok {
+ userMap := cacheItem.(map[string]*model.User)
+ if _, userInCache := userMap[userId]; userInCache {
+ profilesInChannelCache.Remove(key)
+ }
+ }
+ }
+}
+
func (us SqlUserStore) InvalidateProfilesInChannelCache(channelId string) {
profilesInChannelCache.Remove(channelId)
}
diff --git a/store/store.go b/store/store.go
index 83a077c10..d0790263a 100644
--- a/store/store.go
+++ b/store/store.go
@@ -143,6 +143,7 @@ type UserStore interface {
UpdateMfaActive(userId string, active bool) StoreChannel
Get(id string) StoreChannel
GetAll() StoreChannel
+ InvalidateProfilesInChannelCacheByUser(userId string)
InvalidateProfilesInChannelCache(channelId string)
GetProfilesInChannel(channelId string, offset int, limit int, allowFromCache bool) StoreChannel
GetProfilesNotInChannel(teamId string, channelId string, offset int, limit int) StoreChannel