HTTP-CSPHeader
view release on metacpan or search on metacpan
lib/HTTP/CSPHeader.pm view on Meta::CPAN
package HTTP::CSPHeader;
# ABSTRACT: manage dynamic content security policy headers
use v5.14;
use Moo;
use Fcntl qw/ O_NONBLOCK O_RDONLY /;
use List::Util 1.29 qw/ pairmap pairs /;
use Session::Token;
use Types::Common 2.000000 qw/ ArrayRef is_ArrayRef Bool HashRef IntRange Str /;
# RECOMMEND PREREQ: Ref::Util::XS
# RECOMMEND PREREQ: Type::Tiny::XS
use namespace::autoclean;
our $VERSION = 'v0.4.1';
has _base_policy => (
is => 'ro',
isa => HashRef,
required => 1,
init_arg => 'policy',
);
has policy => (
is => 'lazy',
isa => HashRef,
clearer => '_clear_policy',
init_arg => undef,
);
sub _build_policy {
my ($self) = @_;
my %policy = %{ $self->_base_policy };
if ( my @dirs = @{ $self->nonces_for } ) {
my $nonce = "'nonce-" . $self->nonce . "'";
for my $dir (@dirs) {
if ( defined $policy{$dir} ) {
$policy{$dir} .= " " . $nonce;
}
else {
$policy{$dir} = $nonce;
}
}
$self->_changed(1);
}
return \%policy;
}
has _changed => (
is => 'rw',
isa => Bool,
lazy => 1,
default => 0,
init_arg => undef,
);
has nonces_for => (
is => 'lazy',
isa => ArrayRef [Str],
builder => sub { return [] },
coerce => sub { my $val = is_ArrayRef( $_[0] ) ? $_[0] : [ $_[0] ] },
);
has nonce => (
is => 'lazy',
isa => Str,
clearer => '_clear_nonce',
( run in 2.582 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )