Няма описание http://j1x-huginn.herokuapp.com

web_request_concern.rb 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. require 'faraday'
  2. require 'faraday_middleware'
  3. module WebRequestConcern
  4. module DoNotEncoder
  5. def self.encode(params)
  6. params.map do |key, value|
  7. value.nil? ? "#{key}" : "#{key}=#{value}"
  8. end.join('&')
  9. end
  10. def self.decode(val)
  11. [val]
  12. end
  13. end
  14. extend ActiveSupport::Concern
  15. def validate_web_request_options!
  16. if options['user_agent'].present?
  17. errors.add(:base, "user_agent must be a string") unless options['user_agent'].is_a?(String)
  18. end
  19. if options['disable_ssl_verification'].present? && boolify(options['disable_ssl_verification']).nil?
  20. errors.add(:base, "if provided, disable_ssl_verification must be true or false")
  21. end
  22. unless headers(options['headers']).is_a?(Hash)
  23. errors.add(:base, "if provided, headers must be a hash")
  24. end
  25. begin
  26. basic_auth_credentials(options['basic_auth'])
  27. rescue ArgumentError => e
  28. errors.add(:base, e.message)
  29. end
  30. end
  31. def faraday
  32. faraday_options = {
  33. ssl: {
  34. verify: !boolify(options['disable_ssl_verification'])
  35. }
  36. }
  37. @faraday ||= Faraday.new(faraday_options) { |builder|
  38. builder.headers = headers if headers.length > 0
  39. builder.headers[:user_agent] = user_agent
  40. builder.use FaradayMiddleware::FollowRedirects
  41. builder.request :url_encoded
  42. if boolify(options['disable_url_encoding'])
  43. builder.options.params_encoder = DoNotEncoder
  44. end
  45. if userinfo = basic_auth_credentials
  46. builder.request :basic_auth, *userinfo
  47. end
  48. case backend = faraday_backend
  49. when :typhoeus
  50. require 'typhoeus/adapters/faraday'
  51. end
  52. builder.adapter backend
  53. }
  54. end
  55. def headers(value = interpolated['headers'])
  56. value.presence || {}
  57. end
  58. def basic_auth_credentials(value = interpolated['basic_auth'])
  59. case value
  60. when nil, ''
  61. return nil
  62. when Array
  63. return value if value.size == 2
  64. when /:/
  65. return value.split(/:/, 2)
  66. end
  67. raise ArgumentError.new("bad value for basic_auth: #{value.inspect}")
  68. end
  69. def faraday_backend
  70. ENV.fetch('FARADAY_HTTP_BACKEND', 'typhoeus').to_sym
  71. end
  72. def user_agent
  73. interpolated['user_agent'].presence || self.class.default_user_agent
  74. end
  75. module ClassMethods
  76. def default_user_agent
  77. ENV.fetch('DEFAULT_HTTP_USER_AGENT', "Huginn - https://github.com/cantino/huginn")
  78. end
  79. end
  80. end