Commit 7f44599ed0ddb1e01395f41e5f4bec869c2238e6
1 parent
86807b8e
Exists in
master
and in
4 other branches
integrate with gitlabhq authority
Showing
2 changed files
with
28 additions
and
5 deletions
Show diff stats
Gemfile.lock
| 1 | GIT | 1 | GIT |
| 2 | remote: https://github.com/SaitoWu/grack.git | 2 | remote: https://github.com/SaitoWu/grack.git |
| 3 | - revision: dd990d231ac9189046b71a65d874638e55320e27 | 3 | + revision: ba46f3b0845c6a09d488ae6abdce6ede37e227e8 |
| 4 | specs: | 4 | specs: |
| 5 | grack (1.0.0) | 5 | grack (1.0.0) |
| 6 | rack (~> 1.4.1) | 6 | rack (~> 1.4.1) |
config/initializers/grack_auth.rb
| @@ -2,7 +2,30 @@ module Grack | @@ -2,7 +2,30 @@ module Grack | ||
| 2 | class Auth < Rack::Auth::Basic | 2 | class Auth < Rack::Auth::Basic |
| 3 | 3 | ||
| 4 | def valid? | 4 | def valid? |
| 5 | - true | ||
| 6 | - end | ||
| 7 | - end | ||
| 8 | -end | 5 | + # Authentication with username and password |
| 6 | + email, password = @auth.credentials | ||
| 7 | + user = User.find_by_email(email) | ||
| 8 | + return false unless user.valid_password?(password) | ||
| 9 | + | ||
| 10 | + # Find project by PATH_INFO from env | ||
| 11 | + if m = /^\/([\w-]+).git/.match(@env['PATH_INFO']).to_a | ||
| 12 | + return false unless project = Project.find_by_path(m.last) | ||
| 13 | + end | ||
| 14 | + | ||
| 15 | + # Git upload and receive | ||
| 16 | + if @env['REQUEST_METHOD'] == 'GET' | ||
| 17 | + true | ||
| 18 | + elsif @env['REQUEST_METHOD'] == 'POST' | ||
| 19 | + if @env['REQUEST_URI'].end_with?('git-upload-pack') | ||
| 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) | ||
| 24 | + else | ||
| 25 | + false | ||
| 26 | + end | ||
| 27 | + end | ||
| 28 | + | ||
| 29 | + end# valid? | ||
| 30 | + end# Auth | ||
| 31 | +end# Grack |