# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/ class Integration::ExchangeController < ApplicationController include Integration::ImportJobBase prepend_before_action { authentication_check && authorize! } def autodiscover answer_with do require 'autodiscover' # Only load this gem when it is really used. client = Autodiscover::Client.new( email: params[:user], password: params[:password], ) if params[:disable_ssl_verify] client.http.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE end begin { endpoint: client.autodiscover&.ews_url } rescue Errno::EADDRNOTAVAIL {} end end end def folders answer_with do Sequencer.process('Import::Exchange::AvailableFolders', parameters: { ews_config: ews_config }) .tap do |res| raise __('No folders were found for the given user credentials.') if res[:folders].blank? end end end def mapping answer_with do raise __('Please select at least one folder.') if params[:folders].blank? Sequencer.process('Import::Exchange::AttributesExamples', parameters: { ews_folder_ids: params[:folders], ews_config: ews_config }) .tap do |res| raise __('No entries were found in the selected folder(s).') if res[:attributes].blank? end end end private def payload_dry_run { ews_attributes: params[:attributes].permit!.to_h, ews_folder_ids: params[:folders], ews_config: ews_config } end def ews_config { disable_ssl_verify: params[:disable_ssl_verify], endpoint: params[:endpoint], user: params[:user], password: params[:password], } end end