diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 46138fad54655..aefdac9ffa208 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -937,9 +937,12 @@ template_helper = Make repository a template template_description = Template repositories let users generate new repositories with the same directory structure, files, and optional settings. visibility = Visibility visibility_description = Only the owner or the organization members if they have rights, will be able to see it. -visibility_helper = Make repository private +visibility_helper_private = Make Repository Private +visibility_helper_public = Make Repository Public visibility_helper_forced = Your site administrator forces new repositories to be private. -visibility_fork_helper = (Changing this will affect all forks.) +visibility_fork_helper = Changing this will affect all forks. +visibility_credential = With making repository public every one can see your code including imporant data in it. +visibility.update_error = For making repository private go to danger zone clone_helper = Need help cloning? Visit Help. fork_repo = Fork Repository fork_from = Fork From diff --git a/routers/web/repo/setting/setting.go b/routers/web/repo/setting/setting.go index 0864b1c911ae5..3a8d166c11139 100644 --- a/routers/web/repo/setting/setting.go +++ b/routers/web/repo/setting/setting.go @@ -167,15 +167,7 @@ func SettingsPost(ctx *context.Context) { form.Private = repo.BaseRepo.IsPrivate || repo.BaseRepo.Owner.Visibility == structs.VisibleTypePrivate } - visibilityChanged := repo.IsPrivate != form.Private - // when ForcePrivate enabled, you could change public repo to private, but only admin users can change private to public - if visibilityChanged && setting.Repository.ForcePrivate && !form.Private && !ctx.Doer.IsAdmin { - ctx.RenderWithErr(ctx.Tr("form.repository_force_private"), tplSettingsOptions, form) - return - } - - repo.IsPrivate = form.Private - if err := repo_service.UpdateRepository(ctx, repo, visibilityChanged); err != nil { + if err := repo_service.UpdateRepository(ctx, repo, false); err != nil { ctx.ServerError("UpdateRepository", err) return } @@ -865,6 +857,43 @@ func SettingsPost(ctx *context.Context) { ctx.Flash.Success(ctx.Tr("repo.settings.wiki_deletion_success")) ctx.Redirect(ctx.Repo.RepoLink + "/settings") + case "change-visiblity": + if ctx.HasError() { + ctx.HTML(http.StatusOK, tplSettingsOptions) + return + } + if !ctx.Repo.IsOwner() { + ctx.Error(http.StatusNotFound) + return + } + if repo.Name != form.RepoName { + ctx.RenderWithErr(ctx.Tr("form.enterred_invalid_repo_name"), tplSettingsOptions, nil) + return + } + + private := form.Private + + if repo.IsFork { + private = repo.BaseRepo.IsPrivate || repo.BaseRepo.Owner.Visibility == structs.VisibleTypePrivate + } + + visibilityChanged := repo.IsPrivate != private + if visibilityChanged && setting.Repository.ForcePrivate && !private && !ctx.Doer.IsAdmin { + ctx.RenderWithErr(ctx.Tr("form.repository_force_private"), tplSettingsOptions, form) + return + } + + repo.IsPrivate = private + if err := repo_service.UpdateRepository(ctx, repo, visibilityChanged); err != nil { + ctx.ServerError("UpdateRepository", err) + return + } + + log.Trace("Repository visibility settings updated: %s/%s", ctx.Repo.Owner.Name, repo.Name) + + ctx.Flash.Success(ctx.Tr("repo.settings.update_settings_success")) + ctx.Redirect(ctx.Repo.RepoLink + "/settings") + case "archive": if !ctx.Repo.IsOwner() { ctx.Error(http.StatusForbidden) diff --git a/templates/repo/settings/options.tmpl b/templates/repo/settings/options.tmpl index 85ff82fda77a5..e5e8ca3dc35ef 100644 --- a/templates/repo/settings/options.tmpl +++ b/templates/repo/settings/options.tmpl @@ -26,14 +26,7 @@ {{if not .Repository.IsFork}}
-
- {{if .IsAdmin}} - - {{else}} - - {{end}} - -
+ {{if .Repository.IsPrivate}}{{ctx.Locale.Tr "settings.visibility.private"}}{{else}}{{ctx.Locale.Tr "settings.visibility.public"}}{{end}}
{{end}}
@@ -763,6 +756,44 @@
{{end}} + + {{if not .Repository.IsFork}} +
+ +
+
+
+ {{if not .Repository.IsPrivate}} + {{ctx.Locale.Tr "repo.visibility_helper_private"}} + {{else}} + {{ctx.Locale.Tr "repo.visibility_helper_public"}} + {{end}} +
+
+ {{if and (not .Repository.IsPrivate) (gt .Repository.NumStars 0)}} + {{ctx.Locale.Tr "repo.stars_remove_warning"}} + {{end}} + {{if and (not .Repository.IsPrivate) (.Repository.NumForks)}} + {{ctx.Locale.Tr "repo.visibility_fork_helper"}} + {{end}} + {{if .Repository.IsPrivate}} + {{ctx.Locale.Tr "repo.visibility_credential"}} + {{end}} +
+
+
+ +
+
+ {{end}} +
+
{{ctx.Locale.Tr "repo.settings.delete"}}
@@ -966,6 +997,50 @@
{{end}} + {{if not .Repository.IsFork}} + + {{end}} + {{if not .Repository.IsMirror}}