main
1# frozen_string_literal: true
2
3require 'base64'
4require 'json'
5require 'logger'
6require 'net/http'
7require 'openssl'
8
9require 'net/hippie/version'
10require 'net/hippie/client'
11require 'net/hippie/connection'
12require 'net/hippie/content_type_mapper'
13
14module Net
15 # net/http for hippies.
16 module Hippie
17 CONNECTION_ERRORS = [
18 EOFError,
19 Errno::ECONNREFUSED,
20 Errno::ECONNRESET,
21 Errno::ECONNRESET,
22 Errno::EHOSTUNREACH,
23 Errno::EINVAL,
24 Net::OpenTimeout,
25 Net::ProtocolError,
26 Net::ReadTimeout,
27 OpenSSL::OpenSSLError,
28 OpenSSL::SSL::SSLError,
29 SocketError,
30 Timeout::Error
31 ].freeze
32
33 def self.logger
34 @logger ||= Logger.new(nil)
35 end
36
37 def self.logger=(logger)
38 @logger = logger
39 end
40
41 def self.verify_mode
42 @verify_mode ||= OpenSSL::SSL::VERIFY_PEER
43 end
44
45 def self.verify_mode=(mode)
46 @verify_mode = mode
47 end
48
49 def self.basic_auth(username, password)
50 "Basic #{::Base64.strict_encode64("#{username}:#{password}")}"
51 end
52
53 def self.bearer_auth(token)
54 "Bearer #{token}"
55 end
56
57 def self.method_missing(symbol, *args)
58 default_client.with_retry(retries: 3) do |client|
59 client.public_send(symbol, *args)
60 end || super
61 end
62
63 def self.respond_to_missing?(name, _include_private = false)
64 Client.public_instance_methods.include?(name.to_sym) || super
65 end
66
67 def self.default_client
68 @default_client ||= Client.new(follow_redirects: 3, logger: logger)
69 end
70 end
71end