|
|
- // Copyright 2017 The Gitea Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
-
- package migrations
-
- import (
- "crypto/md5"
- "errors"
- "fmt"
- "io/ioutil"
- "os"
- "path/filepath"
- "strconv"
-
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/setting"
-
- "github.com/go-xorm/xorm"
- )
-
- func useNewNameAvatars(x *xorm.Engine) error {
- d, err := os.Open(setting.AvatarUploadPath)
- if err != nil {
- if os.IsNotExist(err) {
- // Nothing to do if AvatarUploadPath does not exist
- return nil
- }
- return err
- }
- names, err := d.Readdirnames(0)
- if err != nil {
- return err
- }
-
- type User struct {
- ID int64 `xorm:"pk autoincr"`
- Avatar string
- UseCustomAvatar bool
- }
-
- for _, name := range names {
- userID, err := strconv.ParseInt(name, 10, 64)
- if err != nil {
- log.Warn("ignore avatar %s rename: %v", name, err)
- continue
- }
-
- var user User
- if has, err := x.ID(userID).Get(&user); err != nil {
- return err
- } else if !has {
- return errors.New("Avatar user is not exist")
- }
-
- fPath := filepath.Join(setting.AvatarUploadPath, name)
- bs, err := ioutil.ReadFile(fPath)
- if err != nil {
- return err
- }
-
- user.Avatar = fmt.Sprintf("%x", md5.Sum(bs))
- err = os.Rename(fPath, filepath.Join(setting.AvatarUploadPath, user.Avatar))
- if err != nil {
- return err
- }
- _, err = x.ID(userID).Cols("avatar").Update(&user)
- if err != nil {
- return err
- }
- }
- return nil
- }
|