Browse Source

#1639

add file total size limit
tags/v1.22.4.1^2
chenyifan01 4 years ago
parent
commit
9731860d9c
4 changed files with 35 additions and 3 deletions
  1. +3
    -0
      modules/setting/repository.go
  2. +1
    -1
      routers/repo/editor.go
  3. +1
    -1
      routers/repo/http.go
  4. +30
    -1
      services/repository/repository.go

+ 3
- 0
modules/setting/repository.go View File

@@ -55,6 +55,7 @@ var (
AllowedTypes []string `delim:"|"`
FileMaxSize int64
MaxFiles int
TotalMaxSize int64
} `ini:"-"`

// Repository local settings
@@ -122,12 +123,14 @@ var (
AllowedTypes []string `delim:"|"`
FileMaxSize int64
MaxFiles int
TotalMaxSize int64
}{
Enabled: true,
TempPath: "data/tmp/uploads",
AllowedTypes: []string{},
FileMaxSize: 3,
MaxFiles: 5,
TotalMaxSize: 100,
},

// Repository local settings


+ 1
- 1
routers/repo/editor.go View File

@@ -615,7 +615,7 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) {
message += "\n\n" + form.CommitMessage
}

if err := repo_service.CheckRepoSizeLimit(ctx.Repo.Repository, form.Files); err != nil {
if err := repo_service.CheckPushSizeLimit4Web(ctx.Repo.Repository, form.Files); err != nil {
if repo_service.IsRepoTooLargeErr(err) {
ctx.RenderWithErr(ctx.Tr("repo.editor.repo_too_large", setting.Repository.RepoMaxSize), tplUploadFile, &form)
} else if repo_service.IsUploadFileInvalidErr(err) {


+ 1
- 1
routers/repo/http.go View File

@@ -549,7 +549,7 @@ func serviceRPC(h serviceHandler, service string) {
content, _ := ioutil.ReadAll(reqBody)
//check size
if service == "receive-pack" {
if err := repo_service.CheckRepoTotalSizeLimit(h.repo, int64(len(content))); err != nil {
if err := repo_service.CheckPushSizeLimit4Http(h.repo, int64(len(content))); err != nil {
h.w.WriteHeader(http.StatusOK)
str := GenerateGitErrorBody(err.Error())
h.w.Write([]byte(str))


+ 30
- 1
services/repository/repository.go View File

@@ -174,7 +174,7 @@ func RecommendFromPromote(url string) ([]string, error) {
return result, nil
}

func CheckRepoSizeLimit(repo *models.Repository, fileIds []string) error {
func CheckPushSizeLimit4Web(repo *models.Repository, fileIds []string) error {
if err := CheckRepoNumOnceLimit(len(fileIds)); err != nil {
return err
}
@@ -188,6 +188,16 @@ func CheckRepoSizeLimit(repo *models.Repository, fileIds []string) error {
return nil
}

func CheckPushSizeLimit4Http(repo *models.Repository, uploadFileSize int64) error {
if err := CheckRepoOnceTotalSizeLimit(uploadFileSize); err != nil {
return err
}
if err := CheckRepoTotalSizeLimit(repo, uploadFileSize); err != nil {
return err
}
return nil
}

func CheckRepoTotalSizeLimit(repo *models.Repository, uploadFileSize int64) error {
if repo.Size+uploadFileSize > setting.Repository.RepoMaxSize*1024*1024 {
return RepoTooLargeErr{}
@@ -195,6 +205,13 @@ func CheckRepoTotalSizeLimit(repo *models.Repository, uploadFileSize int64) erro
return nil
}

func CheckRepoOnceTotalSizeLimit(uploadFileSize int64) error {
if uploadFileSize > setting.Repository.Upload.TotalMaxSize*1024*1024 {
return UploadFileTooLargeErr{}
}
return nil
}

func CheckRepoNumOnceLimit(uploadFileNum int) error {
if uploadFileNum > setting.Repository.Upload.MaxFiles {
return UploadFileTooMuchErr{}
@@ -243,6 +260,18 @@ func IsRepoTooLargeErr(err error) bool {
return ok
}

type UploadFileTooLargeErr struct {
}

func (UploadFileTooLargeErr) Error() string {
return fmt.Sprintf("Upload files can not exceed %d MB at a time", setting.Repository.Upload.TotalMaxSize)
}

func IsUploadFileTooLargeErr(err error) bool {
_, ok := err.(UploadFileTooLargeErr)
return ok
}

type RepoFileTooLargeErr struct {
}



Loading…
Cancel
Save