guess_configuration.rb 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. module Gql::Mutations
  3. class Channel::Email::GuessConfiguration < Channel::Email::BaseConfiguration
  4. description 'Try to guess email channel configuration from user credentials'
  5. argument :email_address, String, description: 'User email address to guess configuration for'
  6. argument :password, String, description: 'User password'
  7. field :result, Gql::Types::Channel::Email::GuessConfigurationResult, null: false, description: 'Holds the guessed configurations.'
  8. def resolve(email_address:, password:)
  9. internal_result = EmailHelper::Probe.full(email: email_address, password:)
  10. return { result: {} } if internal_result&.dig(:result) != 'ok'
  11. {
  12. result: {
  13. inbound_configuration: map_config_to_type(internal_result.dig(:setting, :inbound)),
  14. outbound_configuration: map_config_to_type(internal_result.dig(:setting, :outbound)),
  15. mailbox_stats: internal_result.slice(:content_messages),
  16. }
  17. }
  18. end
  19. private
  20. def map_config_to_type(hash)
  21. return if !hash.is_a?(Hash)
  22. hash
  23. .slice(:adapter)
  24. .merge(hash[:options])
  25. .tap { _1[:ssl] = map_ssl_value(_1) }
  26. end
  27. def map_ssl_value(hash)
  28. if hash[:start_tls]
  29. 'starttls'
  30. elsif hash[:ssl]
  31. 'ssl'
  32. else
  33. 'off'
  34. end
  35. end
  36. end
  37. end