mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Repository avatars (#6986)
* Repository avatars - first variant of code from old work for gogs - add migration 87 - add new option in app.ini - add en-US locale string - add new class in repository.less * Add changed index.css, remove unused template name * Update en-us doc about configuration options * Add comments to new functions, add new option to docker app.ini * Add comment for lint * Remove variable, not needed * Fix formatting * Update swagger api template * Check if avatar exists * Fix avatar link/path checks * Typo * TEXT column can't have a default value * Fixes: - remove old avatar file on upload - use ID in name of avatar file - users may upload same files - add simple tests * Fix fmt check * Generate PNG instead of "static" GIF * More informative comment * Fix error message * Update avatar upload checks: - add file size check - add new option - update config docs - add new string to en-us locale * Fixes: - use FileHEader field for check file size - add new test - upload big image * Fix formatting * Update comments * Update log message * Removed wrong style - not needed * Use Sync2 to migrate * Update repos list view - bigger avatar - fix html blocks alignment * A little adjust avatar size * Use small icons for explore/repo list * Use new cool avatar preparation func by @lafriks * Missing changes for new function * Remove unused import, move imports * Missed new option definition in app.ini Add file size check in user/profile avatar upload * Use smaller field length for Avatar * Use session to update repo DB data, update DeleteAvatar - use session too * Fix err variable definition * As suggested @lafriks - return as soon as possible, code readability
This commit is contained in:
		
				
					committed by
					
						
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							d7494046ac
						
					
				
				
					commit
					3fd18838aa
				
			@@ -7,11 +7,14 @@ package repo
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/Unknwon/com"
 | 
			
		||||
	"mvdan.cc/xurls/v2"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/models"
 | 
			
		||||
@@ -727,3 +730,59 @@ func init() {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UpdateAvatarSetting update repo's avatar
 | 
			
		||||
func UpdateAvatarSetting(ctx *context.Context, form auth.AvatarForm) error {
 | 
			
		||||
	ctxRepo := ctx.Repo.Repository
 | 
			
		||||
 | 
			
		||||
	if form.Avatar == nil {
 | 
			
		||||
		// No avatar is uploaded and we not removing it here.
 | 
			
		||||
		// No random avatar generated here.
 | 
			
		||||
		// Just exit, no action.
 | 
			
		||||
		if !com.IsFile(ctxRepo.CustomAvatarPath()) {
 | 
			
		||||
			log.Trace("No avatar was uploaded for repo: %d. Default icon will appear instead.", ctxRepo.ID)
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	r, err := form.Avatar.Open()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("Avatar.Open: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	defer r.Close()
 | 
			
		||||
 | 
			
		||||
	if form.Avatar.Size > setting.AvatarMaxFileSize {
 | 
			
		||||
		return errors.New(ctx.Tr("settings.uploaded_avatar_is_too_big"))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	data, err := ioutil.ReadAll(r)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return fmt.Errorf("ioutil.ReadAll: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	if !base.IsImageFile(data) {
 | 
			
		||||
		return errors.New(ctx.Tr("settings.uploaded_avatar_not_a_image"))
 | 
			
		||||
	}
 | 
			
		||||
	if err = ctxRepo.UploadAvatar(data); err != nil {
 | 
			
		||||
		return fmt.Errorf("UploadAvatar: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SettingsAvatar save new POSTed repository avatar
 | 
			
		||||
func SettingsAvatar(ctx *context.Context, form auth.AvatarForm) {
 | 
			
		||||
	form.Source = auth.AvatarLocal
 | 
			
		||||
	if err := UpdateAvatarSetting(ctx, form); err != nil {
 | 
			
		||||
		ctx.Flash.Error(err.Error())
 | 
			
		||||
	} else {
 | 
			
		||||
		ctx.Flash.Success(ctx.Tr("repo.settings.update_avatar_success"))
 | 
			
		||||
	}
 | 
			
		||||
	ctx.Redirect(ctx.Repo.RepoLink + "/settings")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SettingsDeleteAvatar delete repository avatar
 | 
			
		||||
func SettingsDeleteAvatar(ctx *context.Context) {
 | 
			
		||||
	if err := ctx.Repo.Repository.DeleteAvatar(); err != nil {
 | 
			
		||||
		ctx.Flash.Error(fmt.Sprintf("DeleteAvatar: %v", err))
 | 
			
		||||
	}
 | 
			
		||||
	ctx.Redirect(ctx.Repo.RepoLink + "/settings")
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user