Commit 9eb01904 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge pull request #1016 from SaitoWu/feature/https

Feature/https
parents 3a4aff69 1df1daa1
...@@ -15,6 +15,7 @@ gem "gitolite", :git => "https://github.com/gitlabhq/gitolite-client.git", ...@@ -15,6 +15,7 @@ gem "gitolite", :git => "https://github.com/gitlabhq/gitolite-client.git",
gem "pygments.rb", :git => "https://github.com/gitlabhq/pygments.rb.git", :ref => "2cada028da5054616634a1d9ca6941b65b3ce188" gem "pygments.rb", :git => "https://github.com/gitlabhq/pygments.rb.git", :ref => "2cada028da5054616634a1d9ca6941b65b3ce188"
gem "omniauth-ldap", :git => "https://github.com/gitlabhq/omniauth-ldap.git", :ref => "7edf27d0281e09561838122982c16b7e62181f44" gem "omniauth-ldap", :git => "https://github.com/gitlabhq/omniauth-ldap.git", :ref => "7edf27d0281e09561838122982c16b7e62181f44"
gem 'yaml_db', :git => "https://github.com/gitlabhq/yaml_db.git" gem 'yaml_db', :git => "https://github.com/gitlabhq/yaml_db.git"
gem 'grack', :git => "https://github.com/gitlabhq/grack.git"
gem "linguist", "~> 1.0.0", :git => "https://github.com/gitlabhq/linguist.git" gem "linguist", "~> 1.0.0", :git => "https://github.com/gitlabhq/linguist.git"
gem "stamp" gem "stamp"
......
...@@ -13,6 +13,13 @@ GIT ...@@ -13,6 +13,13 @@ GIT
grit (>= 2.4.1) grit (>= 2.4.1)
hashery (~> 1.4.0) hashery (~> 1.4.0)
GIT
remote: https://github.com/gitlabhq/grack.git
revision: ba46f3b0845c6a09d488ae6abdce6ede37e227e8
specs:
grack (1.0.0)
rack (~> 1.4.1)
GIT GIT
remote: https://github.com/gitlabhq/grit.git remote: https://github.com/gitlabhq/grit.git
revision: 7f35cb98ff17d534a07e3ce6ec3d580f67402837 revision: 7f35cb98ff17d534a07e3ce6ec3d580f67402837
...@@ -373,6 +380,7 @@ DEPENDENCIES ...@@ -373,6 +380,7 @@ DEPENDENCIES
foreman foreman
git git
gitolite! gitolite!
grack!
grit! grit!
haml-rails haml-rails
httparty httparty
......
...@@ -17,11 +17,15 @@ git_host: ...@@ -17,11 +17,15 @@ git_host:
base_path: /home/git/repositories/ base_path: /home/git/repositories/
host: localhost host: localhost
git_user: git git_user: git
upload_pack: true
receive_pack: true
# port: 22 # port: 22
# Git settings # Git settings
# Use default values unless you understand it # Use default values unless you understand it
git: git:
path: /usr/bin/git
# Max size of git object like commit, in bytes # Max size of git object like commit, in bytes
# This value can be increased if you have a very large commits # This value can be increased if you have a very large commits
git_max_size: 5242880 # 5.megabytes git_max_size: 5242880 # 5.megabytes
......
module Grack
class Auth < Rack::Auth::Basic
def valid?
# Authentication with username and password
email, password = @auth.credentials
user = User.find_by_email(email)
return false unless user.valid_password?(password)
# Find project by PATH_INFO from env
if m = /^\/([\w-]+).git/.match(@env['PATH_INFO']).to_a
return false unless project = Project.find_by_path(m.last)
end
# Git upload and receive
if @env['REQUEST_METHOD'] == 'GET'
true
elsif @env['REQUEST_METHOD'] == 'POST'
if @env['REQUEST_URI'].end_with?('git-upload-pack')
return project.dev_access_for?(user)
elsif @env['REQUEST_URI'].end_with?('git-receive-pack')
if project.protected_branches.map(&:name).include?(current_ref)
project.master_access_for?(user)
else
project.dev_access_for?(user)
end
else
false
end
else
false
end
end# valid?
def current_ref
if @env["HTTP_CONTENT_ENCODING"] =~ /gzip/
input = Zlib::GzipReader.new(@request.body).string
else
input = @request.body.string
end
oldrev, newrev, ref = input.split(' ')
/refs\/heads\/([\w-]+)/.match(ref).to_a.last
end
end# Auth
end# Grack
...@@ -8,6 +8,14 @@ Gitlab::Application.routes.draw do ...@@ -8,6 +8,14 @@ Gitlab::Application.routes.draw do
require 'resque/server' require 'resque/server'
mount Resque::Server.new, at: '/info/resque' mount Resque::Server.new, at: '/info/resque'
# Enable Grack support
mount Grack::Bundle.new({
git_path: GIT_OPTS['path'],
project_root: GIT_HOST['base_path'],
upload_pack: GIT_HOST['upload_pack'],
receive_pack: GIT_HOST['receive_pack']
}), at: '/git'
# #
# Help # Help
# #
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment