Commit ec9e54ea authored by gitlabhq's avatar gitlabhq

gitosis error handle

parent d7ea9052
...@@ -4,6 +4,10 @@ class ApplicationController < ActionController::Base ...@@ -4,6 +4,10 @@ class ApplicationController < ActionController::Base
helper_method :abilities, :can? helper_method :abilities, :can?
rescue_from Gitosis::AccessDenied do |exception|
render :file => File.join(Rails.root, "public", "gitosis_error"), :layout => false
end
protected protected
def abilities def abilities
......
class ErrorsController < ApplicationController
def gitosis
render :file => File.join(Rails.root, "public", "gitosis_error"), :layout => false
end
end
...@@ -105,6 +105,8 @@ class ProjectsController < ApplicationController ...@@ -105,6 +105,8 @@ class ProjectsController < ApplicationController
format.json { render json: @project.errors, status: :unprocessable_entity } format.json { render json: @project.errors, status: :unprocessable_entity }
end end
end end
rescue Gitosis::AccessDenied
render :js => "location.href = '#{errors_gitosis_path}'" and return
rescue StandardError => ex rescue StandardError => ex
@project.errors.add(:base, "Cant save project. Please try again later") @project.errors.add(:base, "Cant save project. Please try again later")
respond_to do |format| respond_to do |format|
......
...@@ -16,7 +16,7 @@ module Gitlab ...@@ -16,7 +16,7 @@ module Gitlab
# -- all .rb files in that directory are automatically loaded. # -- all .rb files in that directory are automatically loaded.
# Custom directories with classes and modules you want to be autoloadable. # Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/extras) config.autoload_paths += %W(#{config.root}/lib)
# Only load the plugins named here, in the order given (default is alphabetical). # Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named. # :all can be used as a placeholder for all plugins not explicitly named.
......
...@@ -10,6 +10,7 @@ Gitlab::Application.routes.draw do ...@@ -10,6 +10,7 @@ Gitlab::Application.routes.draw do
root :to => "users#index" root :to => "users#index"
end end
get "errors/gitosis"
get "profile/password", :to => "profile#password" get "profile/password", :to => "profile#password"
put "profile/password", :to => "profile#password_update" put "profile/password", :to => "profile#password_update"
get "profile", :to => "profile#show" get "profile", :to => "profile#show"
......
require 'inifile' require 'inifile'
require 'timeout'
class Gitosis class Gitosis
class AccessDenied < StandardError; end
def pull def pull
# create tmp dir # create tmp dir
...@@ -20,15 +21,19 @@ class Gitosis ...@@ -20,15 +21,19 @@ class Gitosis
end end
def configure def configure
File.open(File.join(Dir.tmpdir,"gitme-gitosis.lock"), "w+") do |f| status = Timeout::timeout(5) {
File.open(File.join(Dir.tmpdir,"gitme-gitosis.lock"), "w+") do |f|
f.flock(File::LOCK_EX) f.flock(File::LOCK_EX)
pull pull
yield(self) yield(self)
push push
f.flock(File::LOCK_UN) f.flock(File::LOCK_UN)
end end
}
rescue Exception => ex
raise Gitosis::AccessDenied.new("gitosis timeout")
end end
def destroy_project(project) def destroy_project(project)
...@@ -51,7 +56,7 @@ class Gitosis ...@@ -51,7 +56,7 @@ class Gitosis
`cd #{File.join(@local_dir,'gitosis')} ; git rm keydir/#{user}.pub` `cd #{File.join(@local_dir,'gitosis')} ; git rm keydir/#{user}.pub`
end end
#update or create #update or create
def update_project(repo_name, name_writers) def update_project(repo_name, name_writers)
# write config file # write config file
conf = IniFile.new(File.join(@local_dir,'gitosis','gitosis.conf')) conf = IniFile.new(File.join(@local_dir,'gitosis','gitosis.conf'))
...@@ -61,5 +66,4 @@ class Gitosis ...@@ -61,5 +66,4 @@ class Gitosis
conf.write conf.write
end end
end end
<!DOCTYPE html>
<html>
<head>
<title>We're sorry, but we cant get access to your gitosis</title>
<style type="text/css">
body { background-color: #EAEAEA; color: #666; text-align: center; font-family: arial, sans-serif; }
div.dialog {
width: 600px;
padding: 0 4em;
margin: 4em auto 0 auto;
}
h1 { font-size: 48px; color: #444; line-height: 1.5em; }
h2 { font-size: 24px; color: #666; line-height: 1.5em; }
</style>
</head>
<body>
<!-- This file lives in public/500.html -->
<div class="dialog">
<h1>Gitosis Error</h1>
<h2>We're sorry, but we cant get access to your gitosis.</h2>
<h3> 1. Check 'config/gitosis.yml' for correct settings.</h3>
<h3> 2. Be sure web server user has access to gitosis.</h3>
</div>
</body>
</html>
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