Commit 7560abb3 authored by Gabriel Mazetto's avatar Gabriel Mazetto

Prevent git push on secondary geo nodes.

parent 77456854
...@@ -113,6 +113,10 @@ module Gitlab ...@@ -113,6 +113,10 @@ module Gitlab
return build_status_object(false, "A repository for this project does not exist yet.") return build_status_object(false, "A repository for this project does not exist yet.")
end end
if Gitlab::Geo.enabled? && Gitlab::Geo.readonly?
return build_status_object(false, "You can't push code on a secondary Gitlab Geo node.")
end
if ::License.block_changes? if ::License.block_changes?
message = ::LicenseHelper.license_message(signed_in: true, is_admin: (user && user.is_admin?)) message = ::LicenseHelper.license_message(signed_in: true, is_admin: (user && user.is_admin?))
return build_status_object(false, message) return build_status_object(false, message)
......
module Gitlab module Gitlab
class GitAccessWiki < GitAccess class GitAccessWiki < GitAccess
def change_access_check(change) def change_access_check(change)
if user.can?(:create_wiki, project) if Gitlab::Geo.enabled? && Gitlab::Geo.readonly?
build_status_object(false, "You can't push code on a secondary Gitlab Geo node.")
elsif user.can?(:create_wiki, project)
build_status_object(true) build_status_object(true)
else else
build_status_object(false, "You are not allowed to write to this project's wiki.") build_status_object(false, "You are not allowed to write to this project's wiki.")
......
...@@ -249,6 +249,28 @@ describe Gitlab::GitAccess, lib: true do ...@@ -249,6 +249,28 @@ describe Gitlab::GitAccess, lib: true do
end end
end end
context "when in a readonly gitlab geo node" do
before do
allow(Gitlab::Geo).to receive(:enabled?) { true }
allow(Gitlab::Geo).to receive(:readonly?) { true }
end
permissions_matrix.keys.each do |role|
describe "#{role} access" do
before { protect_feature_branch }
before { project.team << [user, role] }
permissions_matrix[role].each do |action, allowed|
context action do
subject { access.push_access_check(changes[action]) }
it { expect(subject.allowed?).to be_falsey }
end
end
end
end
end
context "when using git annex" do context "when using git annex" do
before { project.team << [user, :master] } before { project.team << [user, :master] }
......
...@@ -4,8 +4,10 @@ describe Gitlab::GitAccessWiki, lib: true do ...@@ -4,8 +4,10 @@ describe Gitlab::GitAccessWiki, lib: true do
let(:access) { Gitlab::GitAccessWiki.new(user, project) } let(:access) { Gitlab::GitAccessWiki.new(user, project) }
let(:project) { create(:project) } let(:project) { create(:project) }
let(:user) { create(:user) } let(:user) { create(:user) }
let(:changes) { ['6f6d7e7ed 570e7b2ab refs/heads/master'] }
describe 'push_allowed?' do describe '#push_access_check' do
context 'when user can :create_wiki' do
before do before do
create(:protected_branch, name: 'master', project: project) create(:protected_branch, name: 'master', project: project)
project.team << [user, :developer] project.team << [user, :developer]
...@@ -14,9 +16,16 @@ describe Gitlab::GitAccessWiki, lib: true do ...@@ -14,9 +16,16 @@ describe Gitlab::GitAccessWiki, lib: true do
subject { access.push_access_check(changes) } subject { access.push_access_check(changes) }
it { expect(subject.allowed?).to be_truthy } it { expect(subject.allowed?).to be_truthy }
context 'when in a readonly gitlab geo node' do
before do
allow(Gitlab::Geo).to receive(:enabled?) { true }
allow(Gitlab::Geo).to receive(:readonly?) { true }
end
it { expect(subject.allowed?).to be_falsey }
end
end end
def changes
['6f6d7e7ed 570e7b2ab refs/heads/master']
end end
end end
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