VAPID
view release on metacpan or search on metacpan
lib/VAPID.pm view on Meta::CPAN
BEGIN {
$DEFAULT_SECONDS = 12 * 60 * 60; # 12 hours
$MAX_DEFAULT_SECONDS = 24 * 60 * 60; # 24 hours
%EX = (
generate_vapid_keys => [qw/all generate/],
generate_future_expiration_timestamp => [qw/all generate/],
generate_vapid_header => [qw/all generate/],
validate_subject => [qw/all validate/],
validate_public_key => [qw/all validate/],
validate_private_key => [qw/all validate/],
validate_expiration_key => [qw/all validate/],
validate_expiration => [qw/all validate/],
validate_subscription => [qw/all validate/],
encrypt_payload => [qw/all encrypt/],
build_push_request => [qw/all push/],
send_push_notification => [qw/all push/],
);
}
sub generate_vapid_keys {
lib/VAPID.pm view on Meta::CPAN
}
my $aud_uri = URI->new($aud);
if (!$aud_uri->host) {
die "VAPID audience is not a url.";
}
validate_subject($subject);
validate_public_key($pub);
$priv = validate_private_key($priv);
if ($expiration) {
validate_expiration($expiration);
} else {
$expiration = generate_future_expiration_timestamp();
}
my $payload = {
aud => $aud,
exp => $expiration,
lib/VAPID.pm view on Meta::CPAN
$pub = decode_base64url($pub);
if (length $pub != 65) {
die "VAPID public key should be 65 bytes long when decoded.";
}
return $pub;
}
sub validate_private_key {
my ($priv) = shift;
if (!$priv) {
die "No private key passed to validate_private_key";
}
if (ref $priv) {
die "VAPID private key is must be a URL safe Base 64 encoded string";
}
$priv = decode_base64url($priv);
if (length $priv != 32) {
die "VAPID private key should be 32 bytes long when decoded.";
lib/VAPID.pm view on Meta::CPAN
=head1 SYNOPSIS
use VAPID qw/all/;
my ($public, $private) = generate_vapid_keys();
# Validate keys
validate_public_key($public);
validate_private_key($private);
# Send a push notification
my $subscription = {
endpoint => $endpoint_from_browser,
keys => {
p256dh => $p256dh_from_browser,
auth => $auth_from_browser
}
};
lib/VAPID.pm view on Meta::CPAN
Generates a time that is in future based upon the number of seconds if passed, the default is 12 hours.
=head2 validate_subject
Validate the subject.
=head2 validate_public_key
Validate the public key.
=head2 validate_private_key
Validate the private key.
=head2 validate_expiration
Validate the expiration key.
=head2 validate_subscription
Validate a push subscription object. Expects a hash reference with:
t/01-test.t view on Meta::CPAN
use Test::More;
use VAPID qw/all/;
ok(my ($pub, $priv) = generate_vapid_keys());
ok(validate_subject('mailto:thisusedtobeanemail@gmail.com'));
ok(validate_public_key($pub));
ok(validate_private_key($priv));
ok(validate_expiration(time + 60));
ok(my $header = generate_vapid_header(
'https://fcm.googleapis.com',
'mailto:thisusedtobeanemail@gmail.com',
$pub,
$priv,
time + 60
));
( run in 1.468 second using v1.01-cache-2.11-cpan-f4bacf6e2b7 )