Commit c099074fcc96304d948cc028ff7ae5913b561ed3

Authored by Jason Hollingsworth
1 parent 23d180f5

Fix 404 on project page for unauthenticated user

Eliminate a 404 error when user is not logged in and attempts to visit
a project page.

The 404 page will still show up when user is logged in and the project
doesn’t exist or the user doesn’t have access.
@@ -8,6 +8,7 @@ v 6.4.0 @@ -8,6 +8,7 @@ v 6.4.0
8 - Internal projects (Jason Hollingsworth) 8 - Internal projects (Jason Hollingsworth)
9 - Allow removal of avatar (Drew Blessing) 9 - Allow removal of avatar (Drew Blessing)
10 - Project web hooks now support issues and merge request events 10 - Project web hooks now support issues and merge request events
  11 + - Visiting project page while not logged in will redirect to sign-in instead of 404 (Jason Hollingsworth)
11 12
12 v 6.3.0 13 v 6.3.0
13 - API for adding gitlab-ci service 14 - API for adding gitlab-ci service
app/controllers/application_controller.rb
@@ -81,6 +81,9 @@ class ApplicationController < ActionController::Base @@ -81,6 +81,9 @@ class ApplicationController < ActionController::Base
81 81
82 if @project and can?(current_user, :read_project, @project) 82 if @project and can?(current_user, :read_project, @project)
83 @project 83 @project
  84 + elsif current_user.nil?
  85 + @project = nil
  86 + authenticate_user!
84 else 87 else
85 @project = nil 88 @project = nil
86 render_404 and return 89 render_404 and return
features/project/redirects.feature 0 → 100644
@@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
  1 +Feature: Project Redirects
  2 + Background:
  3 + Given public project "Community"
  4 + And private project "Enterprise"
  5 +
  6 + Scenario: I visit public project page
  7 + When I visit project "Community" page
  8 + Then I should see project "Community" home page
  9 +
  10 + Scenario: I visit private project page
  11 + When I visit project "Enterprise" page
  12 + Then I should be redirected to sign in page
  13 +
  14 + Scenario: I visit a non-existent project page
  15 + When I visit project "CommunityDoesNotExist" page
  16 + Then I should be redirected to sign in page
  17 +
  18 + Scenario: I visit a non-existent project page as user
  19 + Given I sign in as a user
  20 + When I visit project "CommunityDoesNotExist" page
  21 + Then page status code should be 404
  22 +
  23 + Scenario: I visit unauthorized project page as user
  24 + Given I sign in as a user
  25 + When I visit project "Enterprise" page
  26 + Then page status code should be 404
features/public/public_projects.feature
@@ -16,11 +16,11 @@ Feature: Public Projects Feature @@ -16,11 +16,11 @@ Feature: Public Projects Feature
16 16
17 Scenario: I visit internal project page 17 Scenario: I visit internal project page
18 When I visit project "Internal" page 18 When I visit project "Internal" page
19 - Then page status code should be 404 19 + Then I should be redirected to sign in page
20 20
21 Scenario: I visit private project page 21 Scenario: I visit private project page
22 When I visit project "Enterprise" page 22 When I visit project "Enterprise" page
23 - Then page status code should be 404 23 + Then I should be redirected to sign in page
24 24
25 Scenario: I visit an empty public project page 25 Scenario: I visit an empty public project page
26 Given public empty project "Empty Public Project" 26 Given public empty project "Empty Public Project"
features/steps/profile/profile.rb
@@ -88,10 +88,6 @@ class Profile < Spinach::FeatureSteps @@ -88,10 +88,6 @@ class Profile < Spinach::FeatureSteps
88 page.should have_content "Password doesn't match confirmation" 88 page.should have_content "Password doesn't match confirmation"
89 end 89 end
90 90
91 - step 'I should be redirected to sign in page' do  
92 - current_path.should == new_user_session_path  
93 - end  
94 -  
95 step 'I reset my token' do 91 step 'I reset my token' do
96 within '.update-token' do 92 within '.update-token' do
97 @old_token = @user.private_token 93 @old_token = @user.private_token
features/steps/project/redirects.rb 0 → 100644
@@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
  1 +class Spinach::Features::ProjectRedirects < Spinach::FeatureSteps
  2 + include SharedAuthentication
  3 + include SharedPaths
  4 + include SharedProject
  5 +
  6 + step 'public project "Community"' do
  7 + create :project_with_code, name: 'Community', visibility_level: Gitlab::VisibilityLevel::PUBLIC
  8 + end
  9 +
  10 + step 'private project "Enterprise"' do
  11 + create :project, name: 'Enterprise'
  12 + end
  13 +
  14 + step 'I visit project "Community" page' do
  15 + project = Project.find_by_name('Community')
  16 + visit project_path(project)
  17 + end
  18 +
  19 + step 'I should see project "Community" home page' do
  20 + within '.project-home-title' do
  21 + page.should have_content 'Community'
  22 + end
  23 + end
  24 +
  25 + step 'I visit project "Enterprise" page' do
  26 + project = Project.find_by_name('Enterprise')
  27 + visit project_path(project)
  28 + end
  29 +
  30 + step 'I visit project "CommunityDoesNotExist" page' do
  31 + project = Project.find_by_name('Community')
  32 + visit project_path(project) + 'DoesNotExist'
  33 + end
  34 +end
  35 +
features/steps/shared/authentication.rb
@@ -12,6 +12,10 @@ module SharedAuthentication @@ -12,6 +12,10 @@ module SharedAuthentication
12 login_as :admin 12 login_as :admin
13 end 13 end
14 14
  15 + step 'I should be redirected to sign in page' do
  16 + current_path.should == new_user_session_path
  17 + end
  18 +
15 def current_user 19 def current_user
16 @user || User.first 20 @user || User.first
17 end 21 end