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.
v 8.8.0 (unreleased)
- [Elastic] Database indexer prints its status
- [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
- Fix MR notifications for slack and hipchat when approvals are fullfiled. !325
......
......@@ -55,18 +55,17 @@ module ButtonHelper
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<br>to pull or push via Kerberos.'
},
type: :button
placement: 'right',
container: 'body',
title: 'Get a Kerberos token for your<br>account with kinit.'
}
end
end
......@@ -209,7 +209,10 @@ module ProjectsHelper
end
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
else
project.http_url_to_repo
......@@ -217,7 +220,9 @@ module ProjectsHelper
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"
......
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -88,22 +88,31 @@ describe ProjectsHelper do
end
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
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')
end
end
describe 'using HTTPS' do
context 'when user is not logged in and gitlab protocol is HTTPS' do
it 'returns HTTPS' do
allow(Gitlab.config.gitlab).to receive(:protocol).and_return('https')
expect(helper).to receive(:current_user).and_return(nil)
stub_config_setting(protocol: 'https')
allow(helper).to receive(:current_user).and_return(nil)
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
......
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