GDPR-IAB-TCFv2
view release on metacpan or search on metacpan
lib/GDPR/IAB/TCFv2/PublisherTC.pm view on Meta::CPAN
}
sub is_purpose_consent_allowed {
my ($self, $id) = @_;
croak "invalid purpose id $id: must be between 1 and @{[ MAX_PURPOSE_ID ]}" if $id < 1 || $id > MAX_PURPOSE_ID;
return $self->_safe_is_purpose_consent_allowed($id);
}
sub is_purpose_legitimate_interest_allowed {
my ($self, $id) = @_;
croak "invalid purpose id $id: must be between 1 and @{[ MAX_PURPOSE_ID ]}" if $id < 1 || $id > MAX_PURPOSE_ID;
return $self->_safe_is_purpose_legitimate_interest_allowed($id);
}
sub is_custom_purpose_consent_allowed {
my ($self, $id) = @_;
croak "invalid custom purpose id $id: must be between 1 and @{[ $self->{num_custom_purposes} ]}"
if $id < 1 || $id > $self->{num_custom_purposes};
return $self->_safe_is_custom_purpose_consent_allowed($id);
}
sub is_custom_purpose_legitimate_interest_allowed {
my ($self, $id) = @_;
croak "invalid custom purpose id $id: must be between 1 and @{[ $self->{num_custom_purposes} ]}"
if $id < 1 || $id > $self->{num_custom_purposes};
return $self->_safe_is_custom_purpose_legitimate_interest_allowed($id);
}
sub TO_JSON {
my $self = shift;
my %consents = map { $_ => $self->_safe_is_purpose_consent_allowed($_) } 1 .. MAX_PURPOSE_ID;
my %legitimate_interests = map { $_ => $self->_safe_is_purpose_legitimate_interest_allowed($_) } 1 .. MAX_PURPOSE_ID;
my %custom_purpose_consents
= map { $_ => $self->_safe_is_custom_purpose_consent_allowed($_) } 1 .. $self->{num_custom_purposes};
my %custom_purpose_legitimate_interests
= map { $_ => $self->_safe_is_custom_purpose_legitimate_interest_allowed($_) } 1 .. $self->{num_custom_purposes};
return {
consents => $self->_format_json_subsection(\%consents, MAX_PURPOSE_ID),
legitimate_interests => $self->_format_json_subsection(\%legitimate_interests, MAX_PURPOSE_ID),
custom_purposes => {
consents => $self->_format_json_subsection(\%custom_purpose_consents, $self->{num_custom_purposes}),
legitimate_interests =>
$self->_format_json_subsection(\%custom_purpose_legitimate_interests, $self->{num_custom_purposes}),
},
};
}
sub _format_json_subsection {
my ($self, $data, $max) = @_;
my ($false, $true) = @{$self->{options}->{json}->{boolean_values}};
if (!!$self->{options}->{json}->{compact}) {
return [grep { $data->{$_} } 1 .. $max,];
}
my $verbose = !!$self->{options}->{json}->{verbose};
return $data if $verbose;
return {map { $_ => $true } grep { $data->{$_} } keys %{$data}};
}
sub _safe_is_purpose_consent_allowed {
my ($self, $id) = @_;
return scalar(is_set($self->{data}, OFFSETS->{PURPOSE_CONSENT_ALLOWED} + $id - 1));
}
sub _safe_is_purpose_legitimate_interest_allowed {
my ($self, $id) = @_;
return scalar(is_set($self->{data}, OFFSETS->{PURPOSE_LIT_ALLOWED} + $id - 1));
}
sub _safe_is_custom_purpose_consent_allowed {
my ($self, $id) = @_;
return scalar(is_set($self->{data}, OFFSETS->{CUSTOM_PURPOSES_CONSENT} + $id - 1));
}
sub _safe_is_custom_purpose_legitimate_interest_allowed {
my ($self, $id) = @_;
return scalar(is_set($self->{data}, $self->{custom_purpose_lit_offset} + $id - 1));
}
1;
__END__
=head1 NAME
GDPR::IAB::TCFv2::PublisherTC - TCF v2.3 publisher TC section parser
=head1 SYNOPSIS
use GDPR::IAB::TCFv2::PublisherTC;
my $publisher_tc_data = '...';
my $publisher_tc = GDPR::IAB::TCFv2::PublisherTC->Parse(
data => $publisher_tc_data,
data_size => length($publisher_tc_data) * 8,
options => { json => {} },
);
my $num = $publisher_tc->num_custom_purposes;
if ($publisher_tc->is_purpose_consent_allowed(1)) {
# ...
}
=head1 CONSTRUCTOR
( run in 0.555 second using v1.01-cache-2.11-cpan-acf6aa7dc9e )