Commit 0542261437fd9df7539fe480069449b566057300
1 parent
71f92d45
Exists in
master
and in
4 other branches
Allow git clone with http for GitLab CI service:
If you enable GitLab CI for project you will be able to clone project source code with next command: git clone http://gitlab-ci-token:XXXXXXXXXXXX@host:project.git Requires for GitLab CI 4.0
Showing
1 changed file
with
21 additions
and
8 deletions
Show diff stats
lib/gitlab/backend/grack_auth.rb
| ... | ... | @@ -38,6 +38,16 @@ module Grack |
| 38 | 38 | # Authentication with username and password |
| 39 | 39 | login, password = @auth.credentials |
| 40 | 40 | |
| 41 | + # Allow authentication for GitLab CI service | |
| 42 | + # if valid token passed | |
| 43 | + if login == "gitlab-ci-token" && project.gitlab_ci? | |
| 44 | + token = project.gitlab_ci_service.token | |
| 45 | + | |
| 46 | + if token.present? && token == password && service_name == 'git-upload-pack' | |
| 47 | + return @app.call(env) | |
| 48 | + end | |
| 49 | + end | |
| 50 | + | |
| 41 | 51 | @user = authenticate_user(login, password) |
| 42 | 52 | |
| 43 | 53 | if @user |
| ... | ... | @@ -59,14 +69,7 @@ module Grack |
| 59 | 69 | end |
| 60 | 70 | |
| 61 | 71 | def authorized_git_request? |
| 62 | - # Git upload and receive | |
| 63 | - if @request.get? | |
| 64 | - authorize_request(@request.params['service']) | |
| 65 | - elsif @request.post? | |
| 66 | - authorize_request(File.basename(@request.path)) | |
| 67 | - else | |
| 68 | - false | |
| 69 | - end | |
| 72 | + authorize_request(service_name) | |
| 70 | 73 | end |
| 71 | 74 | |
| 72 | 75 | def authenticate_user(login, password) |
| ... | ... | @@ -91,6 +94,16 @@ module Grack |
| 91 | 94 | end |
| 92 | 95 | end |
| 93 | 96 | |
| 97 | + def service_name | |
| 98 | + if @request.get? | |
| 99 | + @request.params['service'] | |
| 100 | + elsif @request.post? | |
| 101 | + File.basename(@request.path) | |
| 102 | + else | |
| 103 | + nil | |
| 104 | + end | |
| 105 | + end | |
| 106 | + | |
| 94 | 107 | def project |
| 95 | 108 | @project ||= project_by_path(@request.path_info) |
| 96 | 109 | end | ... | ... |