Commit ec9e54ea authored by gitlabhq's avatar gitlabhq

gitosis error handle

parent d7ea9052
......@@ -4,6 +4,10 @@ class ApplicationController < ActionController::Base
helper_method :abilities, :can?
rescue_from Gitosis::AccessDenied do |exception|
render :file => File.join(Rails.root, "public", "gitosis_error"), :layout => false
end
protected
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
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
rescue Gitosis::AccessDenied
render :js => "location.href = '#{errors_gitosis_path}'" and return
rescue StandardError => ex
@project.errors.add(:base, "Cant save project. Please try again later")
respond_to do |format|
......
......@@ -16,7 +16,7 @@ module Gitlab
# -- all .rb files in that directory are automatically loaded.
# 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).
# :all can be used as a placeholder for all plugins not explicitly named.
......
......@@ -10,6 +10,7 @@ Gitlab::Application.routes.draw do
root :to => "users#index"
end
get "errors/gitosis"
get "profile/password", :to => "profile#password"
put "profile/password", :to => "profile#password_update"
get "profile", :to => "profile#show"
......
require 'inifile'
require 'timeout'
class Gitosis
class AccessDenied < StandardError; end
def pull
# create tmp dir
......@@ -20,15 +21,19 @@ class Gitosis
end
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)
pull
yield(self)
push
f.flock(File::LOCK_UN)
end
end
}
rescue Exception => ex
raise Gitosis::AccessDenied.new("gitosis timeout")
end
def destroy_project(project)
......@@ -51,7 +56,7 @@ class Gitosis
`cd #{File.join(@local_dir,'gitosis')} ; git rm keydir/#{user}.pub`
end
#update or create
#update or create
def update_project(repo_name, name_writers)
# write config file
conf = IniFile.new(File.join(@local_dir,'gitosis','gitosis.conf'))
......@@ -61,5 +66,4 @@ class Gitosis
conf.write
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