diff options
-rw-r--r-- | app/controllers/application_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/users_sessions_controller.rb | 6 | ||||
-rw-r--r-- | app/views/devise/sessions/_new_base.html.haml | 4 | ||||
-rw-r--r-- | app/views/layouts/_public_head_panel.html.haml | 4 | ||||
-rw-r--r-- | config/routes.rb | 2 | ||||
-rw-r--r-- | features/project/redirects.feature | 7 | ||||
-rw-r--r-- | features/steps/project/redirects.rb | 22 |
7 files changed, 41 insertions, 6 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 603e89a5e29..d58890fa33b 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -48,7 +48,7 @@ class ApplicationController < ActionController::Base flash[:alert] = "Your account is blocked. Retry when an admin has unblocked it." new_user_session_path else - super + @return_to || root_path end end diff --git a/app/controllers/users_sessions_controller.rb b/app/controllers/users_sessions_controller.rb new file mode 100644 index 00000000000..656c92376fd --- /dev/null +++ b/app/controllers/users_sessions_controller.rb @@ -0,0 +1,6 @@ +class UsersSessionsController < Devise::SessionsController + def create + @return_to = params[:return_to] + super + end +end diff --git a/app/views/devise/sessions/_new_base.html.haml b/app/views/devise/sessions/_new_base.html.haml index a2f85fa3fe2..989fcb4a63f 100644 --- a/app/views/devise/sessions/_new_base.html.haml +++ b/app/views/devise/sessions/_new_base.html.haml @@ -7,8 +7,8 @@ = f.check_box :remember_me %span Remember me %div + = hidden_field_tag 'return_to', params[:return_to] = f.submit "Sign in", class: "btn-create btn" + .pull-right = link_to "Forgot your password?", new_password_path(resource_name), class: "btn" - - diff --git a/app/views/layouts/_public_head_panel.html.haml b/app/views/layouts/_public_head_panel.html.haml index 63992a22f32..25984df0444 100644 --- a/app/views/layouts/_public_head_panel.html.haml +++ b/app/views/layouts/_public_head_panel.html.haml @@ -13,10 +13,10 @@ %i.icon-reorder .pull-right.hidden-xs - = link_to "Sign in", new_session_path(:user), class: 'btn btn-sign-in btn-new' + = link_to "Sign in", new_session_path(:user, return_to: request.fullpath), class: 'btn btn-sign-in btn-new' .navbar-collapse.collapse %ul.nav.navbar-nav %li.visible-xs - = link_to "Sign in", new_session_path(:user) + = link_to "Sign in", new_session_path(:user, return_to: request.fullpath) diff --git a/config/routes.rb b/config/routes.rb index 746e532a0ec..779cbad709c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -157,7 +157,7 @@ Gitlab::Application.routes.draw do resources :projects, constraints: { id: /[^\/]+/ }, only: [:new, :create] - devise_for :users, controllers: { omniauth_callbacks: :omniauth_callbacks, registrations: :registrations , passwords: :passwords} + devise_for :users, controllers: { omniauth_callbacks: :omniauth_callbacks, registrations: :registrations , passwords: :passwords, sessions: :users_sessions } # # Project Area diff --git a/features/project/redirects.feature b/features/project/redirects.feature index ce197912f64..776ab83a876 100644 --- a/features/project/redirects.feature +++ b/features/project/redirects.feature @@ -24,3 +24,10 @@ Feature: Project Redirects Given I sign in as a user When I visit project "Enterprise" page Then page status code should be 404 + + Scenario: I visit a public project without signing in + When I visit project "Community" page + And I should see project "Community" home page + And I click on "Sign In" + And Authenticate + Then I should be redirected to "Community" page diff --git a/features/steps/project/redirects.rb b/features/steps/project/redirects.rb index cfa4ce82be3..5a4342dba30 100644 --- a/features/steps/project/redirects.rb +++ b/features/steps/project/redirects.rb @@ -31,5 +31,27 @@ class Spinach::Features::ProjectRedirects < Spinach::FeatureSteps project = Project.find_by(name: 'Community') visit project_path(project) + 'DoesNotExist' end + + step 'I click on "Sign In"' do + within '.pull-right' do + click_link "Sign in" + end + end + + step 'Authenticate' do + admin = create(:admin) + project = Project.find_by(name: 'Community') + find(:xpath, "//input[@id='return_to']").set "/#{project.path_with_namespace}" + fill_in "user_login", with: admin.email + fill_in "user_password", with: admin.password + click_button "Sign in" + Thread.current[:current_user] = admin + end + + step 'I should be redirected to "Community" page' do + project = Project.find_by(name: 'Community') + page.current_path.should == "/#{project.path_with_namespace}" + page.status_code.should == 200 + end end |