AWS-S3

 view release on metacpan or  search on metacpan

META.json  view on Meta::CPAN

{
   "abstract" : "unknown",
   "author" : [
      "Lee Johnson <leejo@cpan.org>"
   ],
   "dynamic_config" : 1,
   "generated_by" : "ExtUtils::MakeMaker version 7.76, CPAN::Meta::Converter version 2.150010",
   "license" : [
      "perl_5"
   ],
   "meta-spec" : {
      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
      "version" : 2

META.yml  view on Meta::CPAN

---
abstract: unknown
author:
  - 'Lee Johnson <leejo@cpan.org>'
build_requires:
  Data::Section::Simple: '0'
  Test::Deep: '0.112'
  Test::Exception: '0.32'
  Test::More: '0.31'
configure_requires:
  ExtUtils::MakeMaker: '0'
dynamic_config: 1
generated_by: 'ExtUtils::MakeMaker version 7.76, CPAN::Meta::Converter version 2.150010'

lib/AWS/S3/Bucket.pm  view on Meta::CPAN

    clearer  => '_clear_acl',
    default  => sub {
        my $self = shift;
        my $type = 'GetBucketAccessControl';
        return $self->_get_property( $type )->response->decoded_content();
    },
    trigger  => sub {
        my ( $self, $new_val, $old_val ) = @_;

        my %shorts = map { $_ => undef } qw(
          private public-read public-read-write authenticated-read
        );

        my %acl = ();
        if ( $new_val =~ m{<} ) {
            $acl{acl_xml} = $new_val;
        }
        elsif ( exists $shorts{$new_val} ) {
            $acl{acl_short} = $new_val;
        }
        else {

lib/AWS/S3/HTTPRequest.pm  view on Meta::CPAN

    my $uri = $s->bucket_uri( $s->path );

    my $signer = AWS::S3::Signer->new(
        s3      => $s->s3,
        method  => $method,
        uri     => $uri,
        content => $content ? \$content : undef,
        headers => [ $headers->flatten ],
    );

    $headers->header( 'Authorization'  => $signer->auth_header );
    $headers->header( 'Date'           => $signer->date );
    $headers->header( 'Host'           => URI->new( $uri )->host );
    $headers->header( 'content-length' => $signer->content_length ) if $content;
    $headers->header( 'content-type'   => $signer->content_type ) if $content;

    my $request = HTTP::Request->new( $method, $uri, $headers, $content );

    return $request;
}    # end http_request()

lib/AWS/S3/Request/CreateBucket.pm  view on Meta::CPAN

        s3           => $s->s3,
        method       => 'PUT',
        uri          => $s->protocol . '://' . $s->bucket . '.' . $s->endpoint . '/',
        content_type => 'text/plain',
        content_md5  => '',
        content      => \$xml,
    );

    return $s->_send_request(
        $signer->method => $signer->uri => {
            Authorization  => $signer->auth_header,
            Date           => $signer->date,
            'content-type' => 'text/plain',
        },
        $xml
    );
}

__PACKAGE__->meta->make_immutable;

lib/AWS/S3/Request/DeleteMulti.pm  view on Meta::CPAN

    my $signer = AWS::S3::Signer->new(
        s3           => $s->s3,
        method       => 'POST',
        uri          => $s->_uri,
        content      => \$xml,
        content_type => '',
    );

    $s->_send_request(
        $signer->method => $signer->uri => {
            Authorization => $signer->auth_header,
            Date          => $signer->date,
            'content-md5' => $signer->content_md5,
        },
        $xml
    );
}

__PACKAGE__->meta->make_immutable;

lib/AWS/S3/Request/ListBucket.pm  view on Meta::CPAN


    my $uri = $s->bucket_uri;

    my $signer = AWS::S3::Signer->new(
        s3     => $s->s3,
        method => 'GET',
        uri    => $uri . '/' . ( @params ? '?' . join( '&', @params ) : '' ),
    );
    $s->_send_request(
        $signer->method => $signer->uri => {
            Authorization => $signer->auth_header,
            Date          => $signer->date,
        }
    );
}    # end request()

__PACKAGE__->meta->make_immutable;

lib/AWS/S3/Request/SetBucketAccessControl.pm  view on Meta::CPAN


    if ( $s->acl_short ) {
        my $signer = AWS::S3::Signer->new(
            s3      => $s->s3,
            method  => 'PUT',
            uri     => $s->protocol . '://' . $s->bucket . '.' . $s->endpoint . '/?acl',
            headers => [ 'x-amz-acl' => $s->acl_short ]
        );
        return $s->_send_request(
            $signer->method => $signer->uri => {
                Authorization => $signer->auth_header,
                Date          => $signer->date,
                'x-amz-acl'   => $s->acl_short
            },
            $s->acl_xml
        );
    } elsif ( $s->acl_xml ) {
        my $signer = AWS::S3::Signer->new(
            s3             => $s->s3,
            method         => 'PUT',
            uri            => $s->protocol . '://' . $s->bucket . '.' . $s->endpoint . '/?acl',
            content        => \$s->acl_xml,
            'content-type' => 'text/xml',
        );
        return $s->_send_request(
            $signer->method => $signer->uri => {
                Authorization => $signer->auth_header,
                Date          => $signer->date,
            },
            $s->acl_xml
        );
    }    # end if()
}    # end request()

__PACKAGE__->meta->make_immutable;

lib/AWS/S3/Request/SetBucketPolicy.pm  view on Meta::CPAN

        method       => 'PUT',
        uri          => $s->_uri,
        content      => \$s->policy,
        content_type => '',
        content_md5  => '',
    );

    #warn "SetPolicy.string_to_sign(" . $signer->string_to_sign . ")";
    $s->_send_request(
        $signer->method => $signer->uri => {
            Authorization => $signer->auth_header,
            Date          => $signer->date,
        },
        $s->policy
    );
}    # end request()

__PACKAGE__->meta->make_immutable;

lib/AWS/S3/Request/SetFileContents.pm  view on Meta::CPAN

    my $signer = AWS::S3::Signer->new(
        s3           => $s->s3,
        method       => 'PUT',
        uri          => $s->protocol . '://' . $s->bucket . '.' . $s->endpoint . '/' . $s->file->key,
        content_type => $s->content_type,
        content      => $contents,
        headers      => [ 'x-amz-storage-class', $s->file->storage_class ],
    );
    $s->_send_request(
        $signer->method => $signer->uri => {
            Authorization         => $signer->auth_header,
            Date                  => $signer->date,
            'content-type'        => $s->content_type,
            'content-md5'         => $signer->content_md5,
            'x-amz-storage-class' => $s->file->storage_class,
        },
        $$contents
    );
}    # end request()

__PACKAGE__->meta->make_immutable;

lib/AWS/S3/Roles/BucketAction.pm  view on Meta::CPAN

sub request {
    my $s = shift;

    my $signer = AWS::S3::Signer->new(
        s3     => $s->s3,
        method => $s->_action,
        uri    => $s->_uri
    );
    $s->_send_request(
        $signer->method => $signer->uri => {
            Authorization => $signer->auth_header,
            Date          => $signer->date,
        }
    );
}    # end request()

1;

lib/AWS/S3/Signer.pm  view on Meta::CPAN

    isa      => 'Str',
    lazy     => 1,
    default  => sub {
        my $s    = shift;
        my $hmac = Digest::HMAC_SHA1->new( $s->s3->secret_access_key );
        $hmac->add( $s->string_to_sign() );
        return encode_base64( $hmac->digest, '' );
    }
);

sub auth_header {
    my $s = shift;

    return 'AWS ' . $s->s3->access_key_id . ':' . $s->signature;
}    # end auth_header()

sub _trim {
    my ( $value ) = @_;
    $value =~ s/^\s+//;
    $value =~ s/\s+$//;
    return $value;
}    # end _trim()

1;

lib/AWS/S3/Signer/V4.pm  view on Meta::CPAN

    return $uri if $uri->query_param('X-Amz-Signature');

    my $scope = $self->_scope($request);

    $uri->query_param( 'X-Amz-Algorithm'  => $self->_algorithm );
    $uri->query_param( 'X-Amz-Credential' => $self->access_key . '/' . $scope );
    $uri->query_param( 'X-Amz-Date'       => $self->_datetime($request) );
    $uri->query_param( 'X-Amz-Expires'    => $expires ) if $expires;
    $uri->query_param( 'X-Amz-SignedHeaders' => 'host' );

# If there was a security token passed, we need to supply it as part of the authorization
# because AWS requires it to validate IAM Role temporary credentials.

    if ( defined( $self->{security_token} ) ) {
        $uri->query_param( 'X-Amz-Security-Token' => $self->{security_token} );
    }

# Since we're providing auth via query parameters, we need to include UNSIGNED-PAYLOAD
# http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
# it seems to only be needed for S3.

    if ( $scope =~ /\/s3\/aws4_request$/ ) {
        $self->_sign( $request, undef, 'UNSIGNED-PAYLOAD' );
    }
    else {
        $self->_sign($request);
    }

    my ( $algorithm, $credential, $signedheaders, $signature ) =

t/aws/s3/signer.t  view on Meta::CPAN

);
is( $signer->canonicalized_amz_headers,'','canonicalized_amz_headers' );
is( $signer->canonicalized_resource,'/maibucket/boz','canonicalized_resource' );
is( $signer->content_type,'text/plain','content_type' );
is( $signer->content_md5,'XrY7u+Ae7tCTyyK7j1rNww==','content_md5' );
is( ${ $signer->content },'hello world','content' );
is( $signer->content_length,11,'content_length' );
like( $signer->signature,qr/^.{28}$/,'signature' );

note( "methods" );
like( $signer->auth_header,qr/AWS foo:.{28}/,'auth_header' );

done_testing();



( run in 3.638 seconds using v1.01-cache-2.11-cpan-5c0b1e786e0 )