Amon2-Plugin-Web-CpanelJSON
view release on metacpan or search on metacpan
ascii => !!1,
```
Any parameters can be set:
```perl
__PACKAGE__->load_plugins(
'Web::CpanelJSON' => {
json => {
ascii => 0,
utf8 => 1,
canonical => 1,
}
}
);
```
- secure\_headers
Parameters of [HTTP::SecureHeaders](https://metacpan.org/pod/HTTP%3A%3ASecureHeaders). Default is as follows:
lib/Amon2/Plugin/Web/CpanelJSON.pm view on Meta::CPAN
Parameters of L<Cpanel::JSON::XS>. Default is as follows:
ascii => !!1,
Any parameters can be set:
__PACKAGE__->load_plugins(
'Web::CpanelJSON' => {
json => {
ascii => 0,
utf8 => 1,
canonical => 1,
}
}
);
=item secure_headers
Parameters of L<HTTP::SecureHeaders>. Default is as follows:
content_security_policy => "default-src 'none'",
t/10-config/json.t view on Meta::CPAN
use strict;
use warnings;
use utf8;
use Test::More;
use Cpanel::JSON::XS qw(decode_json);
use Cpanel::JSON::XS::Type;
use Encode qw(encode_utf8 decode_utf8);
{
package MyApp::Web::Default;
use parent qw(Amon2 Amon2::Web);
__PACKAGE__->load_plugins(
'Web::CpanelJSON',
);
sub encoding { 'utf-8' }
}
t/10-config/json.t view on Meta::CPAN
sub encoding { 'utf-8' }
}
{
package MyApp::Web::UTF8;
use parent qw(Amon2 Amon2::Web);
__PACKAGE__->load_plugins(
'Web::CpanelJSON', {
json => {
ascii => 0,
utf8 => 1,
},
}
);
sub encoding { 'utf-8' }
}
{
package MyApp::Web::None;
use parent qw(Amon2 Amon2::Web);
__PACKAGE__->load_plugins(
'Web::CpanelJSON', {
json => undef,
}
);
sub encoding { 'utf-8' }
}
my $c_default = MyApp::Web::Default->new(request => Amon2::Web::Request->new({}));
my $c_canonical = MyApp::Web::Canonical->new(request => Amon2::Web::Request->new({}));
my $c_utf8 = MyApp::Web::UTF8->new(request => Amon2::Web::Request->new({}));
my $c_none = MyApp::Web::None->new(request => Amon2::Web::Request->new({}));
subtest 'ascii' => sub {
my $src = { message => 'ã'};
subtest 'ascii default is on' => sub {
my $res = $c_default->render_json($src);
is $res->content, '{"message":"\u3042"}';
is_deeply decode_json($res->content), $src;
};
t/10-config/json.t view on Meta::CPAN
is_deeply decode_json($res->content), $src;
};
subtest 'sort keys' => sub {
my $res = $c_canonical->render_json($src);
is $res->content, '{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}';
is_deeply decode_json($res->content), $src;
};
};
subtest 'utf8' => sub {
my $src = { message => 'ã'};
subtest 'encode utf8' => sub {
my $res = $c_utf8->render_json($src);
is $res->content, encode_utf8('{"message":"ã"}');
is_deeply decode_json($res->content), $src;
};
};
subtest 'none' => sub {
my $src = { message => 'ã'};
subtest 'ascii is off' => sub {
my $res = $c_none->render_json($src);
is $res->content, '{"message":"ã"}';
is utf8::is_utf8($res->content), !!1;
my $json = Cpanel::JSON::XS->new->utf8(0);
is_deeply $json->decode($res->content), $src;
};
};
done_testing;
t/20-compatibility/007_json_hijacking.t view on Meta::CPAN
# copy test from Amon/t/600_plugins/007_json_hijacking.t
use strict;
use warnings;
use utf8;
use Test::More;
use Test::Requires 'JSON';
my $app = do {
package MyApp;
use parent qw(Amon2::Web Amon2);
#__PACKAGE__->load_plugins(qw(Web::JSON));
__PACKAGE__->load_plugins(
'Web::CpanelJSON' => {
defence_json_hijacking_for_legacy_browser => 1,
t/20-compatibility/007_json_x_api_status.t view on Meta::CPAN
# copy test from Amon/t/600_plugins/007_json_x_api_status.t
use strict;
use warnings;
use utf8;
use Test::More;
use Test::Requires 'JSON';
subtest 'default' => sub {
my $app = do {
package MyApp;
use parent qw(Amon2::Web Amon2);
#__PACKAGE__->load_plugins(qw(Web::JSON));
__PACKAGE__->load_plugins(qw(Web::CpanelJSON));
__PACKAGE__->new();
( run in 0.949 second using v1.01-cache-2.11-cpan-49f99fa48dc )