AWS-CloudFront

 view release on metacpan or  search on metacpan

inc/Module/Install/Win32.pm  view on Meta::CPAN

	$self->load('get_file');

	require Config;
	return unless (
		$^O eq 'MSWin32'                     and
		$Config::Config{make}                and
		$Config::Config{make} =~ /^nmake\b/i and
		! $self->can_run('nmake')
	);

	print "The required 'nmake' executable not found, fetching it...\n";

	require File::Basename;
	my $rv = $self->get_file(
		url       => 'http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe',
		ftp_url   => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe',
		local_dir => File::Basename::dirname($^X),
		size      => 51928,
		run       => 'Nmake15.exe /o > nul',
		check_for => 'Nmake.exe',
		remove    => 1,

lib/AWS/CloudFront.pm  view on Meta::CPAN

use AWS::CloudFront::Distribution;
use AWS::CloudFront::S3Origin;
use AWS::CloudFront::CustomOrigin;
use AWS::CloudFront::OriginAccessIdentity;

our $VERSION = '0.003';

has 'access_key_id' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'secret_access_key' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'ua' => (
  is        => 'ro',
  isa       => 'LWP::UserAgent',
  lazy      => 1,
  required  => 0,
  default => sub { LWP::UserAgent->new( agent => 'foo/bar v1.2' ) }
);


sub request
{
  my ($s, $type, %args) = @_;
  
  my $class = "AWS::CloudFront::Request::$type";
  load_class($class);

lib/AWS/CloudFront/CustomOrigin.pm  view on Meta::CPAN


package S3::CloudFront::CustomOrigin;

use VSO;
use Data::Validate::Domain 'is_domain';


has 'DNSName' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
  where     => sub {
    is_domain($_, { do_allow_underscore => 1 })
  }
);


has 'HTTPPort' => (
  is        => 'ro',
  isa       => 'Int',
  required  => 0,
  default   => sub { 80 },
  where     => sub {
    $_ == 80 ||
    $_ == 443 ||
    (
      $_ >= 1024 &&
      $_ <= 65535
    )
  }
);

has 'HTTPSPort' => (
  is        => 'ro',
  isa       => 'Int',
  required  => 0,
  default   => sub { 443 },
  where     => sub {
    $_ == 80 ||
    $_ == 443 ||
    (
      $_ >= 1024 &&
      $_ <= 65535
    )
  }
);

has 'OriginProtocolPolicy' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
  where     => sub {
    $_ =~ m{^(http-only|match-viewer)$}
  }
);

1;# return true:

lib/AWS/CloudFront/Distribution.pm  view on Meta::CPAN


package AWS::CloudFront::Distribution;

use VSO;
use AWS::CloudFront::OriginAccessIdentity;

has 'cf' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront',
  required  => 1,
);

has 'Id' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'Status'  => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
  where     => sub {
    m{^(?:Deployed|InProgress)$}
  }
);

has 'LastModifiedTime' => (
  is        => 'ro',
  isa       => 'Maybe[Str]',
  where     => sub {
    # eg: 2011-05-05T21:11:39.546Z
    m{^(?:\d\d\d\d-\d\d-\d\dT\d+:\d\d:\d\d\.\d+Z)$}
  }
);

has 'InProgressValidationBatches' => (
  is        => 'ro',
  isa       => 'Int',
  required  => 0,
  default   => sub { 0 }
);

has 'DomainName'  => (
  is        => 'rw',
  isa       => 'Str',
  required  => 1,
);

has 'ActiveTrustedSigners' => (
  is        => 'ro',
  isa       => 'ArrayRef[AWS::CloudFront::ActiveTrustedSigner]',
  required  => 0,
);

has 'Origin'  => (
  is        => 'ro',
  isa       => 'AWS::CloudFront::S3Origin|AWS::CloudFront::CustomOrigin',
  required  => 1,
);

has 'CallerReference' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
  lazy      => 1,
  default   => sub {
    my $s = shift;
    $s->cf->distribution( Id => $s->Id )->CallerReference
  },
);

has 'CNAME' => (
  is        => 'rw',
  isa       => 'Str',
  required  => 0,
);

has 'Comment' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
);

has 'Enabled' => (
  is        => 'rw',
  isa       => 'Bool',
  required  => 1,
);

has 'DefaultRootObject' => (
  is        => 'rw',
  isa       => 'Str',
  required  => 0,
);

has 'Logging' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront::Logging',
  required  => 0,
);

has 'TrustedSigners' => (
  is        => 'ro',
  isa       => 'ArrayRef[AWS::CloudFront::TrustedSigner]',
  required  => 0,
);

has 'OriginAccessIdentity' => (
  is        => 'ro',
  isa       => 'Maybe[AWS::CloudFront::OriginAccessIdentity]',
  required  => 0,
  lazy      => 1,
  default   => sub {
    my $s = shift;
    
    foreach my $ident ( $s->cf->origin_access_identities )
    {
    
    }# end foreach()
  }
);

lib/AWS/CloudFront/DistributionConfig.pm  view on Meta::CPAN


package AWS::CloudFront::DistributionConfig;

use VSO;
use Data::Validate::Domain 'is_domain';

has 'S3Origin' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront::S3Origin',
  required  => 0,
);

has 'CustomOrigin' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront::CustomOrigin',
  required  => 0,
);

has 'CallerReference' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'CNAME' => (
  is        => 'rw',
  isa       => 'Str',
  required  => 0,
  where     => sub {
    is_domain($_, {do_allow_underscore => 1})
  }
);

has 'Comment' => (
  is        => 'rw',
  isa       => 'Str',
  required  => 0,
);

has 'Enabled' => (
  is        => 'rw',
  isa       => 'Str',
  required  => 1,
  where     => sub {
    $_ =~ m{^(true|false)$}
  }
);

has 'DefaultRootObject' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
  where     => sub {
    (! defined $_) ||
    (! length $_) ||
    $_ =~ m{^([
      a-z
      A-Z
      0-9
      _\-\.\*\$\/\~"'\&
      |\&amp;
    ]+)$}x;
  }
);

has 'Logging' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront::Logging',
  required  => 0,
);

has 'TrustedSigners' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront::TrustedSigners',
  required  => 0,
);

has 'RequiredProtocols' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront::RequiredProtocols',
  required  => 0,
);

sub BUILD
{
  my $s = shift;
  
  die 'Must specify either an S3Origin or a CustomOrigin.'
    unless $s->S3Origin || $s->CustomOrigin;
  die 'You cannot use both S3Origin and CustomOrigin in the same distribution.'
    if $s->S3Origin && $s->CustomOrigin;

lib/AWS/CloudFront/Logging.pm  view on Meta::CPAN

use VSO;

subtype 'AWS::CloudFront::Logging::Prefix'
  => as       'Str'
  => where    { length($_) <= 256 && $_ !~ m{^/} && $_ =~ m{/$} }
  => message  { "length <= 256, can't start with '/' and must end with '/'" }

has 'Bucket' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'Prefix' => (
  is        => 'ro',
  isa       => 'Maybe[AWS::CloudFront::Logging::Prefix]',
);

1;# return true:

lib/AWS/CloudFront/OriginAccessIdentity.pm  view on Meta::CPAN


package
AWS::CloudFront::OriginAccessIdentity;

use VSO;

has 'CallerReference' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'Comment' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
  default   => sub { '' },
);

has 'Location' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
);

has 'Id' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'S3CanonicalUserId' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

1;# return true:

lib/AWS/CloudFront/Request.pm  view on Meta::CPAN


package
AWS::CloudFront::Request;
use VSO;
use HTTP::Request;
use AWS::CloudFront::ResponseParser;

has 'cf' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront',
  required  => 1,
);

has 'type' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'protocol' => (
  is        => 'ro',
  isa       => 'Str',
  lazy      => 1,
  default   => sub { 'https' }
);


lib/AWS/CloudFront/Request/CreateDistribution.pm  view on Meta::CPAN

use VSO;
use AWS::CloudFront::Signer;
use AWS::CloudFront::ResponseParser;
use Time::HiRes 'gettimeofday';

extends 'AWS::CloudFront::Request';

has 'Origin' => (
  is          => 'ro',
  isa         => 'AWS::CloudFront::S3Origin|AWS::CloudFront::CustomOrigin',
  required    => 1,
);

has 'CallerReference' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
  lazy      => 1,
  default   => sub { gettimeofday() },
);

has 'Logging' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront::Logging',
  required  => 0,
);

has 'CNAME' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
);

has 'Comment' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
  default   => sub { '' }
);

has 'Enabled' => (
  is        => 'ro',
  isa       => 'Bool',
  required  => 0,
  default   => sub { 1 },
);

has 'DefaultRootObject' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
);


sub request
{
  my $s = shift;
  
  my $uri = 'https://cloudfront.amazonaws.com/2010-11-01/distribution';

  my $xml = <<"XML";

lib/AWS/CloudFront/Request/CreateOriginAccessIdentity.pm  view on Meta::CPAN


use VSO;
use AWS::CloudFront::Signer;
use AWS::CloudFront::ResponseParser;

extends 'AWS::CloudFront::Request';

has 'CallerReference' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'Comment' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
  default   => sub { '' },
);


sub request
{
  my $s = shift;
  
  my $uri = 'https://cloudfront.amazonaws.com/2010-11-01/origin-access-identity/cloudfront';

lib/AWS/CloudFront/Request/DeleteDistribution.pm  view on Meta::CPAN


use VSO;
use AWS::CloudFront::Signer;
use AWS::CloudFront::ResponseParser

extends 'AWS::CloudFront::Request';

has 'Id' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);


sub request
{
  my $s = shift;
  
  # First get the etag:
  my $etag = (sub{
    my $uri = 'https://cloudfront.amazonaws.com/2010-11-01/distribution/' . $s->Id;

lib/AWS/CloudFront/Request/GetDistribution.pm  view on Meta::CPAN


use VSO;
use AWS::CloudFront::Signer;
use AWS::CloudFront::ResponseParser;

extends 'AWS::CloudFront::Request';

has 'Id' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);


sub request
{
  my $s = shift;
  
  my $uri = 'https://cloudfront.amazonaws.com/2010-11-01/distribution/' . $s->Id;
  my $signer = AWS::CloudFront::Signer->new(
    cf  => $s->cf,

lib/AWS/CloudFront/Request/GetOriginAccessIdentity.pm  view on Meta::CPAN


use VSO;
use AWS::CloudFront::Signer;
use AWS::CloudFront::ResponseParser;

extends 'AWS::CloudFront::Request';

has 'Id' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);


sub request
{
  my $s = shift;
  
  my $uri = 'https://cloudfront.amazonaws.com/2010-11-01/origin-access-identity/cloudfront/' . $s->Id;
  my $signer = AWS::CloudFront::Signer->new(
    cf  => $s->cf,

lib/AWS/CloudFront/Request/GetOriginAccessIdentityList.pm  view on Meta::CPAN


use VSO;
use AWS::CloudFront::Signer;
use AWS::CloudFront::ResponseParser;

extends 'AWS::CloudFront::Request';

has 'Marker' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
);

has 'MaxItems' => (
  is        => 'ro',
  isa       => 'Int',
  required  => 0,
);


sub request
{
  my $s = shift;
  
  my $uri = 'https://cloudfront.amazonaws.com/2010-11-01/origin-access-identity/cloudfront';
  my @params = ( );
  push @params, 'Marker=' . $s->Marker if defined $s->Marker;

lib/AWS/CloudFront/Request/UpdateDistribution.pm  view on Meta::CPAN


use VSO;
use AWS::CloudFront::Signer;
use AWS::CloudFront::ResponseParser;

extends 'AWS::CloudFront::Request';

has 'Distribution' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront::Distribution',
  required  => 1,
);

sub d { shift->Distribution }


sub request
{
  my $s = shift;
  
  # First get the etag:

lib/AWS/CloudFront/ResponseParser.pm  view on Meta::CPAN


package 
AWS::CloudFront::ResponseParser;

use VSO;
use XML::Simple;

has 'expect_nothing' => (
  is        => 'ro',
  isa       => 'Int',
  required  => 1,
  default   => sub { 0 }
);

has 'response'  => (
  is        => 'ro',
  isa       => 'HTTP::Response',
  required  => 1,
);

has 'type'  => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'libxml'  => (
  is        => 'ro',
  isa       => 'XML::LibXML',
  required  => 1,
  default   => sub { XML::LibXML->new() },
);

has 'error_code' => (
  is        => 'rw',
  isa       => 'Str',
  required  => 0,
);

has 'error_message' => (
  is        => 'rw',
  isa       => 'Str',
  required  => 0,
);

has 'xpc' => (
  is        => 'ro',
  isa       => 'XML::LibXML::XPathContext',
  required  => 0,
);

has 'friendly_error' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
  default   => sub {
    my $s = shift;
    return unless $s->error_code || $s->error_message;
    $s->type . " call had errors: [" . $s->error_code . "] " . $s->error_message;
  }
);


sub BUILD
{

lib/AWS/CloudFront/S3Origin.pm  view on Meta::CPAN


package AWS::CloudFront::S3Origin;

use VSO;

has 'DNSName' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
);

has 'OriginAccessIdentity' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 0,
);

1;# return true:

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

use Encode;

my $METADATA_PREFIX      = 'x-amz-meta-';
my $AMAZON_HEADER_PREFIX = 'x-amz-';

enum 'AWS::CloudFront::HTTPMethod' => [qw( HEAD GET PUT POST DELETE )];

has 'cf' => (
  is        => 'ro',
  isa       => 'AWS::CloudFront',
  required  => 1,
);

has 'date' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
  default   => sub {
    time2str(time)
  }
);

has 'signature' => (
  is        => 'ro',
  isa       => 'Str',
  required  => 1,
  lazy      => 1,
  default   => sub {
    my $s = shift;
    encode_base64(hmac_sha1($s->date, $s->cf->secret_access_key));
  }
);


sub auth_header
{



( run in 0.594 second using v1.01-cache-2.11-cpan-0a6323c29d9 )