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/],
);
}
sub generate_vapid_keys {
my $curve = Crypt::PK::ECC->new();
$curve->generate_key('prime256v1');
my $priv = $curve->export_key_raw('private');
my $pub = $curve->export_key_raw('public');
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
=cut
=head1 SYNOPSIS
use VAPID qw/generate/;
my ($public, $private) = generate_vapid_keys()
validate_public_key($public);
validate_private_key($private);
...
my $auth_headers = generate_vapid_header(
'https://updates.push.services.mozilla.com',
'mailto:email@lnation.org',
$public,
$private,
time + 60,
$enc
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.
=head1 Example
The following is pseudo code but it should get you started.
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 0.557 second using v1.01-cache-2.11-cpan-a5abf4f5562 )