# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/ class ImportOtrsController < ApplicationController def url_check return if setup_done_response # validate if !params[:url] ||params[:url] !~ /^(http|https):\/\/.+?$/ render :json => { :result => 'invalid', :message => 'Invalid!', } return end # connection test translationMap = { 'authentication failed' => 'Authentication failed!', 'getaddrinfo: nodename nor servname provided, or not known' => 'Hostname not found!', 'No route to host' => 'No route to host!', 'Connection refused' => 'Connection refused!', } # try connecting to otrs response = UserAgent.request(params[:url]) if !response.success? && response.code.to_s !~ /^40.$/ message_human = '' translationMap.each {|key, message| if response.error.to_s =~ /#{Regexp.escape(key)}/i message_human = message end } render :json => { :result => 'invalid', :message_human => message_human, :message => response.error.to_s, } return end message_human = 'Host found, but it seems to be no OTRS installation!' suffixes = ['/public.pl', '/otrs/public.pl'] suffixes.each {|suffix| url = params[:url] + suffix + '?Action=ZammadMigrator' # strip multible / in url url.gsub!(/([^:])(\/+\/)/, '\\1/') response = UserAgent.request( url ) #Setting.set('import_mode', true) Setting.set('import_backend', 'otrs') Setting.set('import_otrs_endpoint', url) Setting.set('import_otrs_endpoint_key', '01234567899876543210') if response.body =~ /zammad migrator/ render :json => { :url => url, :result => 'ok', } return elsif response.body =~ /(otrs\sag|otrs.com|otrs.org)/i message_human = 'Host found, but no OTRS migrator is installed!' end } # return result render :json => { :result => 'invalid', :message_human => message_human, } end def import_start return if setup_done_response Setting.set('import_mode', true) welcome = Import::OTRS2.connection_test if !welcome render :json => { :message => 'Migrator can\'t read OTRS output!', :result => 'invalid', } return end # start migration Import::OTRS2.delay.start render :json => { :result => 'ok', } end def import_status return if setup_done_response state = Import::OTRS2.get_current_state render :json => { :data => state, :result => 'in_progress', } end private def setup_done return false count = User.all.count() done = true if count <= 2 done = false end done end def setup_done_response if !setup_done return false end render :json => { :setup_done => true, } true end end