Amon2-Plugin-Web-CpanelJSON

 view release on metacpan or  search on metacpan

README.md  view on Meta::CPAN

    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 )