import_otrs_controller.rb 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class ImportOtrsController < ApplicationController
  3. def url_check
  4. return if setup_done_response
  5. # validate
  6. if !params[:url] ||params[:url] !~ /^(http|https):\/\/.+?$/
  7. render :json => {
  8. :result => 'invalid',
  9. :message => 'Invalid!',
  10. }
  11. return
  12. end
  13. # connection test
  14. translationMap = {
  15. 'authentication failed' => 'Authentication failed!',
  16. 'getaddrinfo: nodename nor servname provided, or not known' => 'Hostname not found!',
  17. 'No route to host' => 'No route to host!',
  18. 'Connection refused' => 'Connection refused!',
  19. }
  20. # try connecting to otrs
  21. response = UserAgent.request(params[:url])
  22. if !response.success? && response.code.to_s !~ /^40.$/
  23. message_human = ''
  24. translationMap.each {|key, message|
  25. if response.error.to_s =~ /#{Regexp.escape(key)}/i
  26. message_human = message
  27. end
  28. }
  29. render :json => {
  30. :result => 'invalid',
  31. :message_human => message_human,
  32. :message => response.error.to_s,
  33. }
  34. return
  35. end
  36. message_human = 'Host found, but it seems to be no OTRS installation!'
  37. suffixes = ['/public.pl', '/otrs/public.pl']
  38. suffixes.each {|suffix|
  39. url = params[:url] + suffix + '?Action=ZammadMigrator'
  40. # strip multible / in url
  41. url.gsub!(/([^:])(\/+\/)/, "\\1/")
  42. response = UserAgent.request( url )
  43. #Setting.set('import_mode', true)
  44. Setting.set('import_backend', 'otrs')
  45. Setting.set('import_otrs_endpoint', url)
  46. Setting.set('import_otrs_endpoint_key', '01234567899876543210')
  47. if response.body =~ /zammad migrator/
  48. render :json => {
  49. :url => url,
  50. :result => 'ok',
  51. }
  52. return
  53. elsif response.body =~ /(otrs\sag|otrs.com|otrs.org)/i
  54. message_human = 'Host found, but no OTRS migrator is installed!'
  55. end
  56. }
  57. # return result
  58. render :json => {
  59. :result => 'invalid',
  60. :message_human => message_human,
  61. }
  62. end
  63. def import_start
  64. return if setup_done_response
  65. Setting.set('import_mode', true)
  66. welcome = Import::OTRS2.connection_test
  67. if !welcome
  68. render :json => {
  69. :message => 'Migrator can\'t read OTRS output!',
  70. :result => 'invalid',
  71. }
  72. return
  73. end
  74. # start migration
  75. Import::OTRS2.delay.start
  76. render :json => {
  77. :result => 'ok',
  78. }
  79. end
  80. def import_status
  81. return if setup_done_response
  82. state = Import::OTRS2.get_current_state
  83. render :json => {
  84. :data => state,
  85. :result => 'in_progress',
  86. }
  87. end
  88. private
  89. def setup_done
  90. return false
  91. count = User.all.count()
  92. done = true
  93. if count <= 2
  94. done = false
  95. end
  96. done
  97. end
  98. def setup_done_response
  99. if !setup_done
  100. return false
  101. end
  102. render :json => {
  103. :setup_done => true,
  104. }
  105. true
  106. end
  107. end