class SearchFlip::AwsSigv4Plugin

The SearchFlip::AwsSigV4Plugin is a plugin for the SearchFlip::HTTPClient to be used with AWS Elasticsearch to sign requests, i.e. add signed headers, before sending the request to Elasticsearch.

@example

MyConnection = SearchFlip::Connection.new(
  base_url: "https://your-elasticsearch-cluster.es.amazonaws.com",
  http_client: SearchFlip::HTTPClient.new(
    plugins: [
      SearchFlip::AwsSigv4Plugin.new(
        region: "...",
        access_key_id: "...",
        secret_access_key: "..."
      )
    ]
  )
)

Attributes

signer[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/search_flip/aws_sigv4_plugin.rb, line 26
def initialize(options = {})
  self.signer = Aws::Sigv4::Signer.new({ service: "es" }.merge(options))
end

Public Instance Methods

call(request, method, uri, options = {}) click to toggle source
# File lib/search_flip/aws_sigv4_plugin.rb, line 30
def call(request, method, uri, options = {})
  full_uri = URI.parse(uri)
  full_uri.query = URI.encode_www_form(options[:params]) if options[:params]

  signature_request = {
    http_method: method.to_s.upcase,
    url: full_uri.to_s
  }

  signature_request[:body] = options[:body] if options.key?(:body)
  signature_request[:body] = options[:json].respond_to?(:to_str) ? options[:json] : JSON.generate(options[:json]) if options[:json]

  signature = signer.sign_request(signature_request)

  request.headers(signature.headers)
end