Merge branch 'fix/import-permissions' into 'master'
Set permissions to admin for importing a project via Import/Export Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/20802 In order to import a project, it is now required to be an admin Moved from https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5766 See merge request !1983
This commit is contained in:
commit
966b303802
6 changed files with 69 additions and 44 deletions
|
@ -1,5 +1,6 @@
|
|||
class Import::GitlabProjectsController < Import::BaseController
|
||||
before_action :verify_gitlab_project_import_enabled
|
||||
before_action :authenticate_admin!
|
||||
|
||||
def new
|
||||
@namespace_id = project_params[:namespace_id]
|
||||
|
@ -47,4 +48,8 @@ class Import::GitlabProjectsController < Import::BaseController
|
|||
:path, :namespace_id, :file
|
||||
)
|
||||
end
|
||||
|
||||
def authenticate_admin!
|
||||
render_404 unless current_user.is_admin?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
= link_to "#", class: 'btn js-toggle-button import_git' do
|
||||
= icon('git', text: 'Repo by URL')
|
||||
%div{ class: 'import_gitlab_project' }
|
||||
- if gitlab_project_import_enabled?
|
||||
- if gitlab_project_import_enabled? && current_user.is_admin?
|
||||
= link_to new_import_gitlab_project_path, class: 'btn btn_import_gitlab_project project-submit' do
|
||||
= icon('gitlab', text: 'GitLab export')
|
||||
|
||||
|
|
|
@ -7,8 +7,7 @@
|
|||
> than that of the exporter.
|
||||
> - For existing installations, the project import option has to be enabled in
|
||||
> application settings (`/admin/application_settings`) under 'Import sources'.
|
||||
> Ask your administrator if you don't see the **GitLab export** button when
|
||||
> creating a new project.
|
||||
> You will have to be an administrator to enable and use the import functionality.
|
||||
> - You can find some useful raketasks if you are an administrator in the
|
||||
> [import_export](../../../administration/raketasks/project_import_export.md)
|
||||
> raketask.
|
||||
|
|
|
@ -9,7 +9,7 @@ Background:
|
|||
@javascript
|
||||
Scenario: I should see New Projects page
|
||||
Then I see "New Project" page
|
||||
Then I see all possible import optios
|
||||
Then I see all possible import options
|
||||
|
||||
@javascript
|
||||
Scenario: I should see instructions on how to import from Git URL
|
||||
|
|
|
@ -14,14 +14,13 @@ class Spinach::Features::NewProject < Spinach::FeatureSteps
|
|||
expect(page).to have_content('Project name')
|
||||
end
|
||||
|
||||
step 'I see all possible import optios' do
|
||||
step 'I see all possible import options' do
|
||||
expect(page).to have_link('GitHub')
|
||||
expect(page).to have_link('Bitbucket')
|
||||
expect(page).to have_link('GitLab.com')
|
||||
expect(page).to have_link('Gitorious.org')
|
||||
expect(page).to have_link('Google Code')
|
||||
expect(page).to have_link('Repo by URL')
|
||||
expect(page).to have_link('GitLab export')
|
||||
end
|
||||
|
||||
step 'I click on "Import project from GitHub"' do
|
||||
|
|
|
@ -3,8 +3,9 @@ require 'spec_helper'
|
|||
feature 'project import', feature: true, js: true do
|
||||
include Select2Helper
|
||||
|
||||
let(:user) { create(:admin) }
|
||||
let!(:namespace) { create(:namespace, name: "asd", owner: user) }
|
||||
let(:admin) { create(:admin) }
|
||||
let(:normal_user) { create(:user) }
|
||||
let!(:namespace) { create(:namespace, name: "asd", owner: admin) }
|
||||
let(:file) { File.join(Rails.root, 'spec', 'features', 'projects', 'import_export', 'test_project_export.tar.gz') }
|
||||
let(:export_path) { "#{Dir::tmpdir}/import_file_spec" }
|
||||
let(:project) { Project.last }
|
||||
|
@ -12,66 +13,87 @@ feature 'project import', feature: true, js: true do
|
|||
|
||||
background do
|
||||
allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path)
|
||||
login_as(user)
|
||||
end
|
||||
|
||||
after(:each) do
|
||||
FileUtils.rm_rf(export_path, secure: true)
|
||||
end
|
||||
|
||||
scenario 'user imports an exported project successfully' do
|
||||
expect(Project.all.count).to be_zero
|
||||
context 'admin user' do
|
||||
before do
|
||||
login_as(admin)
|
||||
end
|
||||
|
||||
visit new_project_path
|
||||
scenario 'user imports an exported project successfully' do
|
||||
expect(Project.all.count).to be_zero
|
||||
|
||||
select2('2', from: '#project_namespace_id')
|
||||
fill_in :project_path, with: 'test-project-path', visible: true
|
||||
click_link 'GitLab export'
|
||||
visit new_project_path
|
||||
|
||||
expect(page).to have_content('GitLab project export')
|
||||
expect(URI.parse(current_url).query).to eq('namespace_id=2&path=test-project-path')
|
||||
select2('2', from: '#project_namespace_id')
|
||||
fill_in :project_path, with: 'test-project-path', visible: true
|
||||
click_link 'GitLab export'
|
||||
|
||||
attach_file('file', file)
|
||||
expect(page).to have_content('GitLab project export')
|
||||
expect(URI.parse(current_url).query).to eq('namespace_id=2&path=test-project-path')
|
||||
|
||||
click_on 'Import project' # import starts
|
||||
attach_file('file', file)
|
||||
|
||||
expect(project).not_to be_nil
|
||||
expect(project.issues).not_to be_empty
|
||||
expect(project.merge_requests).not_to be_empty
|
||||
expect(project_hook).to exist
|
||||
expect(wiki_exists?).to be true
|
||||
expect(project.import_status).to eq('finished')
|
||||
end
|
||||
click_on 'Import project' # import starts
|
||||
|
||||
scenario 'invalid project' do
|
||||
project = create(:project, namespace_id: 2)
|
||||
expect(project).not_to be_nil
|
||||
expect(project.issues).not_to be_empty
|
||||
expect(project.merge_requests).not_to be_empty
|
||||
expect(project_hook).to exist
|
||||
expect(wiki_exists?).to be true
|
||||
expect(project.import_status).to eq('finished')
|
||||
end
|
||||
|
||||
visit new_project_path
|
||||
scenario 'invalid project' do
|
||||
project = create(:project, namespace_id: 2)
|
||||
|
||||
select2('2', from: '#project_namespace_id')
|
||||
fill_in :project_path, with: project.name, visible: true
|
||||
click_link 'GitLab export'
|
||||
visit new_project_path
|
||||
|
||||
attach_file('file', file)
|
||||
click_on 'Import project'
|
||||
select2('2', from: '#project_namespace_id')
|
||||
fill_in :project_path, with: project.name, visible: true
|
||||
click_link 'GitLab export'
|
||||
|
||||
page.within('.flash-container') do
|
||||
expect(page).to have_content('Project could not be imported')
|
||||
attach_file('file', file)
|
||||
click_on 'Import project'
|
||||
|
||||
page.within('.flash-container') do
|
||||
expect(page).to have_content('Project could not be imported')
|
||||
end
|
||||
end
|
||||
|
||||
scenario 'project with no name' do
|
||||
create(:project, namespace_id: 2)
|
||||
|
||||
visit new_project_path
|
||||
|
||||
select2('2', from: '#project_namespace_id')
|
||||
|
||||
# click on disabled element
|
||||
find(:link, 'GitLab export').trigger('click')
|
||||
|
||||
page.within('.flash-container') do
|
||||
expect(page).to have_content('Please enter path and name')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
scenario 'project with no name' do
|
||||
create(:project, namespace_id: 2)
|
||||
context 'normal user' do
|
||||
before do
|
||||
login_as(normal_user)
|
||||
end
|
||||
|
||||
visit new_project_path
|
||||
scenario 'non-admin user is not allowed to import a project' do
|
||||
expect(Project.all.count).to be_zero
|
||||
|
||||
select2('2', from: '#project_namespace_id')
|
||||
visit new_project_path
|
||||
|
||||
# click on disabled element
|
||||
find(:link, 'GitLab export').trigger('click')
|
||||
fill_in :project_path, with: 'test-project-path', visible: true
|
||||
|
||||
page.within('.flash-container') do
|
||||
expect(page).to have_content('Please enter path and name')
|
||||
expect(page).not_to have_content('GitLab export')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue