OSDN Git Service

Allow git clone with http for GitLab CI service:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 24 Oct 2013 14:17:22 +0000 (17:17 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 24 Oct 2013 14:17:22 +0000 (17:17 +0300)
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

lib/gitlab/backend/grack_auth.rb

index c522e0a..e09cf31 100644 (file)
@@ -38,6 +38,16 @@ module Grack
         # Authentication with username and password
         login, password = @auth.credentials
 
+        # Allow authentication for GitLab CI service
+        # if valid token passed
+        if login == "gitlab-ci-token" && project.gitlab_ci?
+          token = project.gitlab_ci_service.token
+
+          if token.present? && token == password && service_name == 'git-upload-pack'
+            return @app.call(env)
+          end
+        end
+
         @user = authenticate_user(login, password)
 
         if @user
@@ -59,14 +69,7 @@ module Grack
     end
 
     def authorized_git_request?
-      # Git upload and receive
-      if @request.get?
-        authorize_request(@request.params['service'])
-      elsif @request.post?
-        authorize_request(File.basename(@request.path))
-      else
-        false
-      end
+      authorize_request(service_name)
     end
 
     def authenticate_user(login, password)
@@ -91,6 +94,16 @@ module Grack
       end
     end
 
+    def service_name
+      if @request.get?
+        @request.params['service']
+      elsif @request.post?
+        File.basename(@request.path)
+      else
+        nil
+      end
+    end
+
     def project
       @project ||= project_by_path(@request.path_info)
     end