trabajo-afectivo/app/controllers/import_zendesk_controller.rb

143 lines
3.2 KiB
Ruby
Raw Permalink Normal View History

2022-01-01 13:38:12 +00:00
# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
2016-01-18 19:32:34 +00:00
class ImportZendeskController < ApplicationController
def url_check
return if setup_done_response
# validate
if params[:url].blank? || params[:url] !~ %r{^(http|https)://.+?$}
2016-01-18 19:32:34 +00:00
render json: {
result: 'invalid',
message: __('Invalid URL!'),
2016-01-18 19:32:34 +00:00
}
return
end
# connection test
translation_map = {
'No such file' => __('Hostname not found!'),
'getaddrinfo: nodename nor servname provided, or not known' => __('Hostname not found!'),
'503 Service Temporarily Unavailable' => __('Hostname not found!'),
'No route to host' => __('No route to host!'),
'Connection refused' => __('Connection refused!'),
2016-01-18 19:32:34 +00:00
}
response = UserAgent.request(URI.join(params[:url], '/api/v2/users/me').to_s, verify_ssl: true)
2016-01-18 19:32:34 +00:00
if !response.success?
message_human = ''
translation_map.each do |key, message|
if response.error.to_s.match?(%r{#{Regexp.escape(key)}}i)
2016-01-18 19:32:34 +00:00
message_human = message
end
end
2016-01-18 19:32:34 +00:00
render json: {
result: 'invalid',
2016-01-18 19:32:34 +00:00
message_human: message_human,
message: response.error.to_s,
2016-01-18 19:32:34 +00:00
}
return
end
if response.header['x-zendesk-api-version'].blank?
render json: {
result: 'invalid',
message_human: __('Hostname not found!'),
}
return
end
endpoint = "#{params[:url]}/api/v2"
endpoint.gsub!(%r{([^:])//+}, '\\1/')
2021-05-25 12:30:12 +00:00
Setting.set('import_zendesk_endpoint', endpoint)
2016-01-18 19:32:34 +00:00
render json: {
result: 'ok',
url: params[:url],
2016-01-18 19:32:34 +00:00
}
end
def credentials_check
return if setup_done_response
if !params[:username] || !params[:token]
render json: {
result: 'invalid',
message_human: __('Incomplete credentials'),
2016-01-18 19:32:34 +00:00
}
return
end
Setting.set('import_zendesk_endpoint_username', params[:username])
Setting.set('import_zendesk_endpoint_key', params[:token])
result = Sequencer.process('Import::Zendesk::ConnectionTest')
if !result[:connected]
2016-01-18 19:32:34 +00:00
Setting.set('import_zendesk_endpoint_username', nil)
Setting.set('import_zendesk_endpoint_key', nil)
render json: {
result: 'invalid',
message_human: __('Invalid credentials!'),
2016-01-18 19:32:34 +00:00
}
return
end
render json: {
result: 'ok',
}
end
def import_start
return if setup_done_response
2016-01-18 19:32:34 +00:00
Setting.set('import_mode', true)
Setting.set('import_backend', 'zendesk')
2016-01-18 19:32:34 +00:00
job = ImportJob.create(name: 'Import::Zendesk')
AsyncImportJob.perform_later(job)
2016-01-18 19:32:34 +00:00
render json: {
result: 'ok',
}
end
def import_status
job = ImportJob.find_by(name: 'Import::Zendesk')
if job.finished_at.present?
2016-01-18 19:32:34 +00:00
Setting.reload
end
model_show_render_item(job)
2016-01-18 19:32:34 +00:00
end
private
def setup_done
count = User.all.count()
done = true
if count <= 2
done = false
end
done
end
def setup_done_response
if !setup_done
return false
end
2016-01-18 19:32:34 +00:00
render json: {
setup_done: true,
}
true
end
end