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 | 18 | elsif @env['REQUEST_METHOD'] == 'POST' |
| 19 | 19 | if @env['REQUEST_URI'].end_with?('git-upload-pack') |
| 20 | 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 | 27 | else |
| 25 | 28 | false |
| 26 | 29 | end |
| 30 | + else | |
| 31 | + false | |
| 27 | 32 | end |
| 28 | - | |
| 29 | 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 | 45 | end# Auth |
| 31 | 46 | end# Grack | ... | ... |