oidc_database.rb 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. class OmniAuth::Strategies::OidcDatabase < OmniAuth::Strategies::OpenIDConnect
  3. option :name, 'openid_connect'
  4. def self.setup
  5. auth_openid_connect_credentials = Setting.get('auth_openid_connect_credentials') || {}
  6. http_type = Setting.get('http_type')
  7. fqdn = Setting.get('fqdn')
  8. client_options = {
  9. identifier: auth_openid_connect_credentials['identifier'],
  10. redirect_uri: "#{http_type}://#{fqdn}/auth/openid_connect/callback",
  11. }
  12. auth_openid_connect_credentials['scope'] = %i[openid email profile] if auth_openid_connect_credentials['scope'].blank?
  13. auth_openid_connect_credentials['scope'] = auth_openid_connect_credentials['scope'].split.map(&:to_sym) if auth_openid_connect_credentials['scope'].is_a?(String)
  14. auth_openid_connect_credentials.compact_blank.merge(
  15. discovery: true,
  16. response_type: :code,
  17. client_options:,
  18. )
  19. end
  20. def self.destroy_session(env, session)
  21. session.delete('oidc_id_token')
  22. @_current_user = nil
  23. env['rack.session.options'][:expire_after] = nil
  24. session.destroy
  25. end
  26. def initialize(app, *args, &)
  27. args[0] = self.class.setup
  28. super
  29. end
  30. def decode_logout_token(logout_token)
  31. decode_id_token(logout_token)
  32. end
  33. end