in lib/Search/Elasticsearch/Role/Cxn.pm [96:193]
sub BUILDARGS {
#===================================
my ( $class, $params ) = parse_params(@_);
my $node = $params->{node}
|| { host => 'localhost', port => '9200' };
unless ( ref $node eq 'HASH' ) {
$node = "[$node]" if Net::IP::ip_is_ipv6($node);
unless ( $node =~ m{^http(s)?://} ) {
$node = ( $params->{use_https} ? 'https://' : 'http://' ) . $node;
}
if ( $params->{port} && $node !~ m{//[^/\[]+:\d+} ) {
$node =~ s{(//[^/]+)}{$1:$params->{port}};
}
my $uri = URI->new($node);
$node = {
scheme => $uri->scheme,
host => $uri->host,
port => $uri->port,
path => $uri->path,
userinfo => $uri->userinfo
};
}
my $host = $node->{host} || 'localhost';
my $userinfo = $node->{userinfo} || $params->{userinfo} || '';
my $scheme
= $node->{scheme} || ( $params->{use_https} ? 'https' : 'http' );
my $port
= $node->{port}
|| $params->{port}
|| ( $scheme eq 'http' ? 80 : 443 );
my $path = $node->{path} || $params->{path_prefix} || '';
$path =~ s{^/?}{/}g;
$path =~ s{/+$}{};
my %default_headers = %{ $params->{default_headers} || {} };
if ($userinfo) {
require MIME::Base64;
my $auth = MIME::Base64::encode_base64( $userinfo, "" );
chomp $auth;
$default_headers{Authorization} = "Basic $auth";
}
if ( $params->{gzip} ) {
$default_headers{'Accept-Encoding'} = "gzip";
}
elsif ( $params->{deflate} ) {
$default_headers{'Accept-Encoding'} = "deflate";
}
$default_headers{'User-Agent'} = $class->get_user_agent();
# Add Elastic meta header
$default_headers{'x-elastic-client-meta'} = $class->get_meta_header();
# Compatibility header
if (defined $ENV{ELASTIC_CLIENT_APIVERSIONING} &&
(lc($ENV{ELASTIC_CLIENT_APIVERSIONING}) eq 'true' || $ENV{ELASTIC_CLIENT_APIVERSIONING} eq '1')) {
$default_headers{'Accept'} = 'application/vnd.elasticsearch+json;compatible-with=7';
$default_headers{'Content-Type'} = 'application/vnd.elasticsearch+json; compatible-with=7';
}
if (defined $params->{elastic_cloud_api_key} && defined $params->{token_api}) {
throw( 'Request',
"You cannot set elastic_cloud_api_key and token_api together" );
}
# Elastic cloud API key
if (defined $params->{elastic_cloud_api_key}) {
$default_headers{'Authorization'} = sprintf("ApiKey %s", $params->{elastic_cloud_api_key});
}
# Elasticsearch token API (https://www.elastic.co/guide/en/elasticsearch/reference/current/security-api-get-token.html)
if (defined $params->{token_api}) {
$default_headers{'Authorization'} = sprintf("Bearer %s", $params->{token_api});
}
# Elasticsearch
$params->{scheme} = $scheme;
$params->{is_https} = $scheme eq 'https';
$params->{host} = $host;
$params->{port} = $port;
$params->{path} = $path;
$params->{userinfo} = $userinfo;
$host = "[$host]" if Net::IP::ip_is_ipv6($host);
$params->{uri} = URI->new("$scheme://$host:$port$path");
$params->{default_headers} = \%default_headers;
# Add the client version
if (defined $params->{client}) {
$params->{client_version} = substr($params->{client}, 0, index($params->{client}, '_'));
}
return $params;
}