import_zendesk_controller.rb 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. # Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
  2. require 'zendesk_api'
  3. class ImportZendeskController < ApplicationController
  4. def url_check
  5. return if setup_done_response
  6. # validate
  7. if !params[:url] || params[:url] !~ %r{^(http|https)://.+?$}
  8. render json: {
  9. result: 'invalid',
  10. message: 'Invalid URL!',
  11. }
  12. return
  13. end
  14. # connection test
  15. translation_map = {
  16. 'No such file' => 'Hostname not found!',
  17. 'getaddrinfo: nodename nor servname provided, or not known' => 'Hostname not found!',
  18. 'No route to host' => 'No route to host!',
  19. 'Connection refused' => 'Connection refused!',
  20. }
  21. response = UserAgent.request(params[:url])
  22. if !response.success?
  23. message_human = ''
  24. translation_map.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. # since 2016-10-15 a redirect to a signup page has been implemented
  37. if response.body =~ /(Take it for a risk-free|Take it for a risk-free)/i
  38. render json: {
  39. result: 'invalid',
  40. message_human: 'Hostname not found!',
  41. }
  42. return
  43. end
  44. endpoint = "#{params[:url]}/api/v2"
  45. endpoint.gsub(%r{[^:]//}, '/')
  46. Setting.set('import_zendesk_endpoint', endpoint)
  47. render json: {
  48. result: 'ok',
  49. url: params[:url],
  50. }
  51. end
  52. def credentials_check
  53. return if setup_done_response
  54. if !params[:username] || !params[:token]
  55. render json: {
  56. result: 'invalid',
  57. message_human: 'Incomplete credentials',
  58. }
  59. return
  60. end
  61. Setting.set('import_zendesk_endpoint_username', params[:username])
  62. Setting.set('import_zendesk_endpoint_key', params[:token])
  63. if !Import::Zendesk.connection_test
  64. Setting.set('import_zendesk_endpoint_username', nil)
  65. Setting.set('import_zendesk_endpoint_key', nil)
  66. render json: {
  67. result: 'invalid',
  68. message_human: 'Invalid credentials!',
  69. }
  70. return
  71. end
  72. render json: {
  73. result: 'ok',
  74. }
  75. end
  76. def import_start
  77. return if setup_done_response
  78. Setting.set('import_mode', true)
  79. # start migration
  80. Import::Zendesk.delay.start_bg
  81. render json: {
  82. result: 'ok',
  83. }
  84. end
  85. def import_status
  86. result = Import::Zendesk.status_bg
  87. if result[:result] == 'import_done'
  88. Setting.reload
  89. end
  90. render json: result
  91. end
  92. private
  93. def setup_done
  94. count = User.all.count()
  95. done = true
  96. if count <= 2
  97. done = false
  98. end
  99. done
  100. end
  101. def setup_done_response
  102. if !setup_done
  103. return false
  104. end
  105. render json: {
  106. setup_done: true,
  107. }
  108. true
  109. end
  110. end