Commit d2cec12632079e07ff40876e7c6ecd4c21418dc3
1 parent
9c2a6e20
Exists in
master
and in
4 other branches
block user should not be able to push
Showing
2 changed files
with
52 additions
and
28 deletions
Show diff stats
lib/api/internal.rb
@@ -20,6 +20,9 @@ module Gitlab | @@ -20,6 +20,9 @@ module Gitlab | ||
20 | project == key.project && git_cmd == 'git-upload-pack' | 20 | project == key.project && git_cmd == 'git-upload-pack' |
21 | else | 21 | else |
22 | user = key.user | 22 | user = key.user |
23 | + | ||
24 | + return false if user.blocked? | ||
25 | + | ||
23 | action = case git_cmd | 26 | action = case git_cmd |
24 | when 'git-upload-pack' | 27 | when 'git-upload-pack' |
25 | then :download_code | 28 | then :download_code |
spec/requests/api/internal_spec.rb
@@ -34,13 +34,7 @@ describe Gitlab::API do | @@ -34,13 +34,7 @@ describe Gitlab::API do | ||
34 | 34 | ||
35 | context "git pull" do | 35 | context "git pull" do |
36 | it do | 36 | it do |
37 | - get( | ||
38 | - api("/internal/allowed"), | ||
39 | - ref: 'master', | ||
40 | - key_id: key.id, | ||
41 | - project: project.path_with_namespace, | ||
42 | - action: 'git-upload-pack' | ||
43 | - ) | 37 | + pull(key, project) |
44 | 38 | ||
45 | response.status.should == 200 | 39 | response.status.should == 200 |
46 | response.body.should == 'true' | 40 | response.body.should == 'true' |
@@ -49,13 +43,7 @@ describe Gitlab::API do | @@ -49,13 +43,7 @@ describe Gitlab::API do | ||
49 | 43 | ||
50 | context "git push" do | 44 | context "git push" do |
51 | it do | 45 | it do |
52 | - get( | ||
53 | - api("/internal/allowed"), | ||
54 | - ref: 'master', | ||
55 | - key_id: key.id, | ||
56 | - project: project.path_with_namespace, | ||
57 | - action: 'git-receive-pack' | ||
58 | - ) | 46 | + push(key, project) |
59 | 47 | ||
60 | response.status.should == 200 | 48 | response.status.should == 200 |
61 | response.body.should == 'true' | 49 | response.body.should == 'true' |
@@ -70,13 +58,7 @@ describe Gitlab::API do | @@ -70,13 +58,7 @@ describe Gitlab::API do | ||
70 | 58 | ||
71 | context "git pull" do | 59 | context "git pull" do |
72 | it do | 60 | it do |
73 | - get( | ||
74 | - api("/internal/allowed"), | ||
75 | - ref: 'master', | ||
76 | - key_id: key.id, | ||
77 | - project: project.path_with_namespace, | ||
78 | - action: 'git-upload-pack' | ||
79 | - ) | 61 | + pull(key, project) |
80 | 62 | ||
81 | response.status.should == 200 | 63 | response.status.should == 200 |
82 | response.body.should == 'false' | 64 | response.body.should == 'false' |
@@ -85,13 +67,7 @@ describe Gitlab::API do | @@ -85,13 +67,7 @@ describe Gitlab::API do | ||
85 | 67 | ||
86 | context "git push" do | 68 | context "git push" do |
87 | it do | 69 | it do |
88 | - get( | ||
89 | - api("/internal/allowed"), | ||
90 | - ref: 'master', | ||
91 | - key_id: key.id, | ||
92 | - project: project.path_with_namespace, | ||
93 | - action: 'git-receive-pack' | ||
94 | - ) | 70 | + push(key, project) |
95 | 71 | ||
96 | response.status.should == 200 | 72 | response.status.should == 200 |
97 | response.body.should == 'false' | 73 | response.body.should == 'false' |
@@ -99,5 +75,50 @@ describe Gitlab::API do | @@ -99,5 +75,50 @@ describe Gitlab::API do | ||
99 | end | 75 | end |
100 | end | 76 | end |
101 | 77 | ||
78 | + context "blocked user" do | ||
79 | + let(:personal_project) { create(:project, namespace: user.namespace) } | ||
80 | + | ||
81 | + before do | ||
82 | + user.block | ||
83 | + end | ||
84 | + | ||
85 | + context "git pull" do | ||
86 | + it do | ||
87 | + pull(key, personal_project) | ||
88 | + | ||
89 | + response.status.should == 200 | ||
90 | + response.body.should == 'false' | ||
91 | + end | ||
92 | + end | ||
93 | + | ||
94 | + context "git push" do | ||
95 | + it do | ||
96 | + push(key, personal_project) | ||
97 | + | ||
98 | + response.status.should == 200 | ||
99 | + response.body.should == 'false' | ||
100 | + end | ||
101 | + end | ||
102 | + end | ||
103 | + end | ||
104 | + | ||
105 | + def pull(key, project) | ||
106 | + get( | ||
107 | + api("/internal/allowed"), | ||
108 | + ref: 'master', | ||
109 | + key_id: key.id, | ||
110 | + project: project.path_with_namespace, | ||
111 | + action: 'git-upload-pack' | ||
112 | + ) | ||
113 | + end | ||
114 | + | ||
115 | + def push(key, project) | ||
116 | + get( | ||
117 | + api("/internal/allowed"), | ||
118 | + ref: 'master', | ||
119 | + key_id: key.id, | ||
120 | + project: project.path_with_namespace, | ||
121 | + action: 'git-receive-pack' | ||
122 | + ) | ||
102 | end | 123 | end |
103 | end | 124 | end |