handles_oidc_authorization.rb 1012 B

123456789101112131415161718192021222324252627282930313233
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. module Gql::Mutations::Concerns::Logout::HandlesOidcAuthorization
  3. extend ActiveSupport::Concern
  4. included do
  5. def oidc_session?
  6. session[:oidc_id_token].present?
  7. end
  8. def oidc_destroy
  9. { success: true, external_logout_url: oidc_logout_url }
  10. rescue => e
  11. Rails.logger.error "OpenID Connect RP-initiated logout failed: #{e.message}"
  12. end
  13. def oidc_logout_url
  14. oidc = OmniAuth::Strategies::OidcDatabase.new(OmniAuth::Strategies::OidcDatabase.setup)
  15. options = oidc.config
  16. logout_url = Addressable::URI.parse(options.end_session_endpoint)
  17. logout_url.query_values = {
  18. id_token_hint: session[:oidc_id_token],
  19. post_logout_redirect_uri: "#{Setting.get('http_type')}://#{Setting.get('fqdn')}/desktop/login"
  20. }
  21. OmniAuth::Strategies::OidcDatabase.destroy_session(context[:controller].request.env, session)
  22. logout_url
  23. end
  24. end
  25. end