Commit 8db947bcfe2f3e988c995696f0fd24d9edfdc3b0
1 parent
7f44599e
Exists in
master
and in
4 other branches
implements protected branches to smart http protocal
Showing
1 changed file
with
19 additions
and
4 deletions
Show diff stats
config/initializers/grack_auth.rb
@@ -18,14 +18,29 @@ module Grack | @@ -18,14 +18,29 @@ module Grack | ||
18 | elsif @env['REQUEST_METHOD'] == 'POST' | 18 | elsif @env['REQUEST_METHOD'] == 'POST' |
19 | if @env['REQUEST_URI'].end_with?('git-upload-pack') | 19 | if @env['REQUEST_URI'].end_with?('git-upload-pack') |
20 | return project.dev_access_for?(user) | 20 | return project.dev_access_for?(user) |
21 | - elsif @env['REQUEST_URI'].end_with?('git-upload-pack') | ||
22 | - #TODO master branch protection | ||
23 | - return project.dev_access_for?(user) | 21 | + elsif @env['REQUEST_URI'].end_with?('git-receive-pack') |
22 | + if project.protected_branches.map(&:name).include?(current_ref) | ||
23 | + project.master_access_for?(user) | ||
24 | + else | ||
25 | + project.dev_access_for?(user) | ||
26 | + end | ||
24 | else | 27 | else |
25 | false | 28 | false |
26 | end | 29 | end |
30 | + else | ||
31 | + false | ||
27 | end | 32 | end |
28 | - | ||
29 | end# valid? | 33 | end# valid? |
34 | + | ||
35 | + def current_ref | ||
36 | + if @env["HTTP_CONTENT_ENCODING"] =~ /gzip/ | ||
37 | + input = Zlib::GzipReader.new(@request.body).string | ||
38 | + else | ||
39 | + input = @request.body.string | ||
40 | + end | ||
41 | + | ||
42 | + oldrev, newrev, ref = input.split(' ') | ||
43 | + /refs\/heads\/([\w-]+)/.match(ref).to_a.last | ||
44 | + end | ||
30 | end# Auth | 45 | end# Auth |
31 | end# Grack | 46 | end# Grack |