mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 19:38:23 +00:00 
			
		
		
		
	| @@ -88,6 +88,8 @@ var migrations = []Migration{ | ||||
| 	NewMigration("add external login user", addExternalLoginUser), | ||||
| 	// v19 -> v20 | ||||
| 	NewMigration("generate and migrate Git hooks", generateAndMigrateGitHooks), | ||||
| 	// v20 -> v21 | ||||
| 	NewMigration("use new avtar path name for security reason", useNewNameAvatars), | ||||
| } | ||||
|  | ||||
| // Migrate database to current version | ||||
|   | ||||
							
								
								
									
										66
									
								
								models/migrations/v20.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								models/migrations/v20.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| // 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/setting" | ||||
|  | ||||
| 	"github.com/go-xorm/xorm" | ||||
| ) | ||||
|  | ||||
| func useNewNameAvatars(x *xorm.Engine) error { | ||||
| 	d, err := os.Open(setting.AvatarUploadPath) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	names, err := d.Readdirnames(0) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	type User struct { | ||||
| 		Avatar          string | ||||
| 		UseCustomAvatar bool | ||||
| 	} | ||||
|  | ||||
| 	for _, name := range names { | ||||
| 		userID, err := strconv.ParseInt(name, 10, 64) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
|  | ||||
| 		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 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user