requester.rb 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. module Import
  2. module OTRS
  3. module Requester
  4. extend Import::Helper
  5. # rubocop:disable Style/ModuleFunction
  6. extend self
  7. def load(object, args = {})
  8. @cache ||= {}
  9. if args.empty? && @cache[object]
  10. return @cache[object]
  11. end
  12. result = request_result(
  13. Subaction: 'Export',
  14. Object: object,
  15. Limit: args[:limit] || '',
  16. Offset: args[:offset] || '',
  17. Diff: args[:diff] ? 1 : 0
  18. )
  19. return result if !args.empty?
  20. @cache[object] = result
  21. @cache[object]
  22. end
  23. def list
  24. request_result(Subaction: 'List')
  25. end
  26. # TODO: refactor to something like .connected?
  27. def connection_test
  28. result = request_json({})
  29. return true if result['Success']
  30. raise 'API key not valid!'
  31. end
  32. private
  33. def request_result(params)
  34. response = request_json(params)
  35. response['Result']
  36. end
  37. def request_json(params)
  38. response = post(params)
  39. result = handle_response(response)
  40. return result if result
  41. raise 'Invalid response'
  42. end
  43. def handle_response(response)
  44. encoded_body = Encode.conv('utf8', response.body.to_s)
  45. JSON.parse(encoded_body)
  46. end
  47. def post(params)
  48. url = Setting.get('import_otrs_endpoint')
  49. params[:Action] = 'ZammadMigrator'
  50. params[:Key] = Setting.get('import_otrs_endpoint_key')
  51. log 'POST: ' + url
  52. log 'PARAMS: ' + params.inspect
  53. response = UserAgent.post(
  54. url,
  55. params,
  56. {
  57. open_timeout: 10,
  58. read_timeout: 120,
  59. total_timeout: 360,
  60. user: Setting.get('import_otrs_user'),
  61. password: Setting.get('import_otrs_password'),
  62. },
  63. )
  64. if !response
  65. raise "Can't connect to Zammad Migrator"
  66. end
  67. if !response.success?
  68. log "ERROR: #{response.error}"
  69. raise 'Zammad Migrator returned an error'
  70. end
  71. response
  72. end
  73. end
  74. end
  75. end