From 5bf97520642c8cdf1dc9e9a7672b6c9c48c3dde8 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 18 Apr 2023 23:34:34 +0800 Subject: [PATCH 01/10] Release unit now could be disabled globally --- models/unit/unit.go | 1 - 1 file changed, 1 deletion(-) diff --git a/models/unit/unit.go b/models/unit/unit.go index 3d5a8842cd638..9442172ed9463 100644 --- a/models/unit/unit.go +++ b/models/unit/unit.go @@ -109,7 +109,6 @@ var ( // MustRepoUnits contains the units could not be disabled currently MustRepoUnits = []Type{ TypeCode, - TypeReleases, } // DisabledRepoUnits contains the units that have been globally disabled From 8d5c8aa9adf2806249363a421d757e0d6ab84ccd Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 19 Apr 2023 00:42:09 +0800 Subject: [PATCH 02/10] configuration could not disable all the units --- models/repo.go | 4 +++- models/unit/unit.go | 22 +++++++--------------- models/unit/unit_test.go | 6 +++--- options/locale/locale_en-US.ini | 1 + routers/web/repo/setting.go | 6 ++++++ 5 files changed, 20 insertions(+), 19 deletions(-) diff --git a/models/repo.go b/models/repo.go index 5a1e2e028e81c..d2a3311c8b759 100644 --- a/models/repo.go +++ b/models/repo.go @@ -40,7 +40,9 @@ var ItemsPerPage = 40 // Init initialize model func Init(ctx context.Context) error { - unit.LoadUnitConfig() + if err := unit.LoadUnitConfig(); err != nil { + return err + } return system_model.Init(ctx) } diff --git a/models/unit/unit.go b/models/unit/unit.go index 9442172ed9463..1ba09eb2eeda8 100644 --- a/models/unit/unit.go +++ b/models/unit/unit.go @@ -4,6 +4,7 @@ package unit import ( + "errors" "fmt" "strings" @@ -106,11 +107,6 @@ var ( TypeExternalTracker, } - // MustRepoUnits contains the units could not be disabled currently - MustRepoUnits = []Type{ - TypeCode, - } - // DisabledRepoUnits contains the units that have been globally disabled DisabledRepoUnits = []Type{} ) @@ -121,15 +117,12 @@ func validateDefaultRepoUnits(defaultUnits, settingDefaultUnits []Type) []Type { // Use setting if not empty if len(settingDefaultUnits) > 0 { - // MustRepoUnits required as default - units = make([]Type, len(MustRepoUnits)) - copy(units, MustRepoUnits) + units = make([]Type, 0, len(settingDefaultUnits)) for _, settingUnit := range settingDefaultUnits { if !settingUnit.CanBeDefault() { log.Warn("Not allowed as default unit: %s", settingUnit.String()) continue } - // MustRepoUnits already added if settingUnit.CanDisable() { units = append(units, settingUnit) } @@ -149,7 +142,7 @@ func validateDefaultRepoUnits(defaultUnits, settingDefaultUnits []Type) []Type { } // LoadUnitConfig load units from settings -func LoadUnitConfig() { +func LoadUnitConfig() error { var invalidKeys []string DisabledRepoUnits, invalidKeys = FindUnitTypes(setting.Repository.DisabledRepoUnits...) if len(invalidKeys) > 0 { @@ -168,11 +161,15 @@ func LoadUnitConfig() { log.Warn("Invalid keys in default repo units: %s", strings.Join(invalidKeys, ", ")) } DefaultRepoUnits = validateDefaultRepoUnits(DefaultRepoUnits, setDefaultRepoUnits) + if len(DefaultRepoUnits) == 0 { + return errors.New("no default repository units found") + } setDefaultForkRepoUnits, invalidKeys := FindUnitTypes(setting.Repository.DefaultForkRepoUnits...) if len(invalidKeys) > 0 { log.Warn("Invalid keys in default fork repo units: %s", strings.Join(invalidKeys, ", ")) } DefaultForkRepoUnits = validateDefaultRepoUnits(DefaultForkRepoUnits, setDefaultForkRepoUnits) + return nil } // UnitGlobalDisabled checks if unit type is global disabled @@ -187,11 +184,6 @@ func (u Type) UnitGlobalDisabled() bool { // CanDisable checks if this unit type can be disabled. func (u *Type) CanDisable() bool { - for _, mu := range MustRepoUnits { - if *u == mu { - return false - } - } return true } diff --git a/models/unit/unit_test.go b/models/unit/unit_test.go index 50d781719771d..776ae69d06445 100644 --- a/models/unit/unit_test.go +++ b/models/unit/unit_test.go @@ -27,7 +27,7 @@ func TestLoadUnitConfig(t *testing.T) { setting.Repository.DisabledRepoUnits = []string{"repo.issues"} setting.Repository.DefaultRepoUnits = []string{"repo.code", "repo.releases", "repo.issues", "repo.pulls"} setting.Repository.DefaultForkRepoUnits = []string{"repo.releases"} - LoadUnitConfig() + assert.NoError(t, LoadUnitConfig()) assert.Equal(t, []Type{TypeIssues}, DisabledRepoUnits) assert.Equal(t, []Type{TypeCode, TypeReleases, TypePullRequests}, DefaultRepoUnits) assert.Equal(t, []Type{TypeCode, TypeReleases}, DefaultForkRepoUnits) @@ -36,7 +36,7 @@ func TestLoadUnitConfig(t *testing.T) { setting.Repository.DisabledRepoUnits = []string{"repo.issues", "invalid.1"} setting.Repository.DefaultRepoUnits = []string{"repo.code", "invalid.2", "repo.releases", "repo.issues", "repo.pulls"} setting.Repository.DefaultForkRepoUnits = []string{"invalid.3", "repo.releases"} - LoadUnitConfig() + assert.NoError(t, LoadUnitConfig()) assert.Equal(t, []Type{TypeIssues}, DisabledRepoUnits) assert.Equal(t, []Type{TypeCode, TypeReleases, TypePullRequests}, DefaultRepoUnits) assert.Equal(t, []Type{TypeCode, TypeReleases}, DefaultForkRepoUnits) @@ -45,7 +45,7 @@ func TestLoadUnitConfig(t *testing.T) { setting.Repository.DisabledRepoUnits = []string{"repo.issues", "repo.issues"} setting.Repository.DefaultRepoUnits = []string{"repo.code", "repo.releases", "repo.issues", "repo.pulls", "repo.code"} setting.Repository.DefaultForkRepoUnits = []string{"repo.releases", "repo.releases"} - LoadUnitConfig() + assert.NoError(t, LoadUnitConfig()) assert.Equal(t, []Type{TypeIssues}, DisabledRepoUnits) assert.Equal(t, []Type{TypeCode, TypeReleases, TypePullRequests}, DefaultRepoUnits) assert.Equal(t, []Type{TypeCode, TypeReleases}, DefaultForkRepoUnits) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 416e883fc771a..9b77db652073a 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -1991,6 +1991,7 @@ settings.delete_notices_2 = - This operation will permanently delete the Date: Sat, 22 Apr 2023 20:39:49 +0800 Subject: [PATCH 03/10] Remove unused functions --- models/unit/unit.go | 21 +-------------------- routers/web/repo/setting.go | 2 +- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/models/unit/unit.go b/models/unit/unit.go index 1ba09eb2eeda8..3e02eaa77bb7d 100644 --- a/models/unit/unit.go +++ b/models/unit/unit.go @@ -123,9 +123,7 @@ func validateDefaultRepoUnits(defaultUnits, settingDefaultUnits []Type) []Type { log.Warn("Not allowed as default unit: %s", settingUnit.String()) continue } - if settingUnit.CanDisable() { - units = append(units, settingUnit) - } + units = append(units, settingUnit) } } @@ -148,13 +146,6 @@ func LoadUnitConfig() error { if len(invalidKeys) > 0 { log.Warn("Invalid keys in disabled repo units: %s", strings.Join(invalidKeys, ", ")) } - // Check that must units are not disabled - for i, disabledU := range DisabledRepoUnits { - if !disabledU.CanDisable() { - log.Warn("Not allowed to global disable unit %s", disabledU.String()) - DisabledRepoUnits = append(DisabledRepoUnits[:i], DisabledRepoUnits[i+1:]...) - } - } setDefaultRepoUnits, invalidKeys := FindUnitTypes(setting.Repository.DefaultRepoUnits...) if len(invalidKeys) > 0 { @@ -182,11 +173,6 @@ func (u Type) UnitGlobalDisabled() bool { return false } -// CanDisable checks if this unit type can be disabled. -func (u *Type) CanDisable() bool { - return true -} - // CanBeDefault checks if the unit type can be a default repo unit func (u *Type) CanBeDefault() bool { for _, nadU := range NotAllowedDefaultRepoUnits { @@ -207,11 +193,6 @@ type Unit struct { MaxAccessMode perm.AccessMode // The max access mode of the unit. i.e. Read means this unit can only be read. } -// CanDisable returns if this unit could be disabled. -func (u *Unit) CanDisable() bool { - return u.Type.CanDisable() -} - // IsLessThan compares order of two units func (u Unit) IsLessThan(unit Unit) bool { if (u.Type == TypeExternalTracker || u.Type == TypeExternalWiki) && unit.Type != TypeExternalTracker && unit.Type != TypeExternalWiki { diff --git a/routers/web/repo/setting.go b/routers/web/repo/setting.go index 0719a5779c19d..16b718c919f61 100644 --- a/routers/web/repo/setting.go +++ b/routers/web/repo/setting.go @@ -536,7 +536,7 @@ func SettingsPost(ctx *context.Context) { deleteUnitTypes = append(deleteUnitTypes, unit_model.TypePullRequests) } - if len(units) <= 0 { + if len(units) == 0 { ctx.Flash.Error(ctx.Tr("repo.settings.update_settings_no_unit")) ctx.Redirect(ctx.Repo.RepoLink + "/settings") return From dc362c68e1d1c80de4b67dffd8d09d6e81946bc8 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 22 Apr 2023 20:57:30 +0800 Subject: [PATCH 04/10] Add empty default test --- models/unit/unit_test.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/models/unit/unit_test.go b/models/unit/unit_test.go index 776ae69d06445..fb073b32dbd04 100644 --- a/models/unit/unit_test.go +++ b/models/unit/unit_test.go @@ -30,7 +30,7 @@ func TestLoadUnitConfig(t *testing.T) { assert.NoError(t, LoadUnitConfig()) assert.Equal(t, []Type{TypeIssues}, DisabledRepoUnits) assert.Equal(t, []Type{TypeCode, TypeReleases, TypePullRequests}, DefaultRepoUnits) - assert.Equal(t, []Type{TypeCode, TypeReleases}, DefaultForkRepoUnits) + assert.Equal(t, []Type{TypeReleases}, DefaultForkRepoUnits) }) t.Run("invalid", func(t *testing.T) { setting.Repository.DisabledRepoUnits = []string{"repo.issues", "invalid.1"} @@ -39,7 +39,7 @@ func TestLoadUnitConfig(t *testing.T) { assert.NoError(t, LoadUnitConfig()) assert.Equal(t, []Type{TypeIssues}, DisabledRepoUnits) assert.Equal(t, []Type{TypeCode, TypeReleases, TypePullRequests}, DefaultRepoUnits) - assert.Equal(t, []Type{TypeCode, TypeReleases}, DefaultForkRepoUnits) + assert.Equal(t, []Type{TypeReleases}, DefaultForkRepoUnits) }) t.Run("duplicate", func(t *testing.T) { setting.Repository.DisabledRepoUnits = []string{"repo.issues", "repo.issues"} @@ -48,6 +48,15 @@ func TestLoadUnitConfig(t *testing.T) { assert.NoError(t, LoadUnitConfig()) assert.Equal(t, []Type{TypeIssues}, DisabledRepoUnits) assert.Equal(t, []Type{TypeCode, TypeReleases, TypePullRequests}, DefaultRepoUnits) - assert.Equal(t, []Type{TypeCode, TypeReleases}, DefaultForkRepoUnits) + assert.Equal(t, []Type{TypeReleases}, DefaultForkRepoUnits) + }) + t.Run("empty_default", func(t *testing.T) { + setting.Repository.DisabledRepoUnits = []string{"repo.issues", "repo.issues"} + setting.Repository.DefaultRepoUnits = []string{} + setting.Repository.DefaultForkRepoUnits = []string{"repo.releases", "repo.releases"} + assert.NoError(t, LoadUnitConfig()) + assert.Equal(t, []Type{TypeIssues}, DisabledRepoUnits) + assert.ElementsMatch(t, []Type{TypeCode, TypePullRequests, TypeReleases, TypeWiki, TypePackages, TypeProjects}, DefaultRepoUnits) + assert.Equal(t, []Type{TypeReleases}, DefaultForkRepoUnits) }) } From 3dd3125761cb4373c5f1a0a8c2ceb09f5aaf45ee Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 22 Apr 2023 21:09:42 +0800 Subject: [PATCH 05/10] hide code pages when code is disabled globally --- routers/web/web.go | 13 +++++++++++-- templates/explore/navbar.tmpl | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/routers/web/web.go b/routers/web/web.go index fc484eed4cb7c..d50fc76550454 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -313,6 +313,15 @@ func RegisterRoutes(m *web.Route) { } } + unitEnabled := func(ut unit.Type) func(ctx *context.Context) { + return func(ctx *context.Context) { + if ut.UnitGlobalDisabled() { + ctx.NotFound("Code", nil) + return + } + } + } + addWebhookAddRoutes := func() { m.Get("/{type}/new", repo.WebhooksNew) m.Post("/gitea/new", web.Bind(forms.NewWebhookForm{}), repo.GiteaHooksNewPost) @@ -368,7 +377,7 @@ func RegisterRoutes(m *web.Route) { m.Get("/users", explore.Users) m.Get("/users/sitemap-{idx}.xml", sitemapEnabled, explore.Users) m.Get("/organizations", explore.Organizations) - m.Get("/code", explore.Code) + m.Get("/code", unitEnabled(unit.TypeCode), explore.Code) m.Get("/topics/search", explore.TopicSearch) }, ignExploreSignIn) m.Group("/issues", func() { @@ -950,7 +959,7 @@ func RegisterRoutes(m *web.Route) { }, repo.MustEnableProjects) m.Group("", func() { - m.Get("/code", user.CodeSearch) + m.Get("/code", unitEnabled(unit.TypeCode), user.CodeSearch) }, reqUnitAccess(unit.TypeCode, perm.AccessModeRead)) }, context_service.UserAssignmentWeb(), context.OrgAssignment()) diff --git a/templates/explore/navbar.tmpl b/templates/explore/navbar.tmpl index 29eaa1e8c649d..ec72b9a22a316 100644 --- a/templates/explore/navbar.tmpl +++ b/templates/explore/navbar.tmpl @@ -10,7 +10,7 @@ {{svg "octicon-organization"}} {{.locale.Tr "explore.organizations"}} - {{if .IsRepoIndexerEnabled}} + {{if and $.UnitTypeCode.UnitGlobalDisabled .IsRepoIndexerEnabled}} {{svg "octicon-code"}} {{.locale.Tr "explore.code"}} From a7b2f8543ce0a967b06330d435a1c4886d6eee18 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 27 Apr 2023 20:25:35 +0800 Subject: [PATCH 06/10] Fix test --- models/unit/unit_test.go | 55 ++++++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/models/unit/unit_test.go b/models/unit/unit_test.go index fb073b32dbd04..5c50a106bde2c 100644 --- a/models/unit/unit_test.go +++ b/models/unit/unit_test.go @@ -12,18 +12,18 @@ import ( ) func TestLoadUnitConfig(t *testing.T) { - defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []Type) { - DisabledRepoUnits = disabledRepoUnits - DefaultRepoUnits = defaultRepoUnits - DefaultForkRepoUnits = defaultForkRepoUnits - }(DisabledRepoUnits, DefaultRepoUnits, DefaultForkRepoUnits) - defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []string) { - setting.Repository.DisabledRepoUnits = disabledRepoUnits - setting.Repository.DefaultRepoUnits = defaultRepoUnits - setting.Repository.DefaultForkRepoUnits = defaultForkRepoUnits - }(setting.Repository.DisabledRepoUnits, setting.Repository.DefaultRepoUnits, setting.Repository.DefaultForkRepoUnits) - t.Run("regular", func(t *testing.T) { + defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []Type) { + DisabledRepoUnits = disabledRepoUnits + DefaultRepoUnits = defaultRepoUnits + DefaultForkRepoUnits = defaultForkRepoUnits + }(DisabledRepoUnits, DefaultRepoUnits, DefaultForkRepoUnits) + defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []string) { + setting.Repository.DisabledRepoUnits = disabledRepoUnits + setting.Repository.DefaultRepoUnits = defaultRepoUnits + setting.Repository.DefaultForkRepoUnits = defaultForkRepoUnits + }(setting.Repository.DisabledRepoUnits, setting.Repository.DefaultRepoUnits, setting.Repository.DefaultForkRepoUnits) + setting.Repository.DisabledRepoUnits = []string{"repo.issues"} setting.Repository.DefaultRepoUnits = []string{"repo.code", "repo.releases", "repo.issues", "repo.pulls"} setting.Repository.DefaultForkRepoUnits = []string{"repo.releases"} @@ -33,6 +33,17 @@ func TestLoadUnitConfig(t *testing.T) { assert.Equal(t, []Type{TypeReleases}, DefaultForkRepoUnits) }) t.Run("invalid", func(t *testing.T) { + defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []Type) { + DisabledRepoUnits = disabledRepoUnits + DefaultRepoUnits = defaultRepoUnits + DefaultForkRepoUnits = defaultForkRepoUnits + }(DisabledRepoUnits, DefaultRepoUnits, DefaultForkRepoUnits) + defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []string) { + setting.Repository.DisabledRepoUnits = disabledRepoUnits + setting.Repository.DefaultRepoUnits = defaultRepoUnits + setting.Repository.DefaultForkRepoUnits = defaultForkRepoUnits + }(setting.Repository.DisabledRepoUnits, setting.Repository.DefaultRepoUnits, setting.Repository.DefaultForkRepoUnits) + setting.Repository.DisabledRepoUnits = []string{"repo.issues", "invalid.1"} setting.Repository.DefaultRepoUnits = []string{"repo.code", "invalid.2", "repo.releases", "repo.issues", "repo.pulls"} setting.Repository.DefaultForkRepoUnits = []string{"invalid.3", "repo.releases"} @@ -42,6 +53,17 @@ func TestLoadUnitConfig(t *testing.T) { assert.Equal(t, []Type{TypeReleases}, DefaultForkRepoUnits) }) t.Run("duplicate", func(t *testing.T) { + defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []Type) { + DisabledRepoUnits = disabledRepoUnits + DefaultRepoUnits = defaultRepoUnits + DefaultForkRepoUnits = defaultForkRepoUnits + }(DisabledRepoUnits, DefaultRepoUnits, DefaultForkRepoUnits) + defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []string) { + setting.Repository.DisabledRepoUnits = disabledRepoUnits + setting.Repository.DefaultRepoUnits = defaultRepoUnits + setting.Repository.DefaultForkRepoUnits = defaultForkRepoUnits + }(setting.Repository.DisabledRepoUnits, setting.Repository.DefaultRepoUnits, setting.Repository.DefaultForkRepoUnits) + setting.Repository.DisabledRepoUnits = []string{"repo.issues", "repo.issues"} setting.Repository.DefaultRepoUnits = []string{"repo.code", "repo.releases", "repo.issues", "repo.pulls", "repo.code"} setting.Repository.DefaultForkRepoUnits = []string{"repo.releases", "repo.releases"} @@ -51,6 +73,17 @@ func TestLoadUnitConfig(t *testing.T) { assert.Equal(t, []Type{TypeReleases}, DefaultForkRepoUnits) }) t.Run("empty_default", func(t *testing.T) { + defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []Type) { + DisabledRepoUnits = disabledRepoUnits + DefaultRepoUnits = defaultRepoUnits + DefaultForkRepoUnits = defaultForkRepoUnits + }(DisabledRepoUnits, DefaultRepoUnits, DefaultForkRepoUnits) + defer func(disabledRepoUnits, defaultRepoUnits, defaultForkRepoUnits []string) { + setting.Repository.DisabledRepoUnits = disabledRepoUnits + setting.Repository.DefaultRepoUnits = defaultRepoUnits + setting.Repository.DefaultForkRepoUnits = defaultForkRepoUnits + }(setting.Repository.DisabledRepoUnits, setting.Repository.DefaultRepoUnits, setting.Repository.DefaultForkRepoUnits) + setting.Repository.DisabledRepoUnits = []string{"repo.issues", "repo.issues"} setting.Repository.DefaultRepoUnits = []string{} setting.Repository.DefaultForkRepoUnits = []string{"repo.releases", "repo.releases"} From dafab3c1d3848811d1a6f38f0db28d605d201404 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 4 May 2023 20:46:13 +0800 Subject: [PATCH 07/10] Follow yp05327's suggestion --- models/unit/unit.go | 3 +++ routers/api/v1/repo/repo.go | 8 +++++--- routers/web/web.go | 37 +++++++++++++++++-------------------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/models/unit/unit.go b/models/unit/unit.go index 3e02eaa77bb7d..7cd679116f1bb 100644 --- a/models/unit/unit.go +++ b/models/unit/unit.go @@ -160,6 +160,9 @@ func LoadUnitConfig() error { log.Warn("Invalid keys in default fork repo units: %s", strings.Join(invalidKeys, ", ")) } DefaultForkRepoUnits = validateDefaultRepoUnits(DefaultForkRepoUnits, setDefaultForkRepoUnits) + if len(DefaultForkRepoUnits) == 0 { + return errors.New("no default fork repository units found") + } return nil } diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go index 48ace3a8e02ce..36cc03f8938e3 100644 --- a/routers/api/v1/repo/repo.go +++ b/routers/api/v1/repo/repo.go @@ -970,9 +970,11 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error { } } - if err := repo_model.UpdateRepositoryUnits(repo, units, deleteUnitTypes); err != nil { - ctx.Error(http.StatusInternalServerError, "UpdateRepositoryUnits", err) - return err + if len(units)+len(deleteUnitTypes) > 0 { + if err := repo_model.UpdateRepositoryUnits(repo, units, deleteUnitTypes); err != nil { + ctx.Error(http.StatusInternalServerError, "UpdateRepositoryUnits", err) + return err + } } log.Trace("Repository advanced settings updated: %s/%s", owner.Name, repo.Name) diff --git a/routers/web/web.go b/routers/web/web.go index 3907bcadc67d7..9f9d166e4dfa6 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -253,12 +253,24 @@ func registerRoutes(m *web.Route) { } } - unitEnabled := func(ut unit.Type) func(ctx *context.Context) { + reqUnitAccess := func(unitType unit.Type, accessMode perm.AccessMode) func(ctx *context.Context) { return func(ctx *context.Context) { - if ut.UnitGlobalDisabled() { - ctx.NotFound("Code", nil) + if unitType.UnitGlobalDisabled() { + ctx.NotFound(unitType.String(), nil) + return + } + + if ctx.ContextUser == nil { + ctx.NotFound(unitType.String(), nil) return } + + if ctx.ContextUser.IsOrganization() { + if ctx.Org.Organization.UnitPermission(ctx, ctx.Doer, unitType) < accessMode { + ctx.NotFound(unitType.String(), nil) + return + } + } } } @@ -317,7 +329,7 @@ func registerRoutes(m *web.Route) { m.Get("/users", explore.Users) m.Get("/users/sitemap-{idx}.xml", sitemapEnabled, explore.Users) m.Get("/organizations", explore.Organizations) - m.Get("/code", unitEnabled(unit.TypeCode), explore.Code) + m.Get("/code", reqUnitAccess(unit.TypeCode, perm.AccessModeRead), explore.Code) m.Get("/topics/search", explore.TopicSearch) }, ignExploreSignIn) m.Group("/issues", func() { @@ -643,21 +655,6 @@ func registerRoutes(m *web.Route) { } } - reqUnitAccess := func(unitType unit.Type, accessMode perm.AccessMode) func(ctx *context.Context) { - return func(ctx *context.Context) { - if ctx.ContextUser == nil { - ctx.NotFound(unitType.String(), nil) - return - } - if ctx.ContextUser.IsOrganization() { - if ctx.Org.Organization.UnitPermission(ctx, ctx.Doer, unitType) < accessMode { - ctx.NotFound(unitType.String(), nil) - return - } - } - } - } - // ***** START: Organization ***** m.Group("/org", func() { m.Group("/{org}", func() { @@ -853,7 +850,7 @@ func registerRoutes(m *web.Route) { }, repo.MustEnableProjects) m.Group("", func() { - m.Get("/code", unitEnabled(unit.TypeCode), user.CodeSearch) + m.Get("/code", user.CodeSearch) }, reqUnitAccess(unit.TypeCode, perm.AccessModeRead)) }, context_service.UserAssignmentWeb(), context.OrgAssignment()) From cd22bf0b6c443715040ea7994510c133055e8d34 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 4 May 2023 20:47:12 +0800 Subject: [PATCH 08/10] Update options/locale/locale_en-US.ini Co-authored-by: delvh --- options/locale/locale_en-US.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index daf6a3afd3940..b73b350b6dec3 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2004,7 +2004,7 @@ settings.delete_notices_2 = - This operation will permanently delete the Date: Thu, 4 May 2023 21:05:53 +0800 Subject: [PATCH 09/10] Update templates/explore/navbar.tmpl Co-authored-by: yp05327 <576951401@qq.com> --- templates/explore/navbar.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/explore/navbar.tmpl b/templates/explore/navbar.tmpl index 15884cfdfe315..3a556812f9b52 100644 --- a/templates/explore/navbar.tmpl +++ b/templates/explore/navbar.tmpl @@ -10,7 +10,7 @@ {{svg "octicon-organization"}} {{.locale.Tr "explore.organizations"}} - {{if and $.UnitTypeCode.UnitGlobalDisabled .IsRepoIndexerEnabled}} + {{if and (not $.UnitTypeCode.UnitGlobalDisabled) .IsRepoIndexerEnabled}} {{svg "octicon-code"}} {{.locale.Tr "explore.code"}} From b082965220d85c995f3e8d3707f2d402c1de8dba Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 4 May 2023 21:08:46 +0800 Subject: [PATCH 10/10] Follow yp05327's suggestion --- templates/user/profile.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/user/profile.tmpl b/templates/user/profile.tmpl index 5463270854e71..8d48474441a07 100644 --- a/templates/user/profile.tmpl +++ b/templates/user/profile.tmpl @@ -135,7 +135,7 @@ {{svg "octicon-package"}} {{.locale.Tr "packages.title"}} {{end}} - {{if .IsRepoIndexerEnabled}} + {{if and (not $.UnitTypeCode.UnitGlobalDisabled) .IsRepoIndexerEnabled}} {{svg "octicon-code"}} {{.locale.Tr "user.code"}}