class Artemis::Adapters::NetHttpHmacAdapter

We overwrite execute so we can sign the request with HMAC

Public Instance Methods

execute(document:, operation_name: nil, variables: {}, context: {}) click to toggle source

Makes an HTTP request for GraphQL query.

# File lib/artemis/adapters/net_http_hmac_adapter.rb, line 6
def execute(document:, operation_name: nil, variables: {}, context: {})
  request = Net::HTTP::Post.new(uri.request_uri)
  request.basic_auth(uri.user, uri.password) if uri.user || uri.password

  request['Accept'] = 'application/json'
  request['Content-Type'] = 'application/json'
  headers(context).each { |name, value| request[name] = value }

  body = {}
  body['query'] = document.to_query_string
  body['variables'] = variables if variables.any?
  body['operationName'] = operation_name if operation_name
  request.body = JSON.generate(body)

  # Only changes are in here
  signed_request = api_auth_sign_request!(request, context.fetch(:api_auth))
  response = connection.request(signed_request)

  case response.code.to_i
  when 200, 400
    JSON.parse(response.body)
  when 500..599
    raise Artemis::GraphQLServerError, "Received server error status #{response.code}: #{response.body}"
  else
    { 'errors' => [{ 'message' => "#{response.code} #{response.message}" }] }
  end
end

Private Instance Methods

api_auth_sign_request!(request, api_auth) click to toggle source
# File lib/artemis/adapters/net_http_hmac_adapter.rb, line 36
def api_auth_sign_request!(request, api_auth)
  override_http_method = api_auth.fetch(:override_http_method, nil)
  digest = api_auth.fetch(:digest, 'sha256')
  ::ApiAuth.sign!(request,
    api_auth.fetch(:access_id), api_auth.fetch(:secret_key),
    override_http_method: override_http_method, digest: digest)
end