Commit 7d279f9302151e3c8f4c5df9c5200a72799409b9
1 parent
9e6d0710
Exists in
master
and in
4 other branches
better error handling for not found resource, gitolite error
Showing
9 changed files
with
73 additions
and
7 deletions
Show diff stats
app/controllers/application_controller.rb
@@ -5,7 +5,11 @@ class ApplicationController < ActionController::Base | @@ -5,7 +5,11 @@ class ApplicationController < ActionController::Base | ||
5 | helper_method :abilities, :can? | 5 | helper_method :abilities, :can? |
6 | 6 | ||
7 | rescue_from Gitlabhq::Gitolite::AccessDenied do |exception| | 7 | rescue_from Gitlabhq::Gitolite::AccessDenied do |exception| |
8 | - render :file => File.join(Rails.root, "public", "githost_error"), :layout => false | 8 | + render "errors/gitolite", :layout => "error" |
9 | + end | ||
10 | + | ||
11 | + rescue_from ActiveRecord::RecordNotFound do |exception| | ||
12 | + render "errors/not_found", :layout => "error" | ||
9 | end | 13 | end |
10 | 14 | ||
11 | layout :layout_by_resource | 15 | layout :layout_by_resource |
@@ -33,7 +37,8 @@ class ApplicationController < ActionController::Base | @@ -33,7 +37,8 @@ class ApplicationController < ActionController::Base | ||
33 | end | 37 | end |
34 | 38 | ||
35 | def project | 39 | def project |
36 | - @project ||= Project.find_by_code(params[:project_id]) | 40 | + @project ||= current_user.projects.find_by_code(params[:project_id]) |
41 | + @project || render_404 | ||
37 | end | 42 | end |
38 | 43 | ||
39 | def add_project_abilities | 44 | def add_project_abilities |
@@ -45,15 +50,23 @@ class ApplicationController < ActionController::Base | @@ -45,15 +50,23 @@ class ApplicationController < ActionController::Base | ||
45 | end | 50 | end |
46 | 51 | ||
47 | def authorize_project!(action) | 52 | def authorize_project!(action) |
48 | - return render_404 unless can?(current_user, action, project) | 53 | + return access_denied! unless can?(current_user, action, project) |
49 | end | 54 | end |
50 | 55 | ||
51 | def authorize_code_access! | 56 | def authorize_code_access! |
52 | - return render_404 unless can?(current_user, :download_code, project) | 57 | + return access_denied! unless can?(current_user, :download_code, project) |
53 | end | 58 | end |
54 | 59 | ||
55 | def access_denied! | 60 | def access_denied! |
56 | - render_404 | 61 | + render "errors/access_denied", :layout => "error" |
62 | + end | ||
63 | + | ||
64 | + def not_found! | ||
65 | + render "errors/not_found", :layout => "error" | ||
66 | + end | ||
67 | + | ||
68 | + def git_not_found! | ||
69 | + render "errors/git_not_found", :layout => "error" | ||
57 | end | 70 | end |
58 | 71 | ||
59 | def method_missing(method_sym, *arguments, &block) | 72 | def method_missing(method_sym, *arguments, &block) |
app/controllers/commits_controller.rb
@@ -26,6 +26,9 @@ class CommitsController < ApplicationController | @@ -26,6 +26,9 @@ class CommitsController < ApplicationController | ||
26 | 26 | ||
27 | def show | 27 | def show |
28 | @commit = project.commit(params[:id]) | 28 | @commit = project.commit(params[:id]) |
29 | + | ||
30 | + git_not_found! and return unless @commit | ||
31 | + | ||
29 | @notes = project.commit_notes(@commit).fresh.limit(20) | 32 | @notes = project.commit_notes(@commit).fresh.limit(20) |
30 | @note = @project.build_commit_note(@commit) | 33 | @note = @project.build_commit_note(@commit) |
31 | 34 |
app/controllers/errors_controller.rb
app/controllers/merge_requests_controller.rb
@@ -36,7 +36,7 @@ class MergeRequestsController < ApplicationController | @@ -36,7 +36,7 @@ class MergeRequestsController < ApplicationController | ||
36 | def show | 36 | def show |
37 | unless @project.repo.heads.map(&:name).include?(@merge_request.target_branch) && | 37 | unless @project.repo.heads.map(&:name).include?(@merge_request.target_branch) && |
38 | @project.repo.heads.map(&:name).include?(@merge_request.source_branch) | 38 | @project.repo.heads.map(&:name).include?(@merge_request.source_branch) |
39 | - head(404)and return | 39 | + git_not_found! and return |
40 | end | 40 | end |
41 | 41 | ||
42 | @notes = @merge_request.notes.inc_author.order("created_at DESC").limit(20) | 42 | @notes = @merge_request.notes.inc_author.order("created_at DESC").limit(20) |
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +.alert-message.block-message.error | ||
2 | + %h3 Gitolite Error | ||
3 | + %hr | ||
4 | + %h4 Application cant get access to your gitolite system. | ||
5 | + %ol | ||
6 | + %li | ||
7 | + %p | ||
8 | + Check 'config/gitlab.yml' for correct settings. | ||
9 | + %li | ||
10 | + %p | ||
11 | + Make sure web server user has access to gitolite. | ||
12 | + %a{:href => "https://github.com/gitlabhq/gitlabhq/wiki/Gitolite"} Setup tutorial | ||
13 | + %li | ||
14 | + %p | ||
15 | + Try: | ||
16 | + %pre | ||
17 | + sudo chmod -R 770 /home/git/repositories/ | ||
18 | + sudo chown -R git:git /home/git/repositories/ |