Commit e78d9834 authored by Douwe Maan's avatar Douwe Maan

Merge branch 'bvl-classification-only' into 'master'

Allow enabling External Policy Control without URL

Closes #4786

See merge request gitlab-org/gitlab-ee!5083
parents 58ee6fc1 bab948a3
...@@ -37,7 +37,9 @@ admin area under the settings page: ...@@ -37,7 +37,9 @@ admin area under the settings page:
The available required properties are: The available required properties are:
- **Service URL**: The URL to make authorization requests to - **Service URL**: The URL to make authorization requests to. When leaving the
URL blank, cross project features will remain available while still being able
to specify classification labels for projects.
- **External authorization request timeout**: The timeout after which an - **External authorization request timeout**: The timeout after which an
authorization request is aborted. When a request times out, access is denied authorization request is aborted. When a request times out, access is denied
to the user. to the user.
......
...@@ -13,6 +13,12 @@ module EE ...@@ -13,6 +13,12 @@ module EE
"denied.") "denied.")
end end
def external_authorization_url_help_text
_("When leaving the URL blank, classification labels can still be "\
"specified whitout disabling cross project features or performing "\
"external authorization checks.")
end
override :visible_attributes override :visible_attributes
def visible_attributes def visible_attributes
super + [ super + [
......
...@@ -40,14 +40,12 @@ module EE ...@@ -40,14 +40,12 @@ module EE
presence: { message: "can't be blank when using aws hosted elasticsearch" }, presence: { message: "can't be blank when using aws hosted elasticsearch" },
if: ->(setting) { setting.elasticsearch_indexing? && setting.elasticsearch_aws? } if: ->(setting) { setting.elasticsearch_indexing? && setting.elasticsearch_aws? }
validates :external_authorization_service_url, validates :external_authorization_service_default_label,
:external_authorization_service_default_label,
:external_authorization_service_timeout,
presence: true, presence: true,
if: :external_authorization_service_enabled? if: :external_authorization_service_enabled?
validates :external_authorization_service_url, validates :external_authorization_service_url,
url: true, url: true, allow_blank: true,
if: :external_authorization_service_enabled? if: :external_authorization_service_enabled?
validates :external_authorization_service_timeout, validates :external_authorization_service_timeout,
......
...@@ -4,7 +4,7 @@ module EE ...@@ -4,7 +4,7 @@ module EE
prepended do prepended do
condition(:external_authorization_enabled, scope: :global, score: 0) do condition(:external_authorization_enabled, scope: :global, score: 0) do
::EE::Gitlab::ExternalAuthorization.enabled? ::EE::Gitlab::ExternalAuthorization.perform_check?
end end
rule { external_authorization_enabled & ~admin & ~auditor }.policy do rule { external_authorization_enabled & ~admin & ~auditor }.policy do
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
= link_to icon('question-circle'), help_page_path('user/admin_area/settings/external_authorization') = link_to icon('question-circle'), help_page_path('user/admin_area/settings/external_authorization')
.form-group .form-group
= f.label :external_authorization_service_url, _('Service URL'), class: 'control-label col-sm-2' = f.label :external_authorization_service_url, _('Service URL'), class: 'control-label col-sm-2'
%span.help-block
= external_authorization_url_help_text
.col-sm-10 .col-sm-10
= f.text_field :external_authorization_service_url, class: 'form-control' = f.text_field :external_authorization_service_url, class: 'form-control'
.form-group .form-group
......
---
title: Allow enabling classification policy control without external authorization
service
merge_request: 5083
author:
type: changed
...@@ -4,7 +4,7 @@ module EE ...@@ -4,7 +4,7 @@ module EE
RequestFailed = Class.new(StandardError) RequestFailed = Class.new(StandardError)
def self.access_allowed?(user, label) def self.access_allowed?(user, label)
return true unless enabled? return true unless perform_check?
return false unless user return false unless user
access_for_user_to_label(user, label).has_access? access_for_user_to_label(user, label).has_access?
...@@ -33,6 +33,10 @@ module EE ...@@ -33,6 +33,10 @@ module EE
.external_authorization_service_enabled? .external_authorization_service_enabled?
end end
def self.perform_check?
enabled? && service_url.present?
end
def self.service_url def self.service_url
::Gitlab::CurrentSettings ::Gitlab::CurrentSettings
.current_application_settings .current_application_settings
......
...@@ -93,7 +93,7 @@ describe Boards::IssuesController do ...@@ -93,7 +93,7 @@ describe Boards::IssuesController do
context 'with external authorization' do context 'with external authorization' do
before do before do
sign_in(user) sign_in(user)
enable_external_authorization_service enable_external_authorization_service_check
end end
it 'returns a 404 for group boards' do it 'returns a 404 for group boards' do
......
...@@ -9,7 +9,7 @@ describe Dashboard::GroupsController do ...@@ -9,7 +9,7 @@ describe Dashboard::GroupsController do
describe '#index' do describe '#index' do
it 'works when the external authorization service is enabled' do it 'works when the external authorization service is enabled' do
enable_external_authorization_service enable_external_authorization_service_check
get :index get :index
......
...@@ -11,7 +11,7 @@ describe Dashboard::ProjectsController do ...@@ -11,7 +11,7 @@ describe Dashboard::ProjectsController do
subject { get :index } subject { get :index }
it 'it works when the external authorization service is enabled' do it 'it works when the external authorization service is enabled' do
enable_external_authorization_service enable_external_authorization_service_check
get :index get :index
......
...@@ -12,7 +12,7 @@ describe Groups::AvatarsController do ...@@ -12,7 +12,7 @@ describe Groups::AvatarsController do
end end
it 'works when external authorization service is enabled' do it 'works when external authorization service is enabled' do
enable_external_authorization_service enable_external_authorization_service_check
delete :destroy, group_id: group delete :destroy, group_id: group
......
...@@ -12,7 +12,7 @@ describe Groups::ChildrenController do ...@@ -12,7 +12,7 @@ describe Groups::ChildrenController do
end end
it 'works when external authorization service is enabled' do it 'works when external authorization service is enabled' do
enable_external_authorization_service enable_external_authorization_service_check
get :index, group_id: group, format: :json get :index, group_id: group, format: :json
......
...@@ -14,7 +14,7 @@ describe Groups::GroupMembersController do ...@@ -14,7 +14,7 @@ describe Groups::GroupMembersController do
context 'with external authorization enabled' do context 'with external authorization enabled' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
describe 'GET #index' do describe 'GET #index' do
......
...@@ -13,7 +13,7 @@ describe GroupsController do ...@@ -13,7 +13,7 @@ describe GroupsController do
context 'with external authorization service enabled' do context 'with external authorization service enabled' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
describe 'GET #show' do describe 'GET #show' do
......
...@@ -13,7 +13,7 @@ describe Groups::Settings::CiCdController do ...@@ -13,7 +13,7 @@ describe Groups::Settings::CiCdController do
context 'with external authorization enabled' do context 'with external authorization enabled' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
describe 'GET #show' do describe 'GET #show' do
......
...@@ -13,7 +13,7 @@ describe Groups::VariablesController do ...@@ -13,7 +13,7 @@ describe Groups::VariablesController do
context 'with external authorization enabled' do context 'with external authorization enabled' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
describe 'GET #show' do describe 'GET #show' do
......
...@@ -13,7 +13,7 @@ describe SearchController do ...@@ -13,7 +13,7 @@ describe SearchController do
context 'with external authorization service enabled' do context 'with external authorization service enabled' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
describe 'GET #show' do describe 'GET #show' do
......
...@@ -23,7 +23,7 @@ feature 'The group dashboard' do ...@@ -23,7 +23,7 @@ feature 'The group dashboard' do
end end
it 'hides some links when an external authorization service is enabled' do it 'hides some links when an external authorization service is enabled' do
enable_external_authorization_service enable_external_authorization_service_check
visit dashboard_groups_path visit dashboard_groups_path
within('.navbar') do within('.navbar') do
......
...@@ -11,24 +11,35 @@ feature 'The group page' do ...@@ -11,24 +11,35 @@ feature 'The group page' do
group.add_owner(user) group.add_owner(user)
end end
describe 'The sidebar' do def expect_all_sidebar_links
it 'has all the expected links' do
visit group_path(group)
within('.nav-sidebar') do within('.nav-sidebar') do
expect(page).to have_link('Overview') expect(page).to have_link('Overview')
expect(page).to have_link('Details') expect(page).to have_link('Details')
expect(page).to have_link('Activity') expect(page).to have_link('Activity')
expect(page).to have_link('Contribution Analytics') expect(page).to have_link('Contribution Analytics')
expect(page).to have_link('Issues') expect(page).to have_link('Issues')
expect(page).to have_link('Merge Requests') expect(page).to have_link('Merge Requests')
expect(page).to have_link('Members') expect(page).to have_link('Members')
end end
end end
it 'hides some links when an external authorization service is enabled' do describe 'The sidebar' do
enable_external_authorization_service it 'has all the expected links' do
visit group_path(group)
expect_all_sidebar_links
end
it 'shows all project features when policy control is enabled' do
stub_ee_application_setting(external_authorization_service_enabled: true)
visit group_path(group)
expect_all_sidebar_links
end
it 'hides some links when an external authorization service configured with an url' do
enable_external_authorization_service_check
visit group_path(group) visit group_path(group)
within('.nav-sidebar') do within('.nav-sidebar') do
...@@ -57,7 +68,7 @@ feature 'The group page' do ...@@ -57,7 +68,7 @@ feature 'The group page' do
end end
it 'hides the epics link when an external authorization service is enabled' do it 'hides the epics link when an external authorization service is enabled' do
enable_external_authorization_service enable_external_authorization_service_check
visit group_path(group) visit group_path(group)
within('.nav-sidebar') do within('.nav-sidebar') do
......
require 'spec_helper' require 'spec_helper'
describe 'Classification label on project pages' do describe 'Classification label on project pages' do
include ExternalAuthorizationServiceHelpers
let(:project) do let(:project) do
create(:project, external_authorization_classification_label: 'authorized label') create(:project, external_authorization_classification_label: 'authorized label')
end end
let(:user) { create(:user) } let(:user) { create(:user) }
before do before do
stub_ee_application_setting(external_authorization_service_enabled: true)
project.add_master(user) project.add_master(user)
sign_in(user) sign_in(user)
end end
it 'shows the classification label on the project page when the feature is enabled' do it 'shows the classification label on the project page when the feature is enabled' do
external_service_allow_access(user, project) stub_licensed_features(external_authorization_service: true)
visit project_path(project) visit project_path(project)
......
...@@ -23,7 +23,7 @@ describe 'listing forks of a project' do ...@@ -23,7 +23,7 @@ describe 'listing forks of a project' do
end end
it 'does not show the commit message when an external authorization service is used' do it 'does not show the commit message when an external authorization service is used' do
enable_external_authorization_service enable_external_authorization_service_check
visit project_forks_path(source) visit project_forks_path(source)
......
...@@ -73,7 +73,7 @@ describe 'viewing an issue with cross project references' do ...@@ -73,7 +73,7 @@ describe 'viewing an issue with cross project references' do
context 'when an external authorization service is enabled' do context 'when an external authorization service is enabled' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
it 'only hits the external service for the project the user is viewing' do it 'only hits the external service for the project the user is viewing' do
......
require 'spec_helper' require 'spec_helper'
describe 'Project settings > [EE] repository' do describe 'Project settings > [EE] repository' do
include ExternalAuthorizationServiceHelpers
let(:user) { create(:user) } let(:user) { create(:user) }
let(:project) { create(:project_empty_repo) } let(:project) { create(:project_empty_repo) }
...@@ -12,7 +10,7 @@ describe 'Project settings > [EE] repository' do ...@@ -12,7 +10,7 @@ describe 'Project settings > [EE] repository' do
end end
it 'shows the field to set a classification label when the feature is enabled' do it 'shows the field to set a classification label when the feature is enabled' do
external_service_allow_access(user, project) stub_ee_application_setting(external_authorization_service_enabled: true)
visit edit_project_path(project) visit edit_project_path(project)
......
...@@ -12,7 +12,7 @@ describe 'User page' do ...@@ -12,7 +12,7 @@ describe 'User page' do
describe 'when external authorization is enabled' do describe 'when external authorization is enabled' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
it 'hides the most recent activity' do it 'hides the most recent activity' do
......
...@@ -33,7 +33,7 @@ describe EE::Gitlab::ExternalAuthorization, :request_store do ...@@ -33,7 +33,7 @@ describe EE::Gitlab::ExternalAuthorization, :request_store do
describe '#access_for_user_to_label' do describe '#access_for_user_to_label' do
it 'only loads the access once per request' do it 'only loads the access once per request' do
enable_external_authorization_service enable_external_authorization_service_check
expect(EE::Gitlab::ExternalAuthorization::Access) expect(EE::Gitlab::ExternalAuthorization::Access)
.to receive(:new).with(user, label).once.and_call_original .to receive(:new).with(user, label).once.and_call_original
......
...@@ -30,9 +30,9 @@ describe ApplicationSetting do ...@@ -30,9 +30,9 @@ describe ApplicationSetting do
setting.external_authorization_service_enabled = true setting.external_authorization_service_enabled = true
end end
it { is_expected.not_to allow_value(nil).for(:external_authorization_service_url) }
it { is_expected.not_to allow_value('not a URL').for(:external_authorization_service_url) } it { is_expected.not_to allow_value('not a URL').for(:external_authorization_service_url) }
it { is_expected.to allow_value('https://example.com').for(:external_authorization_service_url) } it { is_expected.to allow_value('https://example.com').for(:external_authorization_service_url) }
it { is_expected.to allow_value('').for(:external_authorization_service_url) }
it { is_expected.not_to allow_value(nil).for(:external_authorization_service_default_label) } it { is_expected.not_to allow_value(nil).for(:external_authorization_service_default_label) }
it { is_expected.not_to allow_value(11).for(:external_authorization_service_timeout) } it { is_expected.not_to allow_value(11).for(:external_authorization_service_timeout) }
it { is_expected.not_to allow_value(0).for(:external_authorization_service_timeout) } it { is_expected.not_to allow_value(0).for(:external_authorization_service_timeout) }
......
...@@ -66,7 +66,7 @@ describe Issue do ...@@ -66,7 +66,7 @@ describe Issue do
context 'when an external authentication service' do context 'when an external authentication service' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
describe '#publicly_visible?' do describe '#publicly_visible?' do
......
...@@ -1269,7 +1269,7 @@ describe Project do ...@@ -1269,7 +1269,7 @@ describe Project do
describe '#external_authorization_classification_label' do describe '#external_authorization_classification_label' do
it 'falls back to the default when none is configured' do it 'falls back to the default when none is configured' do
enable_external_authorization_service enable_external_authorization_service_check
expect(build(:project).external_authorization_classification_label) expect(build(:project).external_authorization_classification_label)
.to eq('default_label') .to eq('default_label')
...@@ -1286,7 +1286,7 @@ describe Project do ...@@ -1286,7 +1286,7 @@ describe Project do
end end
it 'returns the classification label if it was configured on the project' do it 'returns the classification label if it was configured on the project' do
enable_external_authorization_service enable_external_authorization_service_check
project = build(:project, project = build(:project,
external_authorization_classification_label: 'hello') external_authorization_classification_label: 'hello')
...@@ -1296,7 +1296,7 @@ describe Project do ...@@ -1296,7 +1296,7 @@ describe Project do
end end
it 'does not break when not stubbing the license check' do it 'does not break when not stubbing the license check' do
enable_external_authorization_service enable_external_authorization_service_check
enable_namespace_license_check! enable_namespace_license_check!
project = build(:project) project = build(:project)
......
...@@ -13,7 +13,7 @@ describe BasePolicy do ...@@ -13,7 +13,7 @@ describe BasePolicy do
context 'when an external authorization service is enabled' do context 'when an external authorization service is enabled' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
it { is_expected.not_to be_allowed(:read_cross_project) } it { is_expected.not_to be_allowed(:read_cross_project) }
......
...@@ -139,7 +139,7 @@ describe EpicPolicy do ...@@ -139,7 +139,7 @@ describe EpicPolicy do
let(:group) { create(:group) } let(:group) { create(:group) }
before do before do
enable_external_authorization_service enable_external_authorization_service_check
group.add_owner(user) group.add_owner(user)
end end
......
...@@ -10,7 +10,7 @@ describe IssuePolicy do ...@@ -10,7 +10,7 @@ describe IssuePolicy do
let(:policies) { described_class.new(user, issue) } let(:policies) { described_class.new(user, issue) }
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
it 'can read the issue iid without accessing the external service' do it 'can read the issue iid without accessing the external service' do
......
...@@ -118,7 +118,7 @@ describe MergeRequestPolicy do ...@@ -118,7 +118,7 @@ describe MergeRequestPolicy do
let(:policies) { described_class.new(user, merge_request) } let(:policies) { described_class.new(user, merge_request) }
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
it 'can read the issue iid without accessing the external service' do it 'can read the issue iid without accessing the external service' do
......
...@@ -139,7 +139,7 @@ describe ProjectPolicy do ...@@ -139,7 +139,7 @@ describe ProjectPolicy do
context 'with an external authorization service' do context 'with an external authorization service' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
it 'allows access when the external service allows it' do it 'allows access when the external service allows it' do
......
...@@ -19,7 +19,7 @@ describe GroupChildEntity do ...@@ -19,7 +19,7 @@ describe GroupChildEntity do
end end
before do before do
enable_external_authorization_service enable_external_authorization_service_check
object.add_master(user) object.add_master(user)
end end
......
...@@ -23,7 +23,7 @@ describe EE::NotificationService, :mailer do ...@@ -23,7 +23,7 @@ describe EE::NotificationService, :mailer do
context 'when the service is enabled' do context 'when the service is enabled' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
it 'does not send an email' do it 'does not send an email' do
......
module ExternalAuthorizationServiceHelpers module ExternalAuthorizationServiceHelpers
def enable_external_authorization_service def enable_external_authorization_service_check
stub_licensed_features(external_authorization_service: true) stub_licensed_features(external_authorization_service: true)
# Not using `stub_application_setting` because the method is prepended in stub_ee_application_setting(external_authorization_service_enabled: true)
# `EE::ApplicationSetting` which breaks when using `any_instance`
# https://gitlab.com/gitlab-org/gitlab-ce/issues/33587
allow(::Gitlab::CurrentSettings.current_application_settings)
.to receive(:external_authorization_service_enabled) { true }
allow(::Gitlab::CurrentSettings.current_application_settings)
.to receive(:external_authorization_service_enabled?) { true }
stub_application_setting(external_authorization_service_url: 'https://authorize.me') stub_ee_application_setting(external_authorization_service_url: 'https://authorize.me')
stub_application_setting(external_authorization_service_default_label: 'default_label') stub_ee_application_setting(external_authorization_service_default_label: 'default_label')
stub_request(:post, "https://authorize.me").to_return(status: 200) stub_request(:post, "https://authorize.me").to_return(status: 200)
end end
def external_service_set_access(allowed, user, project) def external_service_set_access(allowed, user, project)
enable_external_authorization_service enable_external_authorization_service_check
classification_label = ::Gitlab::CurrentSettings.current_application_settings classification_label = ::Gitlab::CurrentSettings.current_application_settings
.external_authorization_service_default_label .external_authorization_service_default_label
......
...@@ -10,7 +10,7 @@ shared_examples 'disabled when using an external authorization service' do ...@@ -10,7 +10,7 @@ shared_examples 'disabled when using an external authorization service' do
end end
it 'renders a 404 with a message when the feature is enabled' do it 'renders a 404 with a message when the feature is enabled' do
enable_external_authorization_service enable_external_authorization_service_check
subject subject
......
...@@ -16,7 +16,7 @@ shared_examples 'a finder with external authorization service' do ...@@ -16,7 +16,7 @@ shared_examples 'a finder with external authorization service' do
context 'with an external authorization service' do context 'with an external authorization service' do
before do before do
enable_external_authorization_service enable_external_authorization_service_check
end end
it 'does not include the subject when no project was given' do it 'does not include the subject when no project was given' do
......
...@@ -8,8 +8,8 @@ msgid "" ...@@ -8,8 +8,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gitlab 1.0.0\n" "Project-Id-Version: gitlab 1.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-14 16:41+0100\n" "POT-Creation-Date: 2018-03-23 20:21+0100\n"
"PO-Revision-Date: 2018-03-14 16:41+0100\n" "PO-Revision-Date: 2018-03-23 20:21+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n" "Language: \n"
...@@ -385,6 +385,9 @@ msgstr "" ...@@ -385,6 +385,9 @@ msgstr ""
msgid "Assign to" msgid "Assign to"
msgstr "" msgstr ""
msgid "Assigned to :name"
msgstr ""
msgid "Assignee" msgid "Assignee"
msgstr "" msgstr ""
...@@ -690,7 +693,7 @@ msgstr "" ...@@ -690,7 +693,7 @@ msgstr ""
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
msgid "Cancel edit" msgid "Cannot be merged automatically"
msgstr "" msgstr ""
msgid "Cannot modify managed Kubernetes cluster" msgid "Cannot modify managed Kubernetes cluster"
...@@ -1249,6 +1252,9 @@ msgstr "" ...@@ -1249,6 +1252,9 @@ msgstr ""
msgid "Compare Revisions" msgid "Compare Revisions"
msgstr "" msgstr ""
msgid "Compare changes with the last commit"
msgstr ""
msgid "CompareBranches|%{source_branch} and %{target_branch} are the same." msgid "CompareBranches|%{source_branch} and %{target_branch} are the same."
msgstr "" msgstr ""
...@@ -1264,6 +1270,9 @@ msgstr "" ...@@ -1264,6 +1270,9 @@ msgstr ""
msgid "CompareBranches|There isn't anything to compare." msgid "CompareBranches|There isn't anything to compare."
msgstr "" msgstr ""
msgid "Confidential"
msgstr ""
msgid "Confidentiality" msgid "Confidentiality"
msgstr "" msgstr ""
...@@ -1581,6 +1590,9 @@ msgstr "" ...@@ -1581,6 +1590,9 @@ msgstr ""
msgid "DownloadSource|Download" msgid "DownloadSource|Download"
msgstr "" msgstr ""
msgid "Downvotes"
msgstr ""
msgid "Due date" msgid "Due date"
msgstr "" msgstr ""
...@@ -1593,6 +1605,9 @@ msgstr "" ...@@ -1593,6 +1605,9 @@ msgstr ""
msgid "Edit files in the editor and commit changes here" msgid "Edit files in the editor and commit changes here"
msgstr "" msgstr ""
msgid "Editing"
msgstr ""
msgid "Emails" msgid "Emails"
msgstr "" msgstr ""
...@@ -2090,9 +2105,6 @@ msgstr "" ...@@ -2090,9 +2105,6 @@ msgstr ""
msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group." msgid "GroupsEmptyState|You can manage your group member’s permissions and access to each project in the group."
msgstr "" msgstr ""
msgid "GroupsTree|Are you sure you want to leave the \"${group.fullName}\" group?"
msgstr ""
msgid "GroupsTree|Create a project in this group." msgid "GroupsTree|Create a project in this group."
msgstr "" msgstr ""
...@@ -2141,6 +2153,9 @@ msgstr "" ...@@ -2141,6 +2153,9 @@ msgstr ""
msgid "HealthCheck|Unhealthy" msgid "HealthCheck|Unhealthy"
msgstr "" msgstr ""
msgid "Help"
msgstr ""
msgid "Hide value" msgid "Hide value"
msgid_plural "Hide values" msgid_plural "Hide values"
msgstr[0] "" msgstr[0] ""
...@@ -2408,6 +2423,9 @@ msgstr "" ...@@ -2408,6 +2423,9 @@ msgstr ""
msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos." msgid "Make everyone on your team more productive regardless of their location. GitLab Geo creates read-only mirrors of your GitLab instance so you can reduce the time it takes to clone and fetch large repos."
msgstr "" msgstr ""
msgid "Manage all notifications"
msgstr ""
msgid "Manage group labels" msgid "Manage group labels"
msgstr "" msgstr ""
...@@ -3319,6 +3337,9 @@ msgstr "" ...@@ -3319,6 +3337,9 @@ msgstr ""
msgid "Related Merged Requests" msgid "Related Merged Requests"
msgstr "" msgstr ""
msgid "Related merge requests"
msgstr ""
msgid "Remind later" msgid "Remind later"
msgstr "" msgstr ""
...@@ -3372,12 +3393,18 @@ msgstr "" ...@@ -3372,12 +3393,18 @@ msgstr ""
msgid "Revert this merge request" msgid "Revert this merge request"
msgstr "" msgstr ""
msgid "Reviewing"
msgstr ""
msgid "Roadmap" msgid "Roadmap"
msgstr "" msgstr ""
msgid "Run CI/CD pipelines for external repositories" msgid "Run CI/CD pipelines for external repositories"
msgstr "" msgstr ""
msgid "Runners"
msgstr ""
msgid "Running" msgid "Running"
msgstr "" msgstr ""
...@@ -3545,7 +3572,7 @@ msgstr "" ...@@ -3545,7 +3572,7 @@ msgstr ""
msgid "Something went wrong when toggling the button" msgid "Something went wrong when toggling the button"
msgstr "" msgstr ""
msgid "Something went wrong while closing the %{issuable}. Please try again later" msgid "Something went wrong while fetching Dependency Scanning."
msgstr "" msgstr ""
msgid "Something went wrong while fetching SAST." msgid "Something went wrong while fetching SAST."
...@@ -3557,12 +3584,6 @@ msgstr "" ...@@ -3557,12 +3584,6 @@ msgstr ""
msgid "Something went wrong while fetching the registry list." msgid "Something went wrong while fetching the registry list."
msgstr "" msgstr ""
msgid "Something went wrong while reopening the %{issuable}. Please try again later"
msgstr ""
msgid "Something went wrong while resolving this discussion. Please try again."
msgstr ""
msgid "Something went wrong. Please try again." msgid "Something went wrong. Please try again."
msgstr "" msgstr ""
...@@ -3799,6 +3820,9 @@ msgstr "" ...@@ -3799,6 +3820,9 @@ msgstr ""
msgid "Target Branch" msgid "Target Branch"
msgstr "" msgstr ""
msgid "Target branch"
msgstr ""
msgid "Team" msgid "Team"
msgstr "" msgstr ""
...@@ -4211,9 +4235,6 @@ msgstr "" ...@@ -4211,9 +4235,6 @@ msgstr ""
msgid "Turn on Service Desk" msgid "Turn on Service Desk"
msgstr "" msgstr ""
msgid "Unable to load the diff."
msgstr ""
msgid "Unknown" msgid "Unknown"
msgstr "" msgstr ""
...@@ -4262,6 +4283,9 @@ msgstr "" ...@@ -4262,6 +4283,9 @@ msgstr ""
msgid "UploadLink|click to upload" msgid "UploadLink|click to upload"
msgstr "" msgstr ""
msgid "Upvotes"
msgstr ""
msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab" msgid "Use Service Desk to connect with your users (e.g. to offer customer support) through email right inside GitLab"
msgstr "" msgstr ""
...@@ -4274,6 +4298,9 @@ msgstr "" ...@@ -4274,6 +4298,9 @@ msgstr ""
msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want." msgid "Variables are applied to environments via the runner. They can be protected by only exposing them to protected branches or tags. You can use variables for passwords, secret keys, or whatever you want."
msgstr "" msgstr ""
msgid "View and edit lines"
msgstr ""
msgid "View epics list" msgid "View epics list"
msgstr "" msgstr ""
...@@ -4328,6 +4355,9 @@ msgstr "" ...@@ -4328,6 +4355,9 @@ msgstr ""
msgid "Weight" msgid "Weight"
msgstr "" msgstr ""
msgid "When leaving the URL blank, classification labels can still be specified whitout disabling cross project features or performing external authorization checks."
msgstr ""
msgid "Wiki" msgid "Wiki"
msgstr "" msgstr ""
...@@ -4457,6 +4487,12 @@ msgstr "" ...@@ -4457,6 +4487,12 @@ msgstr ""
msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?" msgid "You are going to transfer %{project_full_name} to another owner. Are you ABSOLUTELY sure?"
msgstr "" msgstr ""
msgid "You are on a read-only GitLab instance."
msgstr ""
msgid "You are on a secondary (read-only) Geo node. If you want to make any changes, you must visit the %{primary_node}."
msgstr ""
msgid "You can also create a project from the command line." msgid "You can also create a project from the command line."
msgstr "" msgstr ""
...@@ -4529,6 +4565,9 @@ msgstr "" ...@@ -4529,6 +4565,9 @@ msgstr ""
msgid "You'll need to use different branch names to get a valid comparison." msgid "You'll need to use different branch names to get a valid comparison."
msgstr "" msgstr ""
msgid "You're receiving this email because of your account on %{host}. %{manage_notifications_link} &middot; %{help_link}"
msgstr ""
msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure" msgid "Your Kubernetes cluster information on this page is still editable, but you are advised to disable and reconfigure"
msgstr "" msgstr ""
...@@ -4568,6 +4607,18 @@ msgstr "" ...@@ -4568,6 +4607,18 @@ msgstr ""
msgid "ciReport|DAST detected no alerts by analyzing the review app" msgid "ciReport|DAST detected no alerts by analyzing the review app"
msgstr "" msgstr ""
msgid "ciReport|Dependency scanning"
msgstr ""
msgid "ciReport|Dependency scanning detected"
msgstr ""
msgid "ciReport|Dependency scanning detected no new security vulnerabilities"
msgstr ""
msgid "ciReport|Dependency scanning detected no security vulnerabilities"
msgstr ""
msgid "ciReport|Failed to load %{reportName} report" msgid "ciReport|Failed to load %{reportName} report"
msgstr "" msgstr ""
...@@ -4595,9 +4646,6 @@ msgstr "" ...@@ -4595,9 +4646,6 @@ msgstr ""
msgid "ciReport|SAST" msgid "ciReport|SAST"
msgstr "" msgstr ""
msgid "ciReport|SAST degraded on"
msgstr ""
msgid "ciReport|SAST detected" msgid "ciReport|SAST detected"
msgstr "" msgstr ""
...@@ -4616,15 +4664,12 @@ msgstr "" ...@@ -4616,15 +4664,12 @@ msgstr ""
msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}" msgid "ciReport|Unapproved vulnerabilities (red) can be marked as approved. %{helpLink}"
msgstr "" msgstr ""
msgid "ciReport|no security vulnerabilities" msgid "ciReport|no vulnerabilities"
msgstr "" msgstr ""
msgid "command line instructions" msgid "command line instructions"
msgstr "" msgstr ""
msgid "commit"
msgstr ""
msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue." msgid "confidentiality|You are going to turn off the confidentiality. This means <strong>everyone</strong> will be able to see and leave a comment on this issue."
msgstr "" msgstr ""
......
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