AWS-SQS-Simple

 view release on metacpan or  search on metacpan

lib/AWS/SQS/Simple.pm  view on Meta::CPAN

package AWS::SQS::Simple;

use warnings                                       ;
use strict                                         ; 

use Carp                                           ;

use utf8                                           ;

use LWP::UserAgent                                 ;
use HTTP::Headers                                  ;

use URI::Escape                                    ;

use Encode qw( encode )                            ;

use Digest::SHA qw(hmac_sha256 hmac_sha256_base64) ;
use Digest::HMAC_SHA1                              ;

lib/AWS/SQS/Simple.pm  view on Meta::CPAN

    my $url_additional_str = $self->{ AWS_ACCOUNT_ID } . '/' . delete( $params->{ QUEUE_NAME } ) ;

    my $sign_query = _get_signed_query( $params ) ;
    
    my $to_escape = qr{^(?:Signature|MessageBody|ReceiptHandle)|\.\d+\.(?:MessageBody|ReceiptHandle)$} ;
    foreach my $key( keys %$params ) {

        next unless $key =~ m/$to_escape/    ;
        next unless exists $params->{ $key } ;

        my $octets        = encode( 'utf-8-strict', $params->{ $key } ) ;
        $params->{ $key } = escape( $octets )                           ;

    }

    my $uri_str   = join('&', map { $_ . '=' . $params->{$_} } keys %$params )             ;

    my $sign_str  = "GET\n".$self->{ END_POINT }."\n/"                                     ; 
       $sign_str .= $url_additional_str . "/" if( $params->{ Action } ne "CreateQueue"  )  ;
       $sign_str .= "\n" . $sign_query                                                     ;

lib/AWS/SQS/Simple.pm  view on Meta::CPAN

    
    my $secret_access_key = $self->{ SECRET_ACCESS_KEY } ;

    my $digest = encode_base64( hmac_sha256($query, $secret_access_key ),'' ) ;

    return $digest ;
}

=head2 _get_signed_query
	
This function utf8 encodes and uri escapes the parameters passed to generate the signed string.

=cut

sub _get_signed_query {

    my $params = shift ;

    my $to_sign ;
    for my $key( sort keys %$params ) {

        $to_sign .= '&' if $to_sign ;

        my $key_octets   = encode('utf-8-strict', $key              ) ;
        my $value_octets = encode('utf-8-strict', $params->{ $key } ) ;

        $to_sign .= escape( $key_octets ) . '=' . escape( $value_octets ) ;

    }
    
    return $to_sign ;
}


=head2 escape 

    URI escape only the characters that should be escaped, according to RFC 3986

=cut

sub escape {

    my ($str) = @_;

    return uri_escape_utf8( $str,'^A-Za-z0-9\-_.~' ) ;
}

=head2 _generate_timestamp 

 Calculate current TimeStamp 

=cut 

sub _generate_timestamp {



( run in 0.576 second using v1.01-cache-2.11-cpan-4d50c553e7e )