|
@@ -34,6 +34,7 @@ import (
|
|
|
"gogs.io/gogs/internal/errutil"
|
|
|
"gogs.io/gogs/internal/strutil"
|
|
|
"gogs.io/gogs/internal/tool"
|
|
|
+ "gogs.io/gogs/internal/userutil"
|
|
|
)
|
|
|
|
|
|
// TODO(unknwon): Delete me once refactoring is done.
|
|
@@ -60,75 +61,6 @@ func (u *User) AfterSet(colName string, _ xorm.Cell) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-// CustomAvatarPath returns user custom avatar file path.
|
|
|
-func (u *User) CustomAvatarPath() string {
|
|
|
- return filepath.Join(conf.Picture.AvatarUploadPath, com.ToStr(u.ID))
|
|
|
-}
|
|
|
-
|
|
|
-// GenerateRandomAvatar generates a random avatar for user.
|
|
|
-func (u *User) GenerateRandomAvatar() error {
|
|
|
- seed := u.Email
|
|
|
- if seed == "" {
|
|
|
- seed = u.Name
|
|
|
- }
|
|
|
-
|
|
|
- img, err := avatar.RandomImage([]byte(seed))
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("RandomImage: %v", err)
|
|
|
- }
|
|
|
- if err = os.MkdirAll(filepath.Dir(u.CustomAvatarPath()), os.ModePerm); err != nil {
|
|
|
- return fmt.Errorf("MkdirAll: %v", err)
|
|
|
- }
|
|
|
- fw, err := os.Create(u.CustomAvatarPath())
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("Create: %v", err)
|
|
|
- }
|
|
|
- defer fw.Close()
|
|
|
-
|
|
|
- if err = png.Encode(fw, img); err != nil {
|
|
|
- return fmt.Errorf("Encode: %v", err)
|
|
|
- }
|
|
|
-
|
|
|
- log.Info("New random avatar created: %d", u.ID)
|
|
|
- return nil
|
|
|
-}
|
|
|
-
|
|
|
-// RelAvatarLink returns relative avatar link to the site domain,
|
|
|
-// which includes app sub-url as prefix. However, it is possible
|
|
|
-// to return full URL if user enables Gravatar-like service.
|
|
|
-func (u *User) RelAvatarLink() string {
|
|
|
- defaultImgUrl := conf.Server.Subpath + "/img/avatar_default.png"
|
|
|
- if u.ID == -1 {
|
|
|
- return defaultImgUrl
|
|
|
- }
|
|
|
-
|
|
|
- switch {
|
|
|
- case u.UseCustomAvatar:
|
|
|
- if !com.IsExist(u.CustomAvatarPath()) {
|
|
|
- return defaultImgUrl
|
|
|
- }
|
|
|
- return fmt.Sprintf("%s/%s/%d", conf.Server.Subpath, conf.UsersAvatarURLPath, u.ID)
|
|
|
- case conf.Picture.DisableGravatar:
|
|
|
- if !com.IsExist(u.CustomAvatarPath()) {
|
|
|
- if err := u.GenerateRandomAvatar(); err != nil {
|
|
|
- log.Error("GenerateRandomAvatar: %v", err)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return fmt.Sprintf("%s/%s/%d", conf.Server.Subpath, conf.UsersAvatarURLPath, u.ID)
|
|
|
- }
|
|
|
- return tool.AvatarLink(u.AvatarEmail)
|
|
|
-}
|
|
|
-
|
|
|
-// AvatarLink returns user avatar absolute link.
|
|
|
-func (u *User) AvatarLink() string {
|
|
|
- link := u.RelAvatarLink()
|
|
|
- if link[0] == '/' && link[1] != '/' {
|
|
|
- return conf.Server.ExternalURL + strings.TrimPrefix(link, conf.Server.Subpath)[1:]
|
|
|
- }
|
|
|
- return link
|
|
|
-}
|
|
|
-
|
|
|
// User.GetFollowers returns range of user's followers.
|
|
|
func (u *User) GetFollowers(page int) ([]*User, error) {
|
|
|
users := make([]*User, 0, ItemsPerPage)
|
|
@@ -188,7 +120,7 @@ func (u *User) UploadAvatar(data []byte) error {
|
|
|
}
|
|
|
|
|
|
_ = os.MkdirAll(conf.Picture.AvatarUploadPath, os.ModePerm)
|
|
|
- fw, err := os.Create(u.CustomAvatarPath())
|
|
|
+ fw, err := os.Create(userutil.CustomAvatarPath(u.ID))
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("create custom avatar directory: %v", err)
|
|
|
}
|
|
@@ -204,8 +136,9 @@ func (u *User) UploadAvatar(data []byte) error {
|
|
|
|
|
|
// DeleteAvatar deletes the user's custom avatar.
|
|
|
func (u *User) DeleteAvatar() error {
|
|
|
- log.Trace("DeleteAvatar [%d]: %s", u.ID, u.CustomAvatarPath())
|
|
|
- if err := os.Remove(u.CustomAvatarPath()); err != nil {
|
|
|
+ avatarPath := userutil.CustomAvatarPath(u.ID)
|
|
|
+ log.Trace("DeleteAvatar [%d]: %s", u.ID, avatarPath)
|
|
|
+ if err := os.Remove(avatarPath); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
@@ -705,7 +638,7 @@ func deleteUser(e *xorm.Session, u *User) error {
|
|
|
// so just keep error logs of those operations.
|
|
|
|
|
|
_ = os.RemoveAll(UserPath(u.Name))
|
|
|
- _ = os.Remove(u.CustomAvatarPath())
|
|
|
+ _ = os.Remove(userutil.CustomAvatarPath(u.ID))
|
|
|
|
|
|
return nil
|
|
|
}
|