AWS-CloudFront
view release on metacpan or search on metacpan
lib/AWS/CloudFront/Request/UpdateDistribution.pm view on Meta::CPAN
package
AWS::CloudFront::Request::UpdateDistribution;
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:
my $etag = (sub{
my $uri = 'https://cloudfront.amazonaws.com/2010-11-01/distribution/' . $s->d->Id;
my $signer = AWS::CloudFront::Signer->new(
cf => $s->cf,
);
my $res = $s->_send_request( 'GET' => $uri => {
Authorization => $signer->auth_header,
'x-amz-date' => $signer->date,
});
return $res->response->header('etag');
})->();
my $uri = 'https://cloudfront.amazonaws.com/2010-11-01/distribution/' . $s->d->Id . '/config';
my $xml = <<"XML";
<?xml version="1.0" encoding="UTF-8"?>
<DistributionConfig xmlns="http://cloudfront.amazonaws.com/doc/2010-11-01/">
@{[ $s->_origin_xml ]}
<CallerReference>@{[ $s->d->CallerReference ]}</CallerReference>
@{[ $s->d->CNAME ? q(<CNAME>) . $s->d->CNAME . q(</CNAME>) : '' ]}
<Comment>@{[ $s->d->Comment ]}</Comment>
<Enabled>@{[ $s->d->Enabled ? 'true' : 'false' ]}</Enabled>
@{[ $s->d->DefaultRootObject ? ('<DefaultRootObject>' . $s->d->efaultRootObject. '</DefaultRootObject>') : '' ]}
@{[ $s->_logging_xml ]}
</DistributionConfig>
XML
my $signer = AWS::CloudFront::Signer->new(
cf => $s->d->cf,
);
$s->_send_request( 'POST' => $uri => {
Authorization => $signer->auth_header,
'x-amz-date' => $signer->date,
'if-match' => $etag,
}, $xml);
}# end request()
sub parse_response
{
my ($s, $res) = @_;
AWS::CloudFront::ResponseParser->new(
response => $res,
expect_nothing => 0,
type => $s->type,
);
}# end http_request()
sub _origin_xml
{
my $s = shift;
my $type = ref($s->d->Origin);
if( $type->isa('AWS::CloudFront::S3Origin') )
{
return <<"XML";
<S3Origin>
<DNSName>@{[ $s->d->Origin->DNSName ]}</DNSName>
</S3Origin>
XML
}
elsif( $type->isa('AWS::CloudFront::CustomOrigin') )
{
return <<"XML";
<CustomOrigin>
<DNSName>@{[ $s->d->Origin->DNSName ]}</DNSName>
<HTTPPort>@{[ $s->d->Origin->HTTPPort ]}</HTTPPort>
<OriginProtocolPolicy>@{[ $s->Origin->OriginProtocolPolicy ]}</OriginProtocolPolicy>
</CustomOrigin>
XML
}# end if()
}# end _origin_xml()
sub _logging_xml
( run in 0.881 second using v1.01-cache-2.11-cpan-39bf76dae61 )