kfly8 / p5-Amon2-Plugin-Web-CpanelJSON

Amon2 plugin for Cpanel::JSON

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Actions Status Coverage Status MetaCPAN Release

NAME

Amon2::Plugin::Web::CpanelJSON - Cpanel::JSON::XS plugin

SYNOPSIS

use Amon2::Lite;
use Cpanel::JSON::XS::Type;
use HTTP::Status qw(:constants);

__PACKAGE__->load_plugins(qw/Web::CpanelJSON/);

use constant HelloWorld => {
    message => JSON_TYPE_STRING,
};

get '/' => sub {
    my $c = shift;
    return $c->render_json(+{ message => 'HELLO!' }, HelloWorld, HTTP_OK);
};

__PACKAGE__->to_app();

DESCRIPTION

This is a JSON plugin for Amon2. The differences from Amon2::Plugin::Web::JSON are as follows.

* Cpanel::JSON::XS::Type is available

* HTTP status code can be specified

* Flexible Configurations

METHODS

  • $c->render_json($data, $json_spec, $status=200);

    Generate JSON $data and $json_spec and returns instance of Plack::Response. $json_spec is a structure for JSON encoding defined in Cpanel::JSON::XS::Type.

CONFIGURATION

  • json

    Parameters of 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,
            }
        }
    );
  • secure_headers

    Parameters of HTTP::SecureHeaders. Default is as follows:

    content_security_policy           => "default-src 'none'",
    strict_transport_security         => 'max-age=631138519',
    x_content_type_options            => 'nosniff',
    x_download_options                => undef,
    x_frame_options                   => 'DENY',
    x_permitted_cross_domain_policies => 'none',
    x_xss_protection                  => '1; mode=block',
    referrer_policy                   => 'no-referrer',
  • json_escape_filter

    Escapes JSON to prevent XSS. Default is as follows:

    '+' => '\\u002b',
    '<' => '\\u003c',
    '>' => '\\u003e',
  • name

    Name of method. Default: 'render_json'

  • unbless_object

    Default: undef

    This option is preprocessing coderef encoding an blessed object in JSON. For example, the code using Object::UnblessWithJSONSpec is as follows:

    use Object::UnblessWithJSONSpec ();
    
    __PACKAGE__->load_plugins(
        'Web::CpanelJSON' => {
            unbless_object => \&Object::UnblessWithJSONSpec::unbless_with_json_spec,
        }
    );
    
    ...
    
    package Some::Object {
        use Mouse;
    
        has message => (
            is => 'ro',
        );
    }
    
    my $object = Some::Object->new(message => 'HELLO');
    $c->render_json($object, { message => JSON_TYPE_STRING })
    # => {"message":"HELLO"}
  • status_code_field

    Default: undef

    It specify the field name of JSON to be embedded in the X-API-Status header. Default is undef. If you set the undef to disable this X-API-Status header.

    __PACKAGE__->load_plugins(
        'Web::CpanelJSON' => { status_code_field => 'status' }
    );
    
    ...
    
    $c->render_json({ status => 200, message => 'ok' })
    # send response header 'X-API-Status: 200'

    In general JSON API error code embed in a JSON by JSON API Response body. But can not be logging the error code of JSON for the access log of a general Web Servers. You can possible by using the X-API-Status header.

  • defence_json_hijacking_for_legacy_browser

    Default: false

LICENSE

Copyright (C) kfly8.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

kfly8 kfly@cpan.org

About

Amon2 plugin for Cpanel::JSON

License:Other


Languages

Language:Perl 100.0%