From 8f87e60231c406d9f26c1b3a84abd725e544a187 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Tue, 14 Jun 2016 12:12:46 -0400 Subject: Fix bad condition on hiding email addresses and update user etag to include privacy settings (#3327) --- api/user.go | 8 ++++---- model/user.go | 4 ++-- model/user_test.go | 2 +- store/sql_user_store.go | 13 +++++++------ webapp/components/user_profile.jsx | 18 +++--------------- webapp/i18n/en.json | 1 - webapp/i18n/es.json | 1 - webapp/i18n/fr.json | 1 - webapp/i18n/ja.json | 1 - webapp/i18n/pt-BR.json | 1 - 10 files changed, 17 insertions(+), 33 deletions(-) diff --git a/api/user.go b/api/user.go index 0ab64d830..8e7329f46 100644 --- a/api/user.go +++ b/api/user.go @@ -795,11 +795,11 @@ func getMe(c *Context, w http.ResponseWriter, r *http.Request) { c.RemoveSessionCookie(w, r) l4g.Error(utils.T("api.user.get_me.getting.error"), c.Session.UserId) return - } else if HandleEtag(result.Data.(*model.User).Etag(), w, r) { + } else if HandleEtag(result.Data.(*model.User).Etag(utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress), w, r) { return } else { result.Data.(*model.User).Sanitize(map[string]bool{}) - w.Header().Set(model.HEADER_ETAG_SERVER, result.Data.(*model.User).Etag()) + w.Header().Set(model.HEADER_ETAG_SERVER, result.Data.(*model.User).Etag(utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress)) w.Write([]byte(result.Data.(*model.User).ToJson())) return } @@ -906,11 +906,11 @@ func getUser(c *Context, w http.ResponseWriter, r *http.Request) { if result := <-Srv.Store.User().Get(id); result.Err != nil { c.Err = result.Err return - } else if HandleEtag(result.Data.(*model.User).Etag(), w, r) { + } else if HandleEtag(result.Data.(*model.User).Etag(utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress), w, r) { return } else { result.Data.(*model.User).Sanitize(map[string]bool{}) - w.Header().Set(model.HEADER_ETAG_SERVER, result.Data.(*model.User).Etag()) + w.Header().Set(model.HEADER_ETAG_SERVER, result.Data.(*model.User).Etag(utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress)) w.Write([]byte(result.Data.(*model.User).ToJson())) return } diff --git a/model/user.go b/model/user.go index ab076894a..77d04a9bc 100644 --- a/model/user.go +++ b/model/user.go @@ -244,8 +244,8 @@ func (u *User) ToJson() string { } // Generate a valid strong etag so the browser can cache the results -func (u *User) Etag() string { - return Etag(u.Id, u.UpdateAt) +func (u *User) Etag(showFullName, showEmail bool) string { + return Etag(u.Id, u.UpdateAt, showFullName, showEmail) } func (u *User) IsOffline() bool { diff --git a/model/user_test.go b/model/user_test.go index d8ef77d6a..899542a05 100644 --- a/model/user_test.go +++ b/model/user_test.go @@ -33,7 +33,7 @@ func TestUserJson(t *testing.T) { func TestUserPreSave(t *testing.T) { user := User{Password: "test"} user.PreSave() - user.Etag() + user.Etag(true, true) } func TestUserPreUpdate(t *testing.T) { diff --git a/store/sql_user_store.go b/store/sql_user_store.go index 07a801dc6..6313a91e2 100644 --- a/store/sql_user_store.go +++ b/store/sql_user_store.go @@ -10,6 +10,7 @@ import ( "strings" "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" ) const ( @@ -485,9 +486,9 @@ func (s SqlUserStore) GetEtagForDirectProfiles(userId string) StoreChannel { ORDER BY UpdateAt DESC LIMIT 1 `, map[string]interface{}{"UserId": userId}) if err != nil { - result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, model.GetMillis()) + result.Data = fmt.Sprintf("%v.%v.%v.%v", model.CurrentVersion, model.GetMillis(), utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress) } else { - result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, updateAt) + result.Data = fmt.Sprintf("%v.%v.%v.%v", model.CurrentVersion, updateAt, utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress) } storeChannel <- result @@ -505,9 +506,9 @@ func (s SqlUserStore) GetEtagForAllProfiles() StoreChannel { updateAt, err := s.GetReplica().SelectInt("SELECT UpdateAt FROM Users ORDER BY UpdateAt DESC LIMIT 1") if err != nil { - result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, model.GetMillis()) + result.Data = fmt.Sprintf("%v.%v.%v.%v", model.CurrentVersion, model.GetMillis(), utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress) } else { - result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, updateAt) + result.Data = fmt.Sprintf("%v.%v.%v.%v", model.CurrentVersion, updateAt, utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress) } storeChannel <- result @@ -557,9 +558,9 @@ func (s SqlUserStore) GetEtagForProfiles(teamId string) StoreChannel { updateAt, err := s.GetReplica().SelectInt("SELECT UpdateAt FROM Users, TeamMembers WHERE TeamMembers.TeamId = :TeamId AND Users.Id = TeamMembers.UserId ORDER BY UpdateAt DESC LIMIT 1", map[string]interface{}{"TeamId": teamId}) if err != nil { - result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, model.GetMillis()) + result.Data = fmt.Sprintf("%v.%v.%v.%v", model.CurrentVersion, model.GetMillis(), utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress) } else { - result.Data = fmt.Sprintf("%v.%v", model.CurrentVersion, updateAt) + result.Data = fmt.Sprintf("%v.%v.%v.%v", model.CurrentVersion, updateAt, utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress) } storeChannel <- result diff --git a/webapp/components/user_profile.jsx b/webapp/components/user_profile.jsx index e68ff7eab..ee876347b 100644 --- a/webapp/components/user_profile.jsx +++ b/webapp/components/user_profile.jsx @@ -4,8 +4,6 @@ import * as Utils from 'utils/utils.jsx'; import Client from 'utils/web_client.jsx'; -import {FormattedMessage} from 'react-intl'; - import {Popover, OverlayTrigger} from 'react-bootstrap'; var id = 0; @@ -22,6 +20,7 @@ export default class UserProfile extends React.Component { super(props); this.uniqueId = nextId(); } + shouldComponentUpdate(nextProps) { if (!Utils.areObjectsEqual(nextProps.user, this.props.user)) { return true; @@ -45,6 +44,7 @@ export default class UserProfile extends React.Component { return false; } + render() { let name = '...'; let email = ''; @@ -78,19 +78,7 @@ export default class UserProfile extends React.Component { /> ); - if (!global.window.mm_config.ShowEmailAddress === 'true') { - dataContent.push( -
- -
- ); - } else { + if (global.window.mm_config.ShowEmailAddress === 'true') { dataContent.push(