refactor: extract agent_connect logout_url to a agent_connect_service

This commit is contained in:
simon lehericey 2024-09-16 12:10:55 +02:00
parent 1706feec3d
commit 6f5135a6b2
No known key found for this signature in database
GPG key ID: CDE670D827C7B3C5
3 changed files with 27 additions and 8 deletions

View file

@ -59,7 +59,8 @@ class Users::SessionsController < Devise::SessionsController
end end
if agent_connect_id_token.present? if agent_connect_id_token.present?
return redirect_to build_agent_connect_logout_url(agent_connect_id_token), allow_other_host: true return redirect_to AgentConnectService.logout_url(agent_connect_id_token, host_with_port: request.host_with_port),
allow_other_host: true
end end
end end
@ -110,11 +111,4 @@ class Users::SessionsController < Devise::SessionsController
def logout def logout
redirect_to root_path, notice: I18n.t('devise.sessions.signed_out') redirect_to root_path, notice: I18n.t('devise.sessions.signed_out')
end end
private
def build_agent_connect_logout_url(id_token)
h = { id_token_hint: id_token, post_logout_redirect_uri: logout_url }
"#{AGENT_CONNECT[:end_session_endpoint]}?#{h.to_query}"
end
end end

View file

@ -39,6 +39,12 @@ class AgentConnectService
[access_token.userinfo!.raw_attributes, access_token.id_token, amr] [access_token.userinfo!.raw_attributes, access_token.id_token, amr]
end end
def self.logout_url(id_token, host_with_port:)
app_logout = Rails.application.routes.url_helpers.logout_url(host: host_with_port)
h = { id_token_hint: id_token, post_logout_redirect_uri: app_logout }
"#{AGENT_CONNECT[:end_session_endpoint]}?#{h.to_query}"
end
private private
# TODO: remove this block when migration to new domain is done # TODO: remove this block when migration to new domain is done

View file

@ -0,0 +1,19 @@
# frozen_string_literal: true
describe AgentConnectService do
describe '.logout_url' do
let(:id_token) { 'id_token' }
before do
::AGENT_CONNECT ||= {}
allow(AGENT_CONNECT).to receive(:[])
.with(:end_session_endpoint).and_return("https://agent-connect.fr/logout")
end
subject { described_class.logout_url(id_token, host_with_port: 'test.host') }
it 'returns the correct url' do
expect(subject).to eq("https://agent-connect.fr/logout?id_token_hint=id_token&post_logout_redirect_uri=http%3A%2F%2Ftest.host%2Flogout")
end
end
end