Class: Artemis::Adapters::NetHttpHmacAdapter

Inherits:
NetHttpAdapter
  • Object
show all
Defined in:
lib/artemis/adapters/net_http_hmac_adapter.rb

Overview

We overwrite execute so we can sign the request with HMAC

Instance Method Summary collapse

Instance Method Details

#execute(document:, operation_name: nil, variables: {}, context: {}) ⇒ Object

Makes an HTTP request for GraphQL query.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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