From 66c476e5debfbd960b0c78a53323d6d7bce2431f Mon Sep 17 00:00:00 2001 From: truecode112 Date: Mon, 15 May 2023 09:57:47 +0300 Subject: [PATCH] UI related changed for ENABLE_SIZE_LIMIT & REPO_SIZE_LIMIT options --- modules/base/tool.go | 9 ++++++++- modules/setting/repository.go | 20 +++++++++++++++++++ routers/web/admin/repos.go | 36 ++++++++++++++++++++++++++++++++++ routers/web/explore/repo.go | 5 +++++ routers/web/web.go | 2 ++ services/forms/repo_form.go | 6 ++++++ templates/admin/repo/list.tmpl | 21 ++++++++++++++++++++ 7 files changed, 98 insertions(+), 1 deletion(-) diff --git a/modules/base/tool.go b/modules/base/tool.go index 13b07c043e..96d1391e3a 100644 --- a/modules/base/tool.go +++ b/modules/base/tool.go @@ -138,7 +138,14 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string // FileSize calculates the file size and generate user-friendly string. func FileSize(s int64) string { - return humanize.IBytes(uint64(s)) + return humanize.Bytes(uint64(s)) +} + +// Get FileSize bytes value from String. +func GetFileSize(s string) (int64, error) { + v, err := humanize.ParseBytes(s) + iv := int64(v) + return iv, err } // EllipsisString returns a truncated short string, diff --git a/modules/setting/repository.go b/modules/setting/repository.go index 56e7e6f4ac..a495f471d6 100644 --- a/modules/setting/repository.go +++ b/modules/setting/repository.go @@ -7,6 +7,7 @@ import ( "os/exec" "path" "path/filepath" + "strconv" "strings" "code.gitea.io/gitea/modules/log" @@ -265,12 +266,31 @@ var ( RepoArchive = struct { Storage }{} + + EnableSizeLimit = true + RepoSizeLimit int64 = 0 ) +func SaveGlobalRepositorySetting(enable_size_limit bool, repo_size_limit int64) { + EnableSizeLimit = enable_size_limit + RepoSizeLimit = repo_size_limit + sec := CfgProvider.Section("repository") + if EnableSizeLimit { + sec.Key("ENABLE_SIZE_LIMIT").SetValue("true") + } else { + sec.Key("ENABLE_SIZE_LIMIT").SetValue("false") + } + + sec.Key("REPO_SIZE_LIMIT").SetValue(strconv.FormatInt(RepoSizeLimit, 10)) +} + func loadRepositoryFrom(rootCfg ConfigProvider) { var err error + // Determine and create root git repository path. sec := rootCfg.Section("repository") + EnableSizeLimit = sec.Key("ENABLE_SIZE_LIMIT").MustBool() + RepoSizeLimit = sec.Key("REPO_SIZE_LIMIT").MustInt64(0) Repository.DisableHTTPGit = sec.Key("DISABLE_HTTP_GIT").MustBool() Repository.UseCompatSSHURI = sec.Key("USE_COMPAT_SSH_URI").MustBool() Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1) diff --git a/routers/web/admin/repos.go b/routers/web/admin/repos.go index 9a0e467b48..2287f81fe1 100644 --- a/routers/web/admin/repos.go +++ b/routers/web/admin/repos.go @@ -17,7 +17,9 @@ import ( repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers/web/explore" + "code.gitea.io/gitea/services/forms" repo_service "code.gitea.io/gitea/services/repository" ) @@ -31,6 +33,9 @@ func Repos(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("admin.repositories") ctx.Data["PageIsAdminRepositories"] = true + ctx.Data["EnableSizeLimit"] = setting.EnableSizeLimit + ctx.Data["RepoSizeLimit"] = base.FileSize(setting.RepoSizeLimit) + explore.RenderRepoSearch(ctx, &explore.RepoSearchOptions{ Private: true, PageSize: setting.UI.Admin.RepoPagingNum, @@ -39,6 +44,37 @@ func Repos(ctx *context.Context) { }) } +func UpdateRepoPost(ctx *context.Context) { + form := web.GetForm(ctx).(*forms.UpdateGlobalRepoFrom) + ctx.Data["Title"] = ctx.Tr("admin.repositories") + ctx.Data["PageIsAdminRepositories"] = true + + repo_size_limit, err := base.GetFileSize(form.RepoSizeLimit) + + ctx.Data["EnableSizeLimit"] = form.EnableSizeLimit + ctx.Data["RepoSizeLimit"] = form.RepoSizeLimit + + if err != nil { + ctx.Data["Err_Repo_Size_Limit"] = true + explore.RenderRepoSearch(ctx, &explore.RepoSearchOptions{ + Private: true, + PageSize: setting.UI.Admin.RepoPagingNum, + TplName: tplRepos, + OnlyShowRelevant: false, + }) + return + } + + setting.SaveGlobalRepositorySetting(form.EnableSizeLimit, repo_size_limit) + ctx.Flash.Success(ctx.Tr("admin.config.repository_setting_success")) + + ctx.Data["RepoSizeLimit"] = base.FileSize(setting.RepoSizeLimit) + + ctx.Flash.Success(ctx.Tr("admin.config.repository_setting_success")) + ctx.Redirect(setting.AppSubURL + "/admin/repos") + +} + // DeleteRepo delete one repository func DeleteRepo(ctx *context.Context) { repo, err := repo_model.GetRepositoryByID(ctx, ctx.FormInt64("id")) diff --git a/routers/web/explore/repo.go b/routers/web/explore/repo.go index be5ad1b015..a3450a142c 100644 --- a/routers/web/explore/repo.go +++ b/routers/web/explore/repo.go @@ -141,6 +141,11 @@ func RenderRepoSearch(ctx *context.Context, opts *RepoSearchOptions) { pager.AddParamString(relevantReposOnlyParam, fmt.Sprint(opts.OnlyShowRelevant)) ctx.Data["Page"] = pager + if ctx.Data["Err_Repo_Size_Limit"] != nil { + ctx.RenderWithErr(ctx.Tr("admin.config.invalid_repo_size"), opts.TplName, nil) + return + } + ctx.HTML(http.StatusOK, opts.TplName) } diff --git a/routers/web/web.go b/routers/web/web.go index 8784b7c5f7..b3b9d65dbf 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -580,6 +580,8 @@ func registerRoutes(m *web.Route) { m.Get("", admin.Repos) m.Combo("/unadopted").Get(admin.UnadoptedRepos).Post(admin.AdoptOrDeleteRepository) m.Post("/delete", admin.DeleteRepo) + m.Post("", web.Bind(forms.UpdateGlobalRepoFrom{}), admin.UpdateRepoPost) + }) m.Group("/packages", func() { diff --git a/services/forms/repo_form.go b/services/forms/repo_form.go index 9e5e5697ff..5e57a7effb 100644 --- a/services/forms/repo_form.go +++ b/services/forms/repo_form.go @@ -28,6 +28,12 @@ import ( // |____|_ /_______ / |____| \_______ /_______ /|___| |____| \_______ /____|_ // ______| // \/ \/ \/ \/ \/ \/ \/ +// UpdateGlobalRepoFrom for updating global repository setting +type UpdateGlobalRepoFrom struct { + RepoSizeLimit string + EnableSizeLimit bool +} + // CreateRepoForm form for creating repository type CreateRepoForm struct { UID int64 `binding:"Required"` diff --git a/templates/admin/repo/list.tmpl b/templates/admin/repo/list.tmpl index f485784d0c..bd29db0905 100644 --- a/templates/admin/repo/list.tmpl +++ b/templates/admin/repo/list.tmpl @@ -1,5 +1,26 @@ {{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin")}}
+

+ {{.locale.Tr "admin.config.repository_config"}} +

+
+
+ {{.CsrfTokenHtml}} +
+ +
+ +
+
+
+ + +
+
+ +
+
+

{{.locale.Tr "admin.repos.repo_manage_panel"}} ({{.locale.Tr "admin.total" .Total}})