AWS-SNS-Verify
view release on metacpan or search on metacpan
lib/AWS/SNS/Verify.pm view on Meta::CPAN
$url_string ||= '';
return $url_string unless $self->validate_signing_cert_url;
my $url = URI::URL->new($url_string);
unless ( $url->can('host') ) {
ouch 'Bad SigningCertURL', "The SigningCertURL ($url_string) isn't a valid URL", $self;
}
my $host = $url->host;
# Match all regional SNS endpoints, e.g.
# sns.<region>.amazonaws.com (AWS)
# sns.us-gov-west-1.amazonaws.com (AWS GovCloud)
# sns.cn-north-1.amazonaws.com.cn (AWS China)
my $dot = qr/\./;
my $region = qr/[a-zA-Z0-9-]+/;
unless ($host =~ /^ sns $dot $region $dot amazonaws $dot com(\.cn)? $/x) {
ouch 'Bad SigningCertURL', "The SigningCertURL ($url_string) isn't an Amazon endpoint", $self;
}
return $url_string;
}
sub TO_JSON {
my $self = shift;
return unbless($self);
}
lib/AWS/SNS/Verify.pm view on Meta::CPAN
"UnsubscribeURL" : "https://sns.us-east-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:041977924901:foo:20b2d060-2a32-4506-9cb0-24b8b9e605e1",
"MessageAttributes" : {
"AWS.SNS.MOBILE.MPNS.Type" : {"Type":"String","Value":"token"},
"AWS.SNS.MOBILE.WNS.Type" : {"Type":"String","Value":"wns/badge"},
"AWS.SNS.MOBILE.MPNS.NotificationClass" : {"Type":"String","Value":"realtime"}
}
}
=item certificate_string
By default AWS::SNS::Verify will fetch the certificate string by issuing an HTTP GET request to C<SigningCertURL>. The SigningCertURL in the message must be a AWS SNS endpoint.
If you wish to use a cached version, then pass it in.
=item validate_signing_cert_url (default: true)
If you're using a fake SNS server in your local test environment, the SigningCertURL won't be an AWS endpoint. If so, set validate_signing_cert_url to 0.
Don't ever do this in any kind of Production environment.
=back
=head2 verify
Returns a 1 on success, or die with an L<Ouch> on a failure.
=head2 message
t/02_valid_cert_url.t view on Meta::CPAN
);
throws_ok(
sub { $sns->valid_cert_url("abc") },
qr/\QThe SigningCertURL (abc) isn't a valid URL/,
);
throws_ok(
sub { $sns->valid_cert_url("http://my.bad.com/cert.pem") },
qr|\QThe SigningCertURL (http://my.bad.com/cert.pem) isn't an Amazon endpoint|,
);
my $valid_euwest_url = "https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-b95095beb82e8f6a046b3aafc7f4149a.pem";
is(
$sns->valid_cert_url($valid_euwest_url),
$valid_euwest_url,
"Valid url returns url",
);
( run in 0.371 second using v1.01-cache-2.11-cpan-27979f6cc8f )