Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>2012-02-22 09:14:54 +0400
committerDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>2012-02-22 09:14:54 +0400
commit7d279f9302151e3c8f4c5df9c5200a72799409b9 (patch)
treeb5ba2552f6e75e964de7d194c2b6a0b536363589
parent9e6d0710e927aa8ea834b8a9ae9f277be617ac7d (diff)
better error handling for not found resource, gitolite error
-rw-r--r--app/controllers/application_controller.rb23
-rw-r--r--app/controllers/commits_controller.rb3
-rw-r--r--app/controllers/errors_controller.rb4
-rw-r--r--app/controllers/merge_requests_controller.rb2
-rw-r--r--app/views/errors/access_denied.html.haml5
-rw-r--r--app/views/errors/git_not_found.html.haml9
-rw-r--r--app/views/errors/gitolite.html.haml18
-rw-r--r--app/views/errors/not_found.html.haml5
-rw-r--r--app/views/layouts/error.html.haml11
9 files changed, 73 insertions, 7 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index ee2240b2f0f..074a1cfdf13 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -5,7 +5,11 @@ class ApplicationController < ActionController::Base
helper_method :abilities, :can?
rescue_from Gitlabhq::Gitolite::AccessDenied do |exception|
- render :file => File.join(Rails.root, "public", "githost_error"), :layout => false
+ render "errors/gitolite", :layout => "error"
+ end
+
+ rescue_from ActiveRecord::RecordNotFound do |exception|
+ render "errors/not_found", :layout => "error"
end
layout :layout_by_resource
@@ -33,7 +37,8 @@ class ApplicationController < ActionController::Base
end
def project
- @project ||= Project.find_by_code(params[:project_id])
+ @project ||= current_user.projects.find_by_code(params[:project_id])
+ @project || render_404
end
def add_project_abilities
@@ -45,15 +50,23 @@ class ApplicationController < ActionController::Base
end
def authorize_project!(action)
- return render_404 unless can?(current_user, action, project)
+ return access_denied! unless can?(current_user, action, project)
end
def authorize_code_access!
- return render_404 unless can?(current_user, :download_code, project)
+ return access_denied! unless can?(current_user, :download_code, project)
end
def access_denied!
- render_404
+ render "errors/access_denied", :layout => "error"
+ end
+
+ def not_found!
+ render "errors/not_found", :layout => "error"
+ end
+
+ def git_not_found!
+ render "errors/git_not_found", :layout => "error"
end
def method_missing(method_sym, *arguments, &block)
diff --git a/app/controllers/commits_controller.rb b/app/controllers/commits_controller.rb
index 0b976fa8a2c..5ddce3c0df8 100644
--- a/app/controllers/commits_controller.rb
+++ b/app/controllers/commits_controller.rb
@@ -26,6 +26,9 @@ class CommitsController < ApplicationController
def show
@commit = project.commit(params[:id])
+
+ git_not_found! and return unless @commit
+
@notes = project.commit_notes(@commit).fresh.limit(20)
@note = @project.build_commit_note(@commit)
diff --git a/app/controllers/errors_controller.rb b/app/controllers/errors_controller.rb
index 3ef7aa46441..9f60c64590e 100644
--- a/app/controllers/errors_controller.rb
+++ b/app/controllers/errors_controller.rb
@@ -1,5 +1,7 @@
class ErrorsController < ApplicationController
+ layout "error"
+
def githost
- render :file => File.join(Rails.root, "public", "githost_error"), :layout => false
+ render "errors/gitolite"
end
end
diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb
index fa2e73291e0..6c9cc0cfee7 100644
--- a/app/controllers/merge_requests_controller.rb
+++ b/app/controllers/merge_requests_controller.rb
@@ -36,7 +36,7 @@ class MergeRequestsController < ApplicationController
def show
unless @project.repo.heads.map(&:name).include?(@merge_request.target_branch) &&
@project.repo.heads.map(&:name).include?(@merge_request.source_branch)
- head(404)and return
+ git_not_found! and return
end
@notes = @merge_request.notes.inc_author.order("created_at DESC").limit(20)
diff --git a/app/views/errors/access_denied.html.haml b/app/views/errors/access_denied.html.haml
new file mode 100644
index 00000000000..2f3f362643b
--- /dev/null
+++ b/app/views/errors/access_denied.html.haml
@@ -0,0 +1,5 @@
+.alert-message.block-message.error
+ %h3 Access Denied
+ %hr
+ %p Youre not allowed to access this page
+ %p Ream more about project permissions #{link_to "here", help_permissions_path, :class => "vlink"}
diff --git a/app/views/errors/git_not_found.html.haml b/app/views/errors/git_not_found.html.haml
new file mode 100644
index 00000000000..172bd4e678a
--- /dev/null
+++ b/app/views/errors/git_not_found.html.haml
@@ -0,0 +1,9 @@
+.alert-message.block-message.error
+ %h3 Git Resource Not found
+ %hr
+ %p
+ Application cant get access to some
+ %span.label branch
+ or
+ %span.label commit
+ in your repository. Maybe it was moved
diff --git a/app/views/errors/gitolite.html.haml b/app/views/errors/gitolite.html.haml
new file mode 100644
index 00000000000..41d7d83a1c9
--- /dev/null
+++ b/app/views/errors/gitolite.html.haml
@@ -0,0 +1,18 @@
+.alert-message.block-message.error
+ %h3 Gitolite Error
+ %hr
+ %h4 Application cant get access to your gitolite system.
+ %ol
+ %li
+ %p
+ Check 'config/gitlab.yml' for correct settings.
+ %li
+ %p
+ Make sure web server user has access to gitolite.
+ %a{:href => "https://github.com/gitlabhq/gitlabhq/wiki/Gitolite"} Setup tutorial
+ %li
+ %p
+ Try:
+ %pre
+ sudo chmod -R 770 /home/git/repositories/
+ sudo chown -R git:git /home/git/repositories/
diff --git a/app/views/errors/not_found.html.haml b/app/views/errors/not_found.html.haml
new file mode 100644
index 00000000000..9b76a9bf908
--- /dev/null
+++ b/app/views/errors/not_found.html.haml
@@ -0,0 +1,5 @@
+.alert-message.block-message.error
+ %h3 Not found
+ %hr
+ %p Resource you were looking for doesn't exist.
+ %P You may have mistyped the address or it was removed.
diff --git a/app/views/layouts/error.html.haml b/app/views/layouts/error.html.haml
new file mode 100644
index 00000000000..35de9cef727
--- /dev/null
+++ b/app/views/layouts/error.html.haml
@@ -0,0 +1,11 @@
+!!! 5
+%html{ :lang => "en"}
+ = render "layouts/head"
+ %body.application
+ = render "layouts/flash"
+ = render "layouts/head_panel", :title => ""
+ .container
+ %nav.main_menu
+ = render "layouts/const_menu_links"
+ .content
+ %h3= yield