Merge pull request #1016 from SaitoWu/feature/https

Feature/https
This commit is contained in:
Dmitriy Zaporozhets 2012-06-29 04:16:20 -07:00
commit 9eb019045a
5 changed files with 89 additions and 22 deletions

View file

@ -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 "omniauth-ldap", :git => "https://github.com/gitlabhq/omniauth-ldap.git", :ref => "7edf27d0281e09561838122982c16b7e62181f44"
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 "stamp"

View file

@ -13,6 +13,13 @@ GIT
grit (>= 2.4.1)
hashery (~> 1.4.0)
GIT
remote: https://github.com/gitlabhq/grack.git
revision: ba46f3b0845c6a09d488ae6abdce6ede37e227e8
specs:
grack (1.0.0)
rack (~> 1.4.1)
GIT
remote: https://github.com/gitlabhq/grit.git
revision: 7f35cb98ff17d534a07e3ce6ec3d580f67402837
@ -373,6 +380,7 @@ DEPENDENCIES
foreman
git
gitolite!
grack!
grit!
haml-rails
httparty

View file

@ -17,11 +17,15 @@ git_host:
base_path: /home/git/repositories/
host: localhost
git_user: git
upload_pack: true
receive_pack: true
# port: 22
# Git settings
# Use default values unless you understand it
git:
path: /usr/bin/git
# Max size of git object like commit, in bytes
# This value can be increased if you have a very large commits
git_max_size: 5242880 # 5.megabytes

View file

@ -0,0 +1,46 @@
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

View file

@ -8,6 +8,14 @@ Gitlab::Application.routes.draw do
require 'resque/server'
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
#
@ -20,15 +28,15 @@ Gitlab::Application.routes.draw do
# Admin Area
#
namespace :admin do
resources :users do
member do
resources :users do
member do
put :team_update
put :block
put :unblock
end
end
resources :projects, :constraints => { :id => /[^\/]+/ } do
member do
resources :projects, :constraints => { :id => /[^\/]+/ } do
member do
get :team
put :team_update
end
@ -79,12 +87,12 @@ Gitlab::Application.routes.draw do
resources :wikis, :only => [:show, :edit, :destroy, :create] do
member do
get "history"
get "history"
end
end
resource :repository do
member do
resource :repository do
member do
get "branches"
get "tags"
get "archive"
@ -94,14 +102,14 @@ Gitlab::Application.routes.draw do
resources :deploy_keys
resources :protected_branches, :only => [:index, :create, :destroy]
resources :refs, :only => [], :path => "/" do
collection do
resources :refs, :only => [], :path => "/" do
collection do
get "switch"
end
member do
member do
get "tree", :constraints => { :id => /[a-zA-Z.\/0-9_\-]+/ }
get "blob",
get "blob",
:constraints => {
:id => /[a-zA-Z.0-9\/_\-]+/,
:path => /.*/
@ -126,36 +134,36 @@ Gitlab::Application.routes.draw do
end
end
resources :merge_requests do
member do
resources :merge_requests do
member do
get :diffs
get :automerge
get :automerge_check
end
collection do
collection do
get :branch_from
get :branch_to
end
end
resources :snippets do
member do
resources :snippets do
member do
get "raw"
end
end
resources :hooks, :only => [:index, :create, :destroy] do
member do
resources :hooks, :only => [:index, :create, :destroy] do
member do
get :test
end
end
resources :commits do
collection do
resources :commits do
collection do
get :compare
end
member do
member do
get :patch
end
end