Ceph-RadosGW-Admin
view release on metacpan or search on metacpan
lib/Ceph/RadosGW/Admin/HTTPRequest.pm view on Meta::CPAN
package Ceph::RadosGW::Admin::HTTPRequest;
$Ceph::RadosGW::Admin::HTTPRequest::VERSION = '0.4';
use Moose 0.85;
use MooseX::StrictConstructor 0.16;
use HTTP::Date;
use MIME::Base64 qw( encode_base64 );
use Moose::Util::TypeConstraints;
use URI::Escape qw( uri_escape_utf8 );
use URI::QueryParam;
use URI;
use Digest::HMAC_SHA1;
use Digest::MD5 ();
# this is almost a direct copy of
# https://metacpan.org/pod/Net::Amazon::S3::HTTPRequest
# ABSTRACT: Create a signed HTTP::Request
my $METADATA_PREFIX = 'x-amz-meta-';
my $AMAZON_HEADER_PREFIX = 'x-amz-';
enum 'HTTPMethod' => [ qw(DELETE GET HEAD PUT POST) ];
has 'url' => ( is => 'ro', isa => 'Str', required => 1 );
has 'method' => ( is => 'ro', isa => 'HTTPMethod', required => 1 );
has 'path' => ( is => 'ro', isa => 'Str', required => 1 );
has 'access_key' => ( is => 'ro', isa => 'Str', required => 1 );
has 'secret_key' => ( is => 'ro', isa => 'Str', required => 1 );
has 'headers' =>
( is => 'ro', isa => 'HashRef', required => 0, default => sub { {} } );
has 'content' =>
( is => 'ro', isa => 'Str|CodeRef', required => 0, default => '' );
has 'metadata' =>
( is => 'ro', isa => 'HashRef', required => 0, default => sub { {} } );
__PACKAGE__->meta->make_immutable;
# make the HTTP::Request object
sub http_request {
my $self = shift;
my $method = $self->method;
my $path = $self->path;
my $headers = $self->headers;
my $content = $self->content;
my $metadata = $self->metadata;
my $uri = $self->url . $path;
my $http_headers = $self->_merge_meta( $headers, $metadata );
$self->_add_auth_header( $http_headers, $method, $path )
unless exists $headers->{Authorization};
my $request
= HTTP::Request->new( $method, $uri, $http_headers, $content );
#my $req_as = $request->as_string;
#$req_as =~ s/[^\n\r\x20-\x7f]/?/g;
#$req_as = substr( $req_as, 0, 1024 ) . "\n\n";
#warn $req_as;
return $request;
}
sub query_string_authentication_uri {
my ( $self, $expires ) = @_;
my $method = $self->method;
my $path = $self->path;
my $headers = $self->headers;
my $aws_access_key_id = $self->access_key;
my $aws_secret_access_key = $self->secret_key;
my $canonical_string
= $self->_canonical_string( $method, $path, $headers, $expires );
my $encoded_canonical
= $self->_encode( $aws_secret_access_key, $canonical_string );
my $uri = $self->url . $path;
$uri = URI->new($uri);
$uri->query_param( AWSAccessKeyId => $aws_access_key_id );
$uri->query_param( Expires => $expires );
$uri->query_param( Signature => $encoded_canonical );
return $uri;
}
sub _add_auth_header {
my ( $self, $headers, $method, $path ) = @_;
my $aws_access_key_id = $self->access_key;
my $aws_secret_access_key = $self->secret_key;
( run in 1.840 second using v1.01-cache-2.11-cpan-39bf76dae61 )