Commit b68606db authored by Alexandru Croitor's avatar Alexandru Croitor

Hide project name and path when unsusbcribing

When unsusbcribing from an issuable if project was set
to private user without read access on project should not be
able to see project name or path
parent 14a2e6cf
...@@ -116,4 +116,8 @@ module NotificationsHelper ...@@ -116,4 +116,8 @@ module NotificationsHelper
def show_unsubscribe_title?(noteable) def show_unsubscribe_title?(noteable)
can?(current_user, "read_#{noteable.to_ability_name}".to_sym, noteable) can?(current_user, "read_#{noteable.to_ability_name}".to_sym, noteable)
end end
def can_read_project?(project)
can?(current_user, :read_project, project)
end
end end
- noteable = @sent_notification.noteable - noteable = @sent_notification.noteable
- noteable_type = @sent_notification.noteable_type.titleize.downcase - noteable_type = @sent_notification.noteable_type.titleize.downcase
- noteable_text = show_unsubscribe_title?(noteable) ? %(#{noteable.title} (#{noteable.to_reference})) : %(#{noteable.to_reference}) - noteable_text = show_unsubscribe_title?(noteable) ? %(#{noteable.title} (#{noteable.to_reference})) : %(#{noteable.to_reference})
- page_title _("Unsubscribe"), noteable_text, noteable_type.pluralize, @sent_notification.project.full_name - show_project_path = can_read_project?(@sent_notification.project)
- project_path = show_project_path ? @sent_notification.project.full_name : _("GitLab / Unsubscribe")
- noteable_url = show_project_path ? url_for([@sent_notification.project.namespace.becomes(Namespace), @sent_notification.project, noteable]) : breadcrumb_title_link
- page_title _('Unsubscribe'), noteable_text, noteable_type.pluralize, project_path
%h3.page-title %h3.page-title
= _("Unsubscribe from %{type}") % { type: noteable_type } = _("Unsubscribe from %{type}") % { type: noteable_type }
%p %p
- link_to_noteable_text = link_to(noteable_text, url_for([@sent_notification.project.namespace.becomes(Namespace), @sent_notification.project, noteable])) - link_to_noteable_text = link_to(noteable_text, noteable_url)
= _("Are you sure you want to unsubscribe from the %{type}: %{link_to_noteable_text}?").html_safe % { type: noteable_type, link_to_noteable_text: link_to_noteable_text } = _("Are you sure you want to unsubscribe from the %{type}: %{link_to_noteable_text}?").html_safe % { type: noteable_type, link_to_noteable_text: link_to_noteable_text }
%p %p
......
---
title: Hide project name and path when unsusbcribing from an issue or merge request
merge_request:
author:
type: security
...@@ -8576,6 +8576,9 @@ msgstr "" ...@@ -8576,6 +8576,9 @@ msgstr ""
msgid "GitHub import" msgid "GitHub import"
msgstr "" msgstr ""
msgid "GitLab / Unsubscribe"
msgstr ""
msgid "GitLab CI Linter has been moved" msgid "GitLab CI Linter has been moved"
msgstr "" msgstr ""
......
...@@ -56,7 +56,7 @@ describe SentNotificationsController do ...@@ -56,7 +56,7 @@ describe SentNotificationsController do
get(:unsubscribe, params: { id: sent_notification.reply_key }) get(:unsubscribe, params: { id: sent_notification.reply_key })
end end
shared_examples 'unsubscribing as anonymous' do shared_examples 'unsubscribing as anonymous' do |project_visibility|
it 'does not unsubscribe the user' do it 'does not unsubscribe the user' do
expect(noteable.subscribed?(user, target_project)).to be_truthy expect(noteable.subscribed?(user, target_project)).to be_truthy
end end
...@@ -69,6 +69,18 @@ describe SentNotificationsController do ...@@ -69,6 +69,18 @@ describe SentNotificationsController do
expect(response.status).to eq(200) expect(response.status).to eq(200)
expect(response).to render_template :unsubscribe expect(response).to render_template :unsubscribe
end end
if project_visibility == :private
it 'does not show project name or path' do
expect(response.body).not_to include(noteable.project.name)
expect(response.body).not_to include(noteable.project.full_name)
end
else
it 'shows project name or path' do
expect(response.body).to include(noteable.project.name)
expect(response.body).to include(noteable.project.full_name)
end
end
end end
context 'when project is public' do context 'when project is public' do
...@@ -79,7 +91,7 @@ describe SentNotificationsController do ...@@ -79,7 +91,7 @@ describe SentNotificationsController do
expect(response.body).to include(issue.title) expect(response.body).to include(issue.title)
end end
it_behaves_like 'unsubscribing as anonymous' it_behaves_like 'unsubscribing as anonymous', :public
end end
context 'when unsubscribing from confidential issue' do context 'when unsubscribing from confidential issue' do
...@@ -90,7 +102,7 @@ describe SentNotificationsController do ...@@ -90,7 +102,7 @@ describe SentNotificationsController do
expect(response.body).to include(confidential_issue.to_reference) expect(response.body).to include(confidential_issue.to_reference)
end end
it_behaves_like 'unsubscribing as anonymous' it_behaves_like 'unsubscribing as anonymous', :public
end end
context 'when unsubscribing from merge request' do context 'when unsubscribing from merge request' do
...@@ -100,7 +112,12 @@ describe SentNotificationsController do ...@@ -100,7 +112,12 @@ describe SentNotificationsController do
expect(response.body).to include(merge_request.title) expect(response.body).to include(merge_request.title)
end end
it_behaves_like 'unsubscribing as anonymous' it 'shows project name or path' do
expect(response.body).to include(issue.project.name)
expect(response.body).to include(issue.project.full_name)
end
it_behaves_like 'unsubscribing as anonymous', :public
end end
end end
...@@ -110,11 +127,11 @@ describe SentNotificationsController do ...@@ -110,11 +127,11 @@ describe SentNotificationsController do
context 'when unsubscribing from issue' do context 'when unsubscribing from issue' do
let(:noteable) { issue } let(:noteable) { issue }
it 'shows issue title' do it 'does not show issue title' do
expect(response.body).not_to include(issue.title) expect(response.body).not_to include(issue.title)
end end
it_behaves_like 'unsubscribing as anonymous' it_behaves_like 'unsubscribing as anonymous', :private
end end
context 'when unsubscribing from confidential issue' do context 'when unsubscribing from confidential issue' do
...@@ -125,17 +142,17 @@ describe SentNotificationsController do ...@@ -125,17 +142,17 @@ describe SentNotificationsController do
expect(response.body).to include(confidential_issue.to_reference) expect(response.body).to include(confidential_issue.to_reference)
end end
it_behaves_like 'unsubscribing as anonymous' it_behaves_like 'unsubscribing as anonymous', :private
end end
context 'when unsubscribing from merge request' do context 'when unsubscribing from merge request' do
let(:noteable) { merge_request } let(:noteable) { merge_request }
it 'shows merge request title' do it 'dos not show merge request title' do
expect(response.body).not_to include(merge_request.title) expect(response.body).not_to include(merge_request.title)
end end
it_behaves_like 'unsubscribing as anonymous' it_behaves_like 'unsubscribing as anonymous', :private
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment