class ActionMailbox::Relayer
def client
def client @client ||= Net::HTTP.new(uri.host, uri.port).tap do |connection| if uri.scheme == "https" require "openssl" connection.use_ssl = true connection.verify_mode = OpenSSL::SSL::VERIFY_PEER end connection.open_timeout = 1 connection.read_timeout = 10 end end
def initialize(url:, username: "actionmailbox", password:)
def initialize(url:, username: "actionmailbox", password:) @uri, @username, @password = URI(url), username, password end
def post(source)
def post(source) client.post uri, source, "Content-Type" => CONTENT_TYPE, "User-Agent" => USER_AGENT, "Authorization" => "Basic #{Base64.strict_encode64(username + ":" + password)}" end
def relay(source)
def relay(source) case response = post(source) when Net::HTTPSuccess Result.new "2.0.0", "Successfully relayed message to ingress" when Net::HTTPUnauthorized Result.new "4.7.0", "Invalid credentials for ingress" else Result.new "4.0.0", "HTTP #{response.code}" end rescue IOError, SocketError, SystemCallError => error Result.new "4.4.2", "Network error relaying to ingress: #{error.message}" rescue Timeout::Error Result.new "4.4.2", "Timed out relaying to ingress" rescue => error Result.new "4.0.0", "Error relaying to ingress: #{error.message}" end