From 9fcbd70f1e5bab1239bc1d986ef120f975210d74 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 28 Mar 2022 17:05:42 +0800 Subject: [PATCH 01/10] fix issue --- web_src/js/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/web_src/js/index.js b/web_src/js/index.js index 902750c5b..f245045db 100755 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -2788,6 +2788,9 @@ $(document).ready(async () => { }); } }); + this.on('addedfile',(file)=>{ + console.log("addfile",file) + }) } }); } From ce3d50cd068e6789d0b5b3a3a001dad628bbb582 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Tue, 29 Mar 2022 10:23:57 +0800 Subject: [PATCH 02/10] fix issue --- templates/repo/editor/upload.tmpl | 2 +- web_src/js/index.js | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/templates/repo/editor/upload.tmpl b/templates/repo/editor/upload.tmpl index 7794c2a2d..08727600c 100644 --- a/templates/repo/editor/upload.tmpl +++ b/templates/repo/editor/upload.tmpl @@ -27,7 +27,7 @@
-
+
{{template "repo/editor/commit_form" .}} diff --git a/web_src/js/index.js b/web_src/js/index.js index f245045db..a832c0b4b 100755 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -2769,6 +2769,7 @@ $(document).ready(async () => { dictInvalidFileType: $dropzone.data('invalid-input-type'), dictFileTooBig: $dropzone.data('file-too-big'), dictRemoveFile: $dropzone.data('remove-file'), + dictMaxFilesExceeded:'上次超过限制', init() { this.on('success', (file, data) => { filenameDict[file.name] = data.uuid; @@ -2789,8 +2790,20 @@ $(document).ready(async () => { } }); this.on('addedfile',(file)=>{ - console.log("addfile",file) + console.log("addfile",file,filenameDict,this.files.length) + if(file.size/(1000*1000)>3){ + this.removeFile(file) + $('.maxfilesize.ui.red.message').text('单次最多上传XX个文件,每个文件不超过XXM。') + $('.maxfilesize.ui.red.message').css('display','block') + } + + }); + this.on('maxfilesexceeded',(file)=>{ + this.removeFile(file) + $('.maxfilesize.ui.red.message').text('一次最多只能上传 5 个文件, 上传已达到上限,请勿再添加文件。') + $('.maxfilesize.ui.red.message').css('display','block') }) + } }); } From 2e405768a9a65614ea78aa1de5e1b5b08b59b133 Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Fri, 1 Apr 2022 15:22:55 +0800 Subject: [PATCH 03/10] #1639 add repo total size limit --- modules/setting/repository.go | 1 + routers/repo/editor.go | 7 +++++ services/repository/repository.go | 59 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/modules/setting/repository.go b/modules/setting/repository.go index 8af3eaaf4..a9786ca18 100644 --- a/modules/setting/repository.go +++ b/modules/setting/repository.go @@ -40,6 +40,7 @@ var ( DisabledRepoUnits []string DefaultRepoUnits []string PrefixArchiveFiles bool + RepoMaxSize int64 // Repository editor settings Editor struct { diff --git a/routers/repo/editor.go b/routers/repo/editor.go index 2fa7976e0..94ced019c 100644 --- a/routers/repo/editor.go +++ b/routers/repo/editor.go @@ -5,6 +5,7 @@ package repo import ( + repo_service "code.gitea.io/gitea/services/repository" "encoding/json" "fmt" "io/ioutil" @@ -614,6 +615,12 @@ 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 { + //ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), tplUploadFile, &form) + ctx.RenderWithErr(err.Error(), tplUploadFile, &form) + return + } + if err := repofiles.UploadRepoFiles(ctx.Repo.Repository, ctx.User, &repofiles.UploadRepoFileOptions{ LastCommitID: ctx.Repo.CommitID, OldBranch: oldBranchName, diff --git a/services/repository/repository.go b/services/repository/repository.go index cea16516a..c9080f930 100644 --- a/services/repository/repository.go +++ b/services/repository/repository.go @@ -5,9 +5,11 @@ package repository import ( + "errors" "fmt" "io/ioutil" "net/http" + "os" "strings" "code.gitea.io/gitea/models" @@ -172,3 +174,60 @@ func RecommendFromPromote(url string) ([]string, error) { } return result, nil } + +func CheckRepoSizeLimit(repo *models.Repository, fileIds []string) error { + if err := CheckRepoNumOnceLimit(len(fileIds)); err != nil { + return err + } + totalSize, err := CountUploadFileSizeByIds(fileIds) + if err != nil { + return errors.New("upload files are invalid") + } + if err := CheckRepoTotalSizeLimit(repo, totalSize); err != nil { + return err + } + return nil +} + +func CheckRepoTotalSizeLimit(repo *models.Repository, uploadFileSize int64) error { + if repo.Size+uploadFileSize > setting.Repository.RepoMaxSize*1024*1024 { + return errors.New(fmt.Sprintf("repository can not exceed %d MB", setting.Repository.RepoMaxSize)) + } + return nil +} + +func CheckRepoNumOnceLimit(uploadFileNum int) error { + if uploadFileNum > setting.Repository.Upload.MaxFiles { + return errors.New(fmt.Sprintf("can not upload more than %d files at a time", setting.Repository.Upload.MaxFiles)) + } + return nil +} + +func CountUploadFileSizeByIds(fileIds []string) (int64, error) { + if len(fileIds) == 0 { + return 0, nil + } + uploads, err := models.GetUploadsByUUIDs(fileIds) + if err != nil { + return 0, fmt.Errorf("CountUploadFileSizeByIds error [uuids: %v]: %v", fileIds, err) + } + var totalSize int64 + for _, upload := range uploads { + size, err := GetUploadFileSize(upload) + if err != nil { + return 0, err + } + totalSize += size + } + return totalSize, nil +} + +func GetUploadFileSize(upload *models.Upload) (int64, error) { + info, err := os.Lstat(upload.LocalPath()) + + if err != nil { + return 0, err + } + return info.Size(), nil + +} From d38f55927b3d0e82927c3ac4999f474ffb4aacbb Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Thu, 7 Apr 2022 10:31:39 +0800 Subject: [PATCH 04/10] #1639 add error msg for shell --- options/locale/locale_en-US.ini | 4 +++ options/locale/locale_zh-CN.ini | 3 +++ routers/repo/editor.go | 11 ++++++-- routers/repo/http.go | 52 +++++++++++++++++++++++++++++++++--- services/repository/repository.go | 55 ++++++++++++++++++++++++++++++++++++--- 5 files changed, 116 insertions(+), 9 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index a990e9aee..f9bebbb86 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1236,6 +1236,10 @@ editor.cannot_commit_to_protected_branch = Cannot commit to protected branch '%s editor.no_commit_to_branch = Unable to commit directly to branch because: editor.user_no_push_to_branch = User cannot push to branch editor.require_signed_commit = Branch requires a signed commit +editor.repo_too_large = Repository can not exceed %d MB +editor.repo_file_invalid = Upload files are invalid +editor.upload_file_too_much = Can not upload more than %d files at a time + commits.desc = Browse source code change history. commits.commits = Commits diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 4e73fbad5..8679554c6 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -1244,6 +1244,9 @@ editor.cannot_commit_to_protected_branch=不可以提交到受保护的分支 '% editor.no_commit_to_branch=无法直接提交分支,因为: editor.user_no_push_to_branch=用户不能推送到分支 editor.require_signed_commit=分支需要签名提交 +editor.repo_too_large = 代码仓总大小不能超过%dMB +editor.repo_file_invalid = 提交的文件非法 +editor.upload_file_too_much = 不能同时提交超过%d个文件 commits.desc=浏览代码修改历史 commits.commits=次代码提交 diff --git a/routers/repo/editor.go b/routers/repo/editor.go index 94ced019c..b089a784c 100644 --- a/routers/repo/editor.go +++ b/routers/repo/editor.go @@ -616,8 +616,15 @@ func UploadFilePost(ctx *context.Context, form auth.UploadRepoFileForm) { } if err := repo_service.CheckRepoSizeLimit(ctx.Repo.Repository, form.Files); err != nil { - //ctx.RenderWithErr(ctx.Tr("repo.editor.directory_is_a_file", part), tplUploadFile, &form) - ctx.RenderWithErr(err.Error(), tplUploadFile, &form) + 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) { + ctx.RenderWithErr(ctx.Tr("repo.editor.repo_file_invalid"), tplUploadFile, &form) + } else if repo_service.IsUploadFileTooMuchErr(err) { + ctx.RenderWithErr(ctx.Tr("repo.editor.upload_file_too_much", setting.Repository.Upload.MaxFiles), tplUploadFile, &form) + } else { + ctx.RenderWithErr(err.Error(), tplUploadFile, &form) + } return } diff --git a/routers/repo/http.go b/routers/repo/http.go index 87406a2c3..99d38d437 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -365,8 +365,7 @@ func HTTP(ctx *context.Context) { ctx.NotFound("Smart Git HTTP", err) return } - - route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env}) + route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env, repo}) return } } @@ -429,6 +428,7 @@ type serviceHandler struct { dir string file string environ []string + repo *models.Repository } func (h *serviceHandler) setHeaderNoCache() { @@ -546,6 +546,19 @@ func serviceRPC(h serviceHandler, service string) { return } } + content, _ := ioutil.ReadAll(reqBody) + //check size + if service == "receive-pack" { + if err := repo_service.CheckRepoTotalSizeLimit(h.repo, int64(len(content))); err != nil { + h.w.WriteHeader(http.StatusOK) + str := GenerateGitErrorBody(err.Error()) + h.w.Write([]byte(str)) + if h.w.Header().Get("Content-Type") == "" { + h.w.Header().Set("Content-Type", "application/x-git-receive-pack-result") + } + return + } + } // set this for allow pre-receive and post-receive execute h.environ = append(h.environ, "SSH_ORIGINAL_COMMAND="+service) @@ -560,7 +573,7 @@ func serviceRPC(h serviceHandler, service string) { } cmd.Stdout = h.w - cmd.Stdin = reqBody + cmd.Stdin = bytes.NewReader(content) cmd.Stderr = &stderr pid := process.GetManager().Add(fmt.Sprintf("%s %s %s [repo_path: %s]", git.GitExecutable, service, "--stateless-rpc", h.dir), cancel) @@ -572,6 +585,39 @@ func serviceRPC(h serviceHandler, service string) { } } +func GenerateGitErrorBody(content string) string { + var builder strings.Builder + builder.WriteString(GenerateErrStartPKTLine()) + builder.WriteString(GeneratePKTLine(content)) + builder.WriteString(GenerateEndPKTLine()) + return builder.String() +} + +func GeneratePKTLine(content string) string { + content = "\u0002\033[31m " + content + " \033[0m" + l := len(content) + prefixLength := 4 + suffix := "\n" + f := strconv.FormatInt(int64(l+prefixLength+len(suffix)), 16) + lf := len(f) + if lf == 1 { + f = "000" + f + } else if lf == 2 { + f = "00" + f + } else if lf == 3 { + f = "0" + f + } + return f + content + suffix +} + +func GenerateEndPKTLine() string { + return "0000" +} + +func GenerateErrStartPKTLine() string { + return "0031\u0001000eunpack err\n0019ok refs/heads/master\n0000" +} + func serviceUploadPack(h serviceHandler) { serviceRPC(h, "upload-pack") } diff --git a/services/repository/repository.go b/services/repository/repository.go index c9080f930..fc4411056 100644 --- a/services/repository/repository.go +++ b/services/repository/repository.go @@ -5,7 +5,6 @@ package repository import ( - "errors" "fmt" "io/ioutil" "net/http" @@ -181,7 +180,7 @@ func CheckRepoSizeLimit(repo *models.Repository, fileIds []string) error { } totalSize, err := CountUploadFileSizeByIds(fileIds) if err != nil { - return errors.New("upload files are invalid") + return UploadFileInvalidErr{} } if err := CheckRepoTotalSizeLimit(repo, totalSize); err != nil { return err @@ -191,14 +190,14 @@ func CheckRepoSizeLimit(repo *models.Repository, fileIds []string) error { func CheckRepoTotalSizeLimit(repo *models.Repository, uploadFileSize int64) error { if repo.Size+uploadFileSize > setting.Repository.RepoMaxSize*1024*1024 { - return errors.New(fmt.Sprintf("repository can not exceed %d MB", setting.Repository.RepoMaxSize)) + return RepoTooLargeErr{} } return nil } func CheckRepoNumOnceLimit(uploadFileNum int) error { if uploadFileNum > setting.Repository.Upload.MaxFiles { - return errors.New(fmt.Sprintf("can not upload more than %d files at a time", setting.Repository.Upload.MaxFiles)) + return UploadFileTooMuchErr{} } return nil } @@ -231,3 +230,51 @@ func GetUploadFileSize(upload *models.Upload) (int64, error) { return info.Size(), nil } + +type RepoTooLargeErr struct { +} + +func (RepoTooLargeErr) Error() string { + return fmt.Sprintf("Repository can not exceed %d MB. Please remove some unnecessary files and try again", setting.Repository.RepoMaxSize) +} + +func IsRepoTooLargeErr(err error) bool { + _, ok := err.(RepoTooLargeErr) + return ok +} + +type RepoFileTooLargeErr struct { +} + +func (RepoFileTooLargeErr) Error() string { + return "repository file is too large" +} + +func IsRepoFileTooLargeErr(err error) bool { + _, ok := err.(RepoFileTooLargeErr) + return ok +} + +type UploadFileTooMuchErr struct { +} + +func (UploadFileTooMuchErr) Error() string { + return "upload files are too lmuch" +} + +func IsUploadFileTooMuchErr(err error) bool { + _, ok := err.(UploadFileTooMuchErr) + return ok +} + +type UploadFileInvalidErr struct { +} + +func (UploadFileInvalidErr) Error() string { + return "upload files are invalid" +} + +func IsUploadFileInvalidErr(err error) bool { + _, ok := err.(UploadFileInvalidErr) + return ok +} From 0c4310afb1998261436e3c326bf9f7b4a6e380f4 Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Thu, 7 Apr 2022 11:03:10 +0800 Subject: [PATCH 05/10] #1639 update --- routers/repo/http.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/routers/repo/http.go b/routers/repo/http.go index 99d38d437..e3ab329ba 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -594,6 +594,8 @@ func GenerateGitErrorBody(content string) string { } func GeneratePKTLine(content string) string { + //\033[31m ... \033[0m + //mark the text red in shell content = "\u0002\033[31m " + content + " \033[0m" l := len(content) prefixLength := 4 From 9731860d9ca1729e0b6189d11454048e0243b965 Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Fri, 8 Apr 2022 10:58:46 +0800 Subject: [PATCH 06/10] #1639 add file total size limit --- modules/setting/repository.go | 3 +++ routers/repo/editor.go | 2 +- routers/repo/http.go | 2 +- services/repository/repository.go | 31 ++++++++++++++++++++++++++++++- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/modules/setting/repository.go b/modules/setting/repository.go index a9786ca18..54ed13c2f 100644 --- a/modules/setting/repository.go +++ b/modules/setting/repository.go @@ -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 diff --git a/routers/repo/editor.go b/routers/repo/editor.go index b089a784c..8e13735df 100644 --- a/routers/repo/editor.go +++ b/routers/repo/editor.go @@ -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) { diff --git a/routers/repo/http.go b/routers/repo/http.go index e3ab329ba..26d58bd54 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -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)) diff --git a/services/repository/repository.go b/services/repository/repository.go index fc4411056..d0cd52653 100644 --- a/services/repository/repository.go +++ b/services/repository/repository.go @@ -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 { } From b2357f2d2e477474d11d0f7d00d033e5efc9bdfc Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 11 Apr 2022 11:04:04 +0800 Subject: [PATCH 07/10] fix issue --- options/locale/locale_en-US.ini | 2 ++ options/locale/locale_zh-CN.ini | 2 ++ templates/repo/editor/upload.tmpl | 4 ++-- web_src/js/index.js | 22 ++++++++++++++++++---- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index f9bebbb86..781d5634f 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2836,6 +2836,8 @@ uploading = Uploading upload_complete = Uploading complete failed = Upload Failed enable_minio_support = Enable minio support to use the dataset service +max_file_tooltips= Upload a maximum of ? files at a time, each file does not exceed ? MB. +max_size-tooltips= You can only upload a maximum of ? files at a time. The upload limit has been reached, please do not add more files. [notification] notifications = Notifications diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 8679554c6..5a047ce9e 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -2842,6 +2842,8 @@ uploading=正在上传 upload_complete=上传完成 failed=上传失败 enable_minio_support=启用minio支持以使用数据集服务 +max_file_tooltips=单次最多上传?个文件,每个文件不超过? MB。 +max_size-tooltips=一次最多只能上传?个文件, 上传已达到上限,请勿再添加文件。 [notification] notifications=通知 diff --git a/templates/repo/editor/upload.tmpl b/templates/repo/editor/upload.tmpl index 08727600c..7eae567c2 100644 --- a/templates/repo/editor/upload.tmpl +++ b/templates/repo/editor/upload.tmpl @@ -27,10 +27,10 @@
-
+
{{template "repo/editor/commit_form" .}} -{{template "base/footer" .}} +{{template "base/footer" .}} \ No newline at end of file diff --git a/web_src/js/index.js b/web_src/js/index.js index a04b76936..3127e2110 100755 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -2751,9 +2751,23 @@ $(document).ready(async () => { $('td[data-href]').click(function () { window.location = $(this).data('href'); }); + // 在String原型对象上添加format方法 + String.prototype.format = function(){ + let str = this; + if(arguments.length == 0){ + return str; + }else{ + Object.keys(arguments).forEach((item,index)=>{ + str = str.replace(/\?/,arguments[item]) + }) + return str + } + } // Dropzone const $dropzone = $('#dropzone'); + let maxFileTooltips=$dropzone.data('max-file-tooltips').format($dropzone.data('max-file'),$dropzone.data('max-size')) + let maxSizeTooltips=$dropzone.data('max-size-tooltips').format($dropzone.data('max-file')) if ($dropzone.length > 0) { const filenameDict = {}; @@ -2769,7 +2783,6 @@ $(document).ready(async () => { dictInvalidFileType: $dropzone.data('invalid-input-type'), dictFileTooBig: $dropzone.data('file-too-big'), dictRemoveFile: $dropzone.data('remove-file'), - dictMaxFilesExceeded:'上次超过限制', init() { this.on('success', (file, data) => { filenameDict[file.name] = data.uuid; @@ -2790,17 +2803,18 @@ $(document).ready(async () => { } }); this.on('addedfile',(file)=>{ - console.log("addfile",file,filenameDict,this.files.length) if(file.size/(1000*1000)>3){ this.removeFile(file) - $('.maxfilesize.ui.red.message').text('单次最多上传XX个文件,每个文件不超过XXM。') + $('.maxfilesize.ui.red.message').text(maxFileTooltips) $('.maxfilesize.ui.red.message').css('display','block') + }else{ + $('.maxfilesize.ui.red.message').css('display','none') } }); this.on('maxfilesexceeded',(file)=>{ this.removeFile(file) - $('.maxfilesize.ui.red.message').text('一次最多只能上传 5 个文件, 上传已达到上限,请勿再添加文件。') + $('.maxfilesize.ui.red.message').text(maxSizeTooltips) $('.maxfilesize.ui.red.message').css('display','block') }) From aff84ba79e0736e263f110ae726a906dd8ed052e Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Mon, 11 Apr 2022 12:10:59 +0800 Subject: [PATCH 08/10] #1639 rollback --- routers/repo/http.go | 54 +++------------------------------------------------- 1 file changed, 3 insertions(+), 51 deletions(-) diff --git a/routers/repo/http.go b/routers/repo/http.go index 26d58bd54..87406a2c3 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -365,7 +365,8 @@ func HTTP(ctx *context.Context) { ctx.NotFound("Smart Git HTTP", err) return } - route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env, repo}) + + route.handler(serviceHandler{cfg, w, r, dir, file, cfg.Env}) return } } @@ -428,7 +429,6 @@ type serviceHandler struct { dir string file string environ []string - repo *models.Repository } func (h *serviceHandler) setHeaderNoCache() { @@ -546,19 +546,6 @@ func serviceRPC(h serviceHandler, service string) { return } } - content, _ := ioutil.ReadAll(reqBody) - //check size - if service == "receive-pack" { - 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)) - if h.w.Header().Get("Content-Type") == "" { - h.w.Header().Set("Content-Type", "application/x-git-receive-pack-result") - } - return - } - } // set this for allow pre-receive and post-receive execute h.environ = append(h.environ, "SSH_ORIGINAL_COMMAND="+service) @@ -573,7 +560,7 @@ func serviceRPC(h serviceHandler, service string) { } cmd.Stdout = h.w - cmd.Stdin = bytes.NewReader(content) + cmd.Stdin = reqBody cmd.Stderr = &stderr pid := process.GetManager().Add(fmt.Sprintf("%s %s %s [repo_path: %s]", git.GitExecutable, service, "--stateless-rpc", h.dir), cancel) @@ -585,41 +572,6 @@ func serviceRPC(h serviceHandler, service string) { } } -func GenerateGitErrorBody(content string) string { - var builder strings.Builder - builder.WriteString(GenerateErrStartPKTLine()) - builder.WriteString(GeneratePKTLine(content)) - builder.WriteString(GenerateEndPKTLine()) - return builder.String() -} - -func GeneratePKTLine(content string) string { - //\033[31m ... \033[0m - //mark the text red in shell - content = "\u0002\033[31m " + content + " \033[0m" - l := len(content) - prefixLength := 4 - suffix := "\n" - f := strconv.FormatInt(int64(l+prefixLength+len(suffix)), 16) - lf := len(f) - if lf == 1 { - f = "000" + f - } else if lf == 2 { - f = "00" + f - } else if lf == 3 { - f = "0" + f - } - return f + content + suffix -} - -func GenerateEndPKTLine() string { - return "0000" -} - -func GenerateErrStartPKTLine() string { - return "0031\u0001000eunpack err\n0019ok refs/heads/master\n0000" -} - func serviceUploadPack(h serviceHandler) { serviceRPC(h, "upload-pack") } From 8679849c3d582854214994f03b4a33d6597981ab Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 11 Apr 2022 14:36:00 +0800 Subject: [PATCH 09/10] fix issue --- options/locale/locale_en-US.ini | 2 +- options/locale/locale_zh-CN.ini | 2 +- web_src/js/index.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 781d5634f..976387dd9 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2837,7 +2837,7 @@ upload_complete = Uploading complete failed = Upload Failed enable_minio_support = Enable minio support to use the dataset service max_file_tooltips= Upload a maximum of ? files at a time, each file does not exceed ? MB. -max_size-tooltips= You can only upload a maximum of ? files at a time. The upload limit has been reached, please do not add more files. +max_size_tooltips= You can only upload a maximum of ? files at a time. The upload limit has been reached, please do not add more files. [notification] notifications = Notifications diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 5a047ce9e..6e4b2dc59 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -2843,7 +2843,7 @@ upload_complete=上传完成 failed=上传失败 enable_minio_support=启用minio支持以使用数据集服务 max_file_tooltips=单次最多上传?个文件,每个文件不超过? MB。 -max_size-tooltips=一次最多只能上传?个文件, 上传已达到上限,请勿再添加文件。 +max_size_tooltips=一次最多只能上传?个文件, 上传已达到上限,请勿再添加文件。 [notification] notifications=通知 diff --git a/web_src/js/index.js b/web_src/js/index.js index 3127e2110..8cbf86fb2 100755 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -2803,7 +2803,7 @@ $(document).ready(async () => { } }); this.on('addedfile',(file)=>{ - if(file.size/(1000*1000)>3){ + if(file.size/(1000*1000)>$dropzone.data('max-size')){ this.removeFile(file) $('.maxfilesize.ui.red.message').text(maxFileTooltips) $('.maxfilesize.ui.red.message').css('display','block') From 985a66b0f1f175f8d600a7dd6b6bed86c55e9ef4 Mon Sep 17 00:00:00 2001 From: chenyifan01 Date: Mon, 11 Apr 2022 14:55:36 +0800 Subject: [PATCH 10/10] #1639 update default value --- modules/setting/repository.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/setting/repository.go b/modules/setting/repository.go index 54ed13c2f..dceb48f16 100644 --- a/modules/setting/repository.go +++ b/modules/setting/repository.go @@ -106,6 +106,7 @@ var ( DisabledRepoUnits: []string{}, DefaultRepoUnits: []string{}, PrefixArchiveFiles: true, + RepoMaxSize: 1024, // Repository editor settings Editor: struct { @@ -128,9 +129,9 @@ var ( Enabled: true, TempPath: "data/tmp/uploads", AllowedTypes: []string{}, - FileMaxSize: 3, - MaxFiles: 5, - TotalMaxSize: 100, + FileMaxSize: 30, + MaxFiles: 10, + TotalMaxSize: 1024, }, // Repository local settings