diff --git a/options/locale/locale_en-US.json b/options/locale/locale_en-US.json index 3243a6857b..8262f5581d 100644 --- a/options/locale/locale_en-US.json +++ b/options/locale/locale_en-US.json @@ -2144,6 +2144,9 @@ "repo.settings.pulls.default_delete_branch_after_merge": "Delete pull request branch after merge by default", "repo.settings.pulls.default_allow_edits_from_maintainers": "Allow edits from maintainers by default", "repo.settings.releases_desc": "Enable Repository Releases", + "repo.settings.unit_visibility": "Visibility", + "repo.settings.unit_visibility_private": "Private (follow repo visibility)", + "repo.settings.unit_visibility_public": "Public (anyone can read)", "repo.settings.packages_desc": "Enable Repository Packages Registry", "repo.settings.projects_desc": "Enable Projects", "repo.settings.projects_mode_desc": "Projects Mode (which kinds of projects to show)", diff --git a/routers/web/repo/setting/setting.go b/routers/web/repo/setting/setting.go index 79a5665286..58e0322726 100644 --- a/routers/web/repo/setting/setting.go +++ b/routers/web/repo/setting/setting.go @@ -12,6 +12,7 @@ import ( "git.mokoconsulting.tech/MokoConsulting/MokoGitea/models/db" "git.mokoconsulting.tech/MokoConsulting/MokoGitea/models/organization" + "git.mokoconsulting.tech/MokoConsulting/MokoGitea/models/perm" repo_model "git.mokoconsulting.tech/MokoConsulting/MokoGitea/models/repo" unit_model "git.mokoconsulting.tech/MokoConsulting/MokoGitea/models/unit" user_model "git.mokoconsulting.tech/MokoConsulting/MokoGitea/models/user" @@ -510,6 +511,17 @@ func newRepoUnit(repo *repo_model.Repository, unitType unit_model.Type, config c return repoUnit } +// applyUnitVisibility sets AnonymousAccessMode on a unit based on the form value. +// Values: "" or "not-set" = none, "anonymous-read" = anonymous read. +func applyUnitVisibility(unit *repo_model.RepoUnit, visibility string) { + switch visibility { + case "anonymous-read": + unit.AnonymousAccessMode = perm.AccessModeRead + default: + unit.AnonymousAccessMode = perm.AccessModeNone + } +} + func handleSettingsPostAdvanced(ctx *context.Context) { form := web.GetForm(ctx).(*forms.RepoSettingForm) repo := ctx.Repo.Repository @@ -527,7 +539,9 @@ func handleSettingsPostAdvanced(ctx *context.Context) { } if form.EnableCode && !unit_model.TypeCode.UnitGlobalDisabled() { - units = append(units, newRepoUnit(repo, unit_model.TypeCode, nil)) + u := newRepoUnit(repo, unit_model.TypeCode, nil) + applyUnitVisibility(&u, form.CodeVisibility) + units = append(units, u) } else if !unit_model.TypeCode.UnitGlobalDisabled() { deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeCode) } @@ -544,7 +558,9 @@ func handleSettingsPostAdvanced(ctx *context.Context) { })) deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeWiki) } else if form.EnableWiki && !form.EnableExternalWiki && !unit_model.TypeWiki.UnitGlobalDisabled() { - units = append(units, newRepoUnit(repo, unit_model.TypeWiki, new(repo_model.UnitConfig))) + u := newRepoUnit(repo, unit_model.TypeWiki, new(repo_model.UnitConfig)) + applyUnitVisibility(&u, form.WikiVisibility) + units = append(units, u) deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalWiki) } else { if !unit_model.TypeExternalWiki.UnitGlobalDisabled() { @@ -581,11 +597,13 @@ func handleSettingsPostAdvanced(ctx *context.Context) { })) deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeIssues) } else if form.EnableIssues && !form.EnableExternalTracker && !unit_model.TypeIssues.UnitGlobalDisabled() { - units = append(units, newRepoUnit(repo, unit_model.TypeIssues, &repo_model.IssuesConfig{ + u := newRepoUnit(repo, unit_model.TypeIssues, &repo_model.IssuesConfig{ EnableTimetracker: form.EnableTimetracker, AllowOnlyContributorsToTrackTime: form.AllowOnlyContributorsToTrackTime, EnableDependencies: form.EnableIssueDependencies, - })) + }) + applyUnitVisibility(&u, form.IssuesVisibility) + units = append(units, u) deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeExternalTracker) } else { if !unit_model.TypeExternalTracker.UnitGlobalDisabled() { @@ -605,7 +623,9 @@ func handleSettingsPostAdvanced(ctx *context.Context) { } if form.EnableReleases && !unit_model.TypeReleases.UnitGlobalDisabled() { - units = append(units, newRepoUnit(repo, unit_model.TypeReleases, nil)) + u := newRepoUnit(repo, unit_model.TypeReleases, nil) + applyUnitVisibility(&u, form.ReleasesVisibility) + units = append(units, u) } else if !unit_model.TypeReleases.UnitGlobalDisabled() { deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeReleases) } diff --git a/services/forms/repo_form.go b/services/forms/repo_form.go index 20aff24682..f6312c1348 100644 --- a/services/forms/repo_form.go +++ b/services/forms/repo_form.go @@ -110,12 +110,14 @@ type RepoSettingForm struct { EnablePrune bool // Advanced settings - EnableCode bool + EnableCode bool + CodeVisibility string - EnableWiki bool - EnableExternalWiki bool - DefaultWikiBranch string - ExternalWikiURL string + EnableWiki bool + EnableExternalWiki bool + DefaultWikiBranch string + ExternalWikiURL string + WikiVisibility string EnableIssues bool EnableExternalTracker bool @@ -124,13 +126,15 @@ type RepoSettingForm struct { TrackerIssueStyle string ExternalTrackerRegexpPattern string EnableCloseIssuesViaCommitInAnyBranch bool + IssuesVisibility string EnableProjects bool ProjectsMode string - EnableReleases bool + EnableReleases bool + ReleasesVisibility string - EnablePackages bool + EnablePackages bool EnablePulls bool PullsIgnoreWhitespace bool diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl index e4f715b4b8..017b6c4a9c 100644 --- a/templates/repo/settings/options.tmpl +++ b/templates/repo/settings/options.tmpl @@ -330,6 +330,13 @@ +
+ + +
@@ -487,10 +494,19 @@
- +
+
+
+ + +
+
{{$isPackagesEnabled := .Repository.UnitEnabled ctx ctx.Consts.RepoUnitTypePackages}} {{$isPackagesGlobalDisabled := ctx.Consts.RepoUnitTypePackages.UnitGlobalDisabled}}