From c82a84ed765bd9c4d601b93201d93af92f6ee742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 2 Oct 2018 08:04:38 +0200 Subject: MM-12067: Add SetDefaultProfileImage to reset the user profile image to a generated one (#9449) * MM-12067: Add SetDefaultProfileImage to reset the user profile image to a generated one * Allow to get the default profile image for my user * Allowing to reset the last update image date to 0 * PR reviews --- app/user.go | 76 +++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 56 insertions(+), 20 deletions(-) (limited to 'app/user.go') diff --git a/app/user.go b/app/user.go index 86f44db4e..1faf2b895 100644 --- a/app/user.go +++ b/app/user.go @@ -745,36 +745,72 @@ func getFont(initialFont string) (*truetype.Font, error) { } func (a *App) GetProfileImage(user *model.User) ([]byte, bool, *model.AppError) { - var img []byte - readFailed := false - if len(*a.Config().FileSettings.DriverName) == 0 { - var err *model.AppError - if img, err = CreateProfileImage(user.Username, user.Id, a.Config().FileSettings.InitialFont); err != nil { - return nil, false, err + img, appErr := CreateProfileImage(user.Username, user.Id, a.Config().FileSettings.InitialFont) + if appErr != nil { + return nil, false, appErr } - } else { - path := "users/" + user.Id + "/profile.png" + return img, false, nil + } - if data, err := a.ReadFile(path); err != nil { - readFailed = true + path := "users/" + user.Id + "/profile.png" - if img, err = CreateProfileImage(user.Username, user.Id, a.Config().FileSettings.InitialFont); err != nil { + data, err := a.ReadFile(path) + if err != nil { + img, appErr := CreateProfileImage(user.Username, user.Id, a.Config().FileSettings.InitialFont) + if appErr != nil { + return nil, false, appErr + } + + if user.LastPictureUpdate == 0 { + if _, err := a.WriteFile(bytes.NewReader(img), path); err != nil { return nil, false, err } + } + return img, true, nil + } - if user.LastPictureUpdate == 0 { - if _, err := a.WriteFile(bytes.NewReader(img), path); err != nil { - return nil, false, err - } - } + return data, false, nil +} - } else { - img = data - } +func (a *App) GetDefaultProfileImage(user *model.User) ([]byte, *model.AppError) { + img, appErr := CreateProfileImage(user.Username, user.Id, a.Config().FileSettings.InitialFont) + if appErr != nil { + return nil, appErr } + return img, nil +} - return img, readFailed, nil +func (a *App) SetDefaultProfileImage(user *model.User) *model.AppError { + img, appErr := CreateProfileImage(user.Username, user.Id, a.Config().FileSettings.InitialFont) + if appErr != nil { + return appErr + } + + path := "users/" + user.Id + "/profile.png" + + if _, err := a.WriteFile(bytes.NewReader(img), path); err != nil { + return err + } + + <-a.Srv.Store.User().ResetLastPictureUpdate(user.Id) + + a.InvalidateCacheForUser(user.Id) + + updatedUser, appErr := a.GetUser(user.Id) + if appErr != nil { + mlog.Error(fmt.Sprintf("Error in getting users profile for id=%v forcing logout", user.Id), mlog.String("user_id", user.Id)) + return nil + } + + options := a.Config().GetSanitizeOptions() + updatedUser.SanitizeProfile(options) + + message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_USER_UPDATED, "", "", "", nil) + message.Add("user", updatedUser) + a.Publish(message) + + return nil } func (a *App) SetProfileImage(userId string, imageData *multipart.FileHeader) *model.AppError { -- cgit v1.2.3-1-g7c22