diff options
author | Nick Thomas <nick@gitlab.com> | 2019-11-19 16:17:35 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2019-11-25 11:50:42 +0000 |
commit | 11ca530324c665290d0053d2739c0e8283952b88 (patch) | |
tree | 0a36e43c92e8502566c41370ba11112e78ed5188 /app | |
parent | 9d3adee84c62861b87b7891d15005d4a950d9c5a (diff) | |
download | gitlab-ce-11ca530324c665290d0053d2739c0e8283952b88.tar.gz |
Check permissions before showing a forked project's source
Diffstat (limited to 'app')
-rw-r--r-- | app/helpers/projects_helper.rb | 23 | ||||
-rw-r--r-- | app/views/projects/_home_panel.html.haml | 9 | ||||
-rw-r--r-- | app/views/projects/edit.html.haml | 11 |
3 files changed, 22 insertions, 21 deletions
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index bf6abdb8c4b..205e797b34f 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -110,19 +110,26 @@ module ProjectsHelper { project_full_name: project.full_name } end - def remove_fork_project_message(project) - _("You are going to remove the fork relationship to source project %{forked_from_project}. Are you ABSOLUTELY sure?") % - { forked_from_project: fork_source_name(project) } - end + def remove_fork_project_description_message(project) + source = visible_fork_source(project) - def fork_source_name(project) - if @project.fork_source - @project.fork_source.full_name + if source + _('This will remove the fork relationship between this project and %{fork_source}.') % + { fork_source: link_to(source.full_name, project_path(source)) } else - @project.fork_network&.deleted_root_project_name + _('This will remove the fork relationship between this project and other projects in the fork network.') end end + def remove_fork_project_warning_message(project) + _("You are going to remove the fork relationship from %{project_full_name}. Are you ABSOLUTELY sure?") % + { project_full_name: project.full_name } + end + + def visible_fork_source(project) + project.fork_source if project.fork_source && can?(current_user, :read_project, project.fork_source) + end + def project_nav_tabs @nav_tabs ||= get_project_nav_tabs(@project, current_user) end diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index 4783b10cf6d..e66701676d4 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -74,13 +74,12 @@ - if @project.forked? %p - - if @project.fork_source + - source = visible_fork_source(@project) + - if source #{ s_('ForkedFromProjectPath|Forked from') } - = link_to project_path(@project.fork_source) do - = fork_source_name(@project) + = link_to source.full_name, project_path(source) - else - - deleted_message = s_('ForkedFromProjectPath|Forked from %{project_name} (deleted)') - = deleted_message % { project_name: fork_source_name(@project) } + = s_('ForkedFromProjectPath|Forked from an inaccessible project') = render_if_exists "projects/home_mirror" diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml index b5e24cbbffb..328fdd0be10 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -126,17 +126,12 @@ - if @project.forked? && can?(current_user, :remove_fork_project, @project) .sub-section %h4.danger-title= _('Remove fork relationship') - %p - = _('This will remove the fork relationship to source project') - = succeed "." do - - if @project.fork_source - = link_to(fork_source_name(@project), project_path(@project.fork_source)) - - else - = fork_source_name(@project) + %p= remove_fork_project_description_message(@project) + = form_for([@project.namespace.becomes(Namespace), @project], url: remove_fork_project_path(@project), method: :delete, remote: true, html: { class: 'transfer-project' }) do |f| %p %strong= _('Once removed, the fork relationship cannot be restored and you will no longer be able to send merge requests to the source.') - = button_to _('Remove fork relationship'), '#', class: "btn btn-remove js-confirm-danger", data: { "confirm-danger-message" => remove_fork_project_message(@project) } + = button_to _('Remove fork relationship'), '#', class: "btn btn-remove js-confirm-danger", data: { "confirm-danger-message" => remove_fork_project_warning_message(@project) } - if can?(current_user, :remove_project, @project) .sub-section |