diff options
author | Dmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com> | 2012-02-22 09:14:54 +0400 |
---|---|---|
committer | Dmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com> | 2012-02-22 09:14:54 +0400 |
commit | 7d279f9302151e3c8f4c5df9c5200a72799409b9 (patch) | |
tree | b5ba2552f6e75e964de7d194c2b6a0b536363589 | |
parent | 9e6d0710e927aa8ea834b8a9ae9f277be617ac7d (diff) |
better error handling for not found resource, gitolite error
-rw-r--r-- | app/controllers/application_controller.rb | 23 | ||||
-rw-r--r-- | app/controllers/commits_controller.rb | 3 | ||||
-rw-r--r-- | app/controllers/errors_controller.rb | 4 | ||||
-rw-r--r-- | app/controllers/merge_requests_controller.rb | 2 | ||||
-rw-r--r-- | app/views/errors/access_denied.html.haml | 5 | ||||
-rw-r--r-- | app/views/errors/git_not_found.html.haml | 9 | ||||
-rw-r--r-- | app/views/errors/gitolite.html.haml | 18 | ||||
-rw-r--r-- | app/views/errors/not_found.html.haml | 5 | ||||
-rw-r--r-- | app/views/layouts/error.html.haml | 11 |
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 |