Fix wrong redirect after sign-in for RS OAuth
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
Release Drafter / Update release notes draft (pull_request) Successful in 3s

We use a custom auth method to pre-fill the username when reaching the
RS OAuth while signed out. However, it needs to redirect back to the RS
OAuth page after sign-in, and not to the root path.
This commit is contained in:
Râu Cao 2023-09-04 11:33:16 +02:00
parent 0f3b9f176e
commit fcb6923c92
Signed by: raucao
GPG Key ID: 15E65F399D084BA9
3 changed files with 24 additions and 0 deletions

View File

@ -37,4 +37,8 @@ class ApplicationController < ActionController::Base
format.any { head status } format.any { head status }
end end
end end
def after_sign_in_path_for(user)
session[:user_return_to] || root_path
end
end end

View File

@ -108,6 +108,7 @@ class Rs::OauthController < ApplicationController
def require_signed_in_with_username def require_signed_in_with_username
unless user_signed_in? unless user_signed_in?
username, org = params[:useraddress].split("@") username, org = params[:useraddress].split("@")
session[:user_return_to] = request.url
redirect_to new_user_session_path(cn: username, ou: org) redirect_to new_user_session_path(cn: username, ou: org)
end end
end end

View File

@ -54,6 +54,11 @@ RSpec.describe 'remoteStorage OAuth Dialog', type: :feature do
context "when signed out" do context "when signed out" do
let(:user) { create :user } let(:user) { create :user }
before do
allow_any_instance_of(User).to receive(:valid_ldap_authentication?)
.with(user.password).and_return(true)
end
it "prefills the username field in the signin form" do it "prefills the username field in the signin form" do
visit new_rs_oauth_path(useraddress: user.address, visit new_rs_oauth_path(useraddress: user.address,
redirect_uri: "http://example.com", redirect_uri: "http://example.com",
@ -62,5 +67,19 @@ RSpec.describe 'remoteStorage OAuth Dialog', type: :feature do
expect(find("#user_cn").value).to eq(user.cn) expect(find("#user_cn").value).to eq(user.cn)
end end
it "redirects to the OAuth dialog after sign-in" do
auth_url = new_rs_oauth_url(useraddress: user.address,
redirect_uri: "http://example.com",
client_id: "http://example.com",
scope: "documents,[photos], contacts:r")
visit auth_url
fill_in "User", with: user.cn
fill_in "Password", with: user.password
click_button "Log in"
expect(current_url).to eq(auth_url)
end
end end
end end