import_zendesk_controller.rb 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. # Copyright (C) 2012-2014 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. Setting.set('import_zendesk_endpoint', "#{params[:url]}api/v2")
  37. render json: {
  38. result: 'ok',
  39. url: params[:url],
  40. }
  41. end
  42. def credentials_check
  43. return if setup_done_response
  44. if !params[:username] || !params[:token]
  45. render json: {
  46. result: 'invalid',
  47. message_human: 'Incomplete credentials',
  48. }
  49. return
  50. end
  51. Setting.set('import_zendesk_endpoint_username', params[:username])
  52. Setting.set('import_zendesk_endpoint_key', params[:token])
  53. if !Import::Zendesk.connection_test
  54. Setting.set('import_zendesk_endpoint_username', nil)
  55. Setting.set('import_zendesk_endpoint_key', nil)
  56. render json: {
  57. result: 'invalid',
  58. message_human: 'Invalid credentials!',
  59. }
  60. return
  61. end
  62. render json: {
  63. result: 'ok',
  64. }
  65. end
  66. def import_start
  67. return if setup_done_response
  68. Setting.set('import_mode', true)
  69. # start migration
  70. Import::Zendesk.delay.start_bg
  71. render json: {
  72. result: 'ok',
  73. }
  74. end
  75. def import_status
  76. result = Import::Zendesk.status_bg
  77. if result[:result] == 'import_done'
  78. Setting.reload
  79. end
  80. render json: result
  81. end
  82. private
  83. def setup_done
  84. count = User.all.count()
  85. done = true
  86. if count <= 2
  87. done = false
  88. end
  89. done
  90. end
  91. def setup_done_response
  92. if !setup_done
  93. return false
  94. end
  95. render json: {
  96. setup_done: true,
  97. }
  98. true
  99. end
  100. end