Commit 4485f376 authored by Borja Aparicio's avatar Borja Aparicio Committed by Robert Speicher

Set KRB5 as default clone URL when Kerberos is enabled and user is logged in

parent 4adde438
...@@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date. ...@@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date.
v 8.8.0 (unreleased) v 8.8.0 (unreleased)
- [Elastic] Database indexer prints its status - [Elastic] Database indexer prints its status
- [Elastic][Fix] Database indexer skips projects with invalid HEAD reference - [Elastic][Fix] Database indexer skips projects with invalid HEAD reference
- Set KRB5 as default clone protocol when Kerberos is enabled and user is logged in (Borja Aparicio)
v 8.7.2 v 8.7.2
- Fix MR notifications for slack and hipchat when approvals are fullfiled. !325 - Fix MR notifications for slack and hipchat when approvals are fullfiled. !325
......
...@@ -55,18 +55,17 @@ module ButtonHelper ...@@ -55,18 +55,17 @@ module ButtonHelper
end end
def kerberos_clone_button(project) def kerberos_clone_button(project)
klass = 'btn js-protocol-switch' klass = 'kerberos-selector'
klass << ' active' if default_clone_protocol == 'kerberos'
klass << ' has-tooltip' klass << ' has-tooltip'
content_tag :button, 'KRB5', content_tag :a, 'KRB5',
class: klass, class: klass,
href: project.kerberos_url_to_repo,
data: { data: {
clone: project.kerberos_url_to_repo,
container: 'body',
html: 'true', html: 'true',
title: 'Get a Kerberos token for your account with kinit<br>to pull or push via Kerberos.' placement: 'right',
}, container: 'body',
type: :button title: 'Get a Kerberos token for your<br>account with kinit.'
}
end end
end end
...@@ -209,7 +209,10 @@ module ProjectsHelper ...@@ -209,7 +209,10 @@ module ProjectsHelper
end end
def default_url_to_repo(project = @project) def default_url_to_repo(project = @project)
if default_clone_protocol == "ssh" case default_clone_protocol
when 'krb5'
project.kerberos_url_to_repo
when 'ssh'
project.ssh_url_to_repo project.ssh_url_to_repo
else else
project.http_url_to_repo project.http_url_to_repo
...@@ -217,7 +220,9 @@ module ProjectsHelper ...@@ -217,7 +220,9 @@ module ProjectsHelper
end end
def default_clone_protocol 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 gitlab_config.protocol
else else
"ssh" "ssh"
......
...@@ -13,8 +13,7 @@ ...@@ -13,8 +13,7 @@
= http_clone_button(project) = http_clone_button(project)
- if alternative_kerberos_url? - if alternative_kerberos_url?
%li %li
%a#kerberos-btn{href: @project.kerberos_url_to_repo} = kerberos_clone_button(project)
KRB5
= text_field_tag :project_clone, default_url_to_repo(project), class: "js-select-on-focus form-control", readonly: true = text_field_tag :project_clone, default_url_to_repo(project), class: "js-select-on-focus form-control", readonly: true
.input-group-btn .input-group-btn
......
...@@ -5,13 +5,24 @@ Feature: Project Create ...@@ -5,13 +5,24 @@ Feature: Project Create
Should be able to create a new one Should be able to create a new one
@javascript @javascript
Scenario: User create a project Scenario: User create a project with Kerberos disabled
Given I sign in as a user 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 When I visit new project page
And I have an ssh key And I have an ssh key
And fill project form with valid data And fill project form with valid data
Then I should see project page 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 @javascript
Scenario: Empty project instructions with Kerberos disabled Scenario: Empty project instructions with Kerberos disabled
...@@ -20,7 +31,7 @@ Feature: Project Create ...@@ -20,7 +31,7 @@ Feature: Project Create
And I have an ssh key And I have an ssh key
When I visit new project page When I visit new project page
And fill project form with valid data And fill project form with valid data
Then I see empty project instuctions Then I see empty project instructions
And I click on HTTP And I click on HTTP
Then Remote url should update to http link Then Remote url should update to http link
And If I click on SSH And If I click on SSH
...@@ -33,7 +44,7 @@ Feature: Project Create ...@@ -33,7 +44,7 @@ Feature: Project Create
And I have an ssh key And I have an ssh key
When I visit new project page When I visit new project page
And fill project form with valid data 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 And I click on HTTP
Then Remote url should update to http link Then Remote url should update to http link
And If I click on SSH And If I click on SSH
......
...@@ -13,12 +13,18 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps ...@@ -13,12 +13,18 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps
expect(current_path).to eq namespace_project_path(Project.last.namespace, Project.last) expect(current_path).to eq namespace_project_path(Project.last.namespace, Project.last)
end 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 init"
expect(page).to have_content "git remote" expect(page).to have_content "git remote"
expect(page).to have_content Project.last.url_to_repo expect(page).to have_content Project.last.url_to_repo
end 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 step 'KRB5 enabled' do
# Enable Kerberos in an alternative port to force Kerberos button and URL to show up in the UI # 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) allow(Gitlab.config.kerberos).to receive(:enabled).and_return(true)
...@@ -29,12 +35,18 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps ...@@ -29,12 +35,18 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps
allow(Gitlab.config.kerberos).to receive(:enabled).and_return(false) allow(Gitlab.config.kerberos).to receive(:enabled).and_return(false)
end 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 init"
expect(page).to have_content "git remote" expect(page).to have_content "git remote"
expect(page).to have_content Project.last.url_to_repo expect(page).to have_content Project.last.url_to_repo
end 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 step 'I click on HTTP' do
find('#clone-dropdown').click find('#clone-dropdown').click
find('.http-selector').click find('.http-selector').click
...@@ -55,7 +67,7 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps ...@@ -55,7 +67,7 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps
step 'If I click on KRB5' do step 'If I click on KRB5' do
find('#clone-dropdown').click find('#clone-dropdown').click
find('#kerberos-btn').click find('.kerberos-selector').click
end end
step 'Remote url should update to kerberos link' do step 'Remote url should update to kerberos link' do
......
...@@ -88,22 +88,31 @@ describe ProjectsHelper do ...@@ -88,22 +88,31 @@ describe ProjectsHelper do
end end
describe 'default_clone_protocol' do describe 'default_clone_protocol' do
describe 'using HTTP' do context 'when user is not logged in and gitlab protocol is HTTP' do
it 'returns HTTP' do it 'returns HTTP' do
expect(helper).to receive(:current_user).and_return(nil) allow(helper).to receive(:current_user).and_return(nil)
expect(helper.send(:default_clone_protocol)).to eq('http') expect(helper.send(:default_clone_protocol)).to eq('http')
end end
end end
describe 'using HTTPS' do context 'when user is not logged in and gitlab protocol is HTTPS' do
it 'returns HTTPS' do it 'returns HTTPS' do
allow(Gitlab.config.gitlab).to receive(:protocol).and_return('https') stub_config_setting(protocol: 'https')
expect(helper).to receive(:current_user).and_return(nil) allow(helper).to receive(:current_user).and_return(nil)
expect(helper.send(:default_clone_protocol)).to eq('https') expect(helper.send(:default_clone_protocol)).to eq('https')
end end
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 end
describe '#license_short_name' do describe '#license_short_name' do
......
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