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 |