diff --git a/CHANGELOG b/CHANGELOG
index f41010e6d659007de996a078273a921acfcbb467..79ed91d9c2573317989b29070775965edcd8f00e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -16,6 +16,7 @@ v 8.7.1 (unreleased)
- Use the `can?` helper instead of `current_user.can?`. !3882
- Prevent users from deleting Webhooks via API they do not own
- Fix Error 500 due to stale cache when projects are renamed or transferred
+ - Set KRB5 as default clone protocol when Kerberos is enabled and user is logged in (Borja Aparicio)
v 8.7.0
- Gitlab::GitAccess and Gitlab::GitAccessWiki are now instrumented
diff --git a/app/helpers/button_helper.rb b/app/helpers/button_helper.rb
index 5c21bb6dfd8d3103f3eb397d9e9857072faffff7..b319a8700b0ed6d1e225501744d6ea58cc8000bb 100644
--- a/app/helpers/button_helper.rb
+++ b/app/helpers/button_helper.rb
@@ -55,18 +55,17 @@ def ssh_clone_button(project)
end
def kerberos_clone_button(project)
- klass = 'btn js-protocol-switch'
- klass << ' active' if default_clone_protocol == 'kerberos'
+ klass = 'kerberos-selector'
klass << ' has-tooltip'
- content_tag :button, 'KRB5',
+ content_tag :a, 'KRB5',
class: klass,
+ href: project.kerberos_url_to_repo,
data: {
- clone: project.kerberos_url_to_repo,
- container: 'body',
html: 'true',
- title: 'Get a Kerberos token for your account with kinit
to pull or push via Kerberos.'
- },
- type: :button
+ placement: 'right',
+ container: 'body',
+ title: 'Get a Kerberos token for your
account with kinit.'
+ }
end
end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 9c7fa4fd070c433db2432f1bc1195946021c344a..a7c157985ca6e8138bc821cd41b03a4f8fa10f24 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -209,7 +209,9 @@ def repository_size(project = @project)
end
def default_url_to_repo(project = @project)
- if default_clone_protocol == "ssh"
+ if default_clone_protocol == "krb5"
+ project.kerberos_url_to_repo
+ elsif default_clone_protocol == "ssh"
project.ssh_url_to_repo
else
project.http_url_to_repo
@@ -217,7 +219,9 @@ def default_url_to_repo(project = @project)
end
def default_clone_protocol
- if !current_user || current_user.require_ssh_key?
+ if alternative_kerberos_url? && current_user
+ "krb5"
+ elsif !current_user || current_user.require_ssh_key?
gitlab_config.protocol
else
"ssh"
diff --git a/app/views/shared/_clone_panel.html.haml b/app/views/shared/_clone_panel.html.haml
index 16504139c92d691fa3ea1132040e02ff002cf7ae..d47ccc55aa3ba2c6a93bb9b0da5ea2dc3c903d56 100644
--- a/app/views/shared/_clone_panel.html.haml
+++ b/app/views/shared/_clone_panel.html.haml
@@ -13,8 +13,7 @@
= http_clone_button(project)
- if alternative_kerberos_url?
%li
- %a#kerberos-btn{href: @project.kerberos_url_to_repo}
- KRB5
+ = kerberos_clone_button(project)
= text_field_tag :project_clone, default_url_to_repo(project), class: "js-select-on-focus form-control", readonly: true
.input-group-btn
diff --git a/features/project/create.feature b/features/project/create.feature
index 95a647be0c735a027512ac6a9afd4b1d9e278dd1..1667ec36479891cfc1b40f02aca353169412da57 100644
--- a/features/project/create.feature
+++ b/features/project/create.feature
@@ -5,13 +5,24 @@ Feature: Project Create
Should be able to create a new one
@javascript
- Scenario: User create a project
+ Scenario: User create a project with Kerberos disabled
Given I sign in as a user
+ And KRB5 disabled
+ When I visit new project page
+ And I have an ssh key
+ And fill project form with valid data
+ Then I should see project page
+ And I should see empty project instructions
+
+ @javascript
+ Scenario: User create a project with Kerberos enabled
+ Given I sign in as a user
+ And KRB5 enabled
When I visit new project page
And I have an ssh key
And fill project form with valid data
Then I should see project page
- And I should see empty project instuctions
+ And I should see empty project instructions with Kerberos as default url
@javascript
Scenario: Empty project instructions with Kerberos disabled
@@ -20,7 +31,7 @@ Feature: Project Create
And I have an ssh key
When I visit new project page
And fill project form with valid data
- Then I see empty project instuctions
+ Then I see empty project instructions
And I click on HTTP
Then Remote url should update to http link
And If I click on SSH
@@ -33,7 +44,7 @@ Feature: Project Create
And I have an ssh key
When I visit new project page
And fill project form with valid data
- Then I see empty project instuctions
+ Then I see empty project instructions with Kerberos as default url
And I click on HTTP
Then Remote url should update to http link
And If I click on SSH
diff --git a/features/steps/project/create.rb b/features/steps/project/create.rb
index aab646c7c1d5c702887707762534757522502382..a8dfd5b1e522b8879ad515fc3852e346bcdfeb44 100644
--- a/features/steps/project/create.rb
+++ b/features/steps/project/create.rb
@@ -13,12 +13,18 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps
expect(current_path).to eq namespace_project_path(Project.last.namespace, Project.last)
end
- step 'I should see empty project instuctions' do
+ step 'I should see empty project instructions' do
expect(page).to have_content "git init"
expect(page).to have_content "git remote"
expect(page).to have_content Project.last.url_to_repo
end
+ step 'I should see empty project instructions with Kerberos as default url' do
+ expect(page).to have_content "git init"
+ expect(page).to have_content "git remote"
+ expect(page).to have_content Project.last.kerberos_url_to_repo
+ end
+
step 'KRB5 enabled' do
# Enable Kerberos in an alternative port to force Kerberos button and URL to show up in the UI
allow(Gitlab.config.kerberos).to receive(:enabled).and_return(true)
@@ -29,12 +35,18 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps
allow(Gitlab.config.kerberos).to receive(:enabled).and_return(false)
end
- step 'I see empty project instuctions' do
+ step 'I see empty project instructions' do
expect(page).to have_content "git init"
expect(page).to have_content "git remote"
expect(page).to have_content Project.last.url_to_repo
end
+ step 'I see empty project instructions with Kerberos as default url' do
+ expect(page).to have_content "git init"
+ expect(page).to have_content "git remote"
+ expect(page).to have_content Project.last.kerberos_url_to_repo
+
+ end
step 'I click on HTTP' do
find('#clone-dropdown').click
find('.http-selector').click
@@ -55,7 +67,7 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps
step 'If I click on KRB5' do
find('#clone-dropdown').click
- find('#kerberos-btn').click
+ find('.kerberos-selector').click
end
step 'Remote url should update to kerberos link' do
diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb
index 62389188d2c8add2479e86b6bf0f1c13017776d5..32da52023eaa826ce36ee65824d0b8bc422b5c80 100644
--- a/spec/helpers/projects_helper_spec.rb
+++ b/spec/helpers/projects_helper_spec.rb
@@ -88,22 +88,33 @@
end
describe 'default_clone_protocol' do
- describe 'using HTTP' do
+ context 'when user is not logged in and gitlab protocol is HTTP' do
+ before do
+ allow(helper).to receive(:current_user).and_return(nil)
+ end
it 'returns HTTP' do
- expect(helper).to receive(:current_user).and_return(nil)
-
expect(helper.send(:default_clone_protocol)).to eq('http')
end
end
- describe 'using HTTPS' do
- it 'returns HTTPS' do
+ context 'when user is not logged in and gitlab protocol is HTTPS' do
+ before do
allow(Gitlab.config.gitlab).to receive(:protocol).and_return('https')
- expect(helper).to receive(:current_user).and_return(nil)
-
+ allow(helper).to receive(:current_user).and_return(nil)
+ end
+ it 'returns HTTPS' do
expect(helper.send(:default_clone_protocol)).to eq('https')
end
end
+
+ context 'when gitlab.config.kerberos is enabled and user is logged in' do
+ it 'returns krb5 as default protocol' do
+ allow(Gitlab.config.kerberos).to receive(:enabled).and_return('true')
+ allow(helper).to receive(:current_user).and_return(double)
+
+ expect(helper.send(:default_clone_protocol)).to eq('krb5')
+ end
+ end
end
describe '#license_short_name' do