+++ /dev/null
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This Source Code Form is "Incompatible With Secondary Licenses", as
-# defined by the Mozilla Public License, v. 2.0.
-
-package Bugzilla::WebService::JSON;
-use 5.10.1;
-use Moo;
-
-use Bugzilla::Logging;
-use Bugzilla::WebService::JSON::Box;
-use JSON::MaybeXS;
-use Scalar::Util qw(refaddr blessed);
-use Package::Stash;
-
-use constant Box => 'Bugzilla::WebService::JSON::Box';
-
-has 'json' => (
- init_arg => undef,
- is => 'lazy',
- handles => {_encode => 'encode', _decode => 'decode'},
-);
-
-sub encode {
- my ($self, $value) = @_;
- return Box->new(json => $self, value => $value);
-}
-
-sub decode {
- my ($self, $box) = @_;
-
- if (blessed($box) && $box->isa(Box)) {
- return $box->value;
- }
- else {
- return $self->_decode($box);
- }
-}
-
-sub _build_json { JSON::MaybeXS->new }
-
-# delegation all the json options to the real json encoder.
-{
- my @json_methods = qw(
- utf8 ascii pretty canonical
- allow_nonref allow_blessed convert_blessed
- );
- my $stash = Package::Stash->new(__PACKAGE__);
- foreach my $method (@json_methods) {
- my $symbol = '&' . $method;
- $stash->add_symbol(
- $symbol => sub {
- my $self = shift;
- $self->json->$method(@_);
- return $self;
- }
- );
- }
-}
-
-
-1;
+++ /dev/null
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This Source Code Form is "Incompatible With Secondary Licenses", as
-# defined by the Mozilla Public License, v. 2.0.
-
-package Bugzilla::WebService::JSON::Box;
-use 5.10.1;
-use Moo;
-
-use overload '${}' => 'value', '""' => 'to_string', fallback => 1;
-
-has 'value' => (is => 'ro', required => 1);
-has 'json' => (is => 'ro', required => 1);
-has 'label' => (is => 'lazy');
-has 'encode' => (init_arg => undef, is => 'lazy', predicate => 'is_encoded');
-
-sub TO_JSON {
- my ($self) = @_;
-
- return $self->to_string;
-}
-
-sub to_string {
- my ($self) = @_;
-
- return $self->is_encoded ? $self->encode : $self->label;
-}
-
-sub _build_encode {
- my ($self) = @_;
-
- return $self->json->_encode($self->value);
-}
-
-sub _build_label {
- my ($self) = @_;
-
- return "" . $self->value;
-}
-
-1;
use HTTP::Message;
use MIME::Base64 qw(decode_base64 encode_base64);
-use Scalar::Util qw(blessed);
use List::MoreUtils qw(none);
-use Bugzilla::WebService::JSON;
#####################################
# Public JSON::RPC Method Overrides #
sub create_json_coder {
my $self = shift;
- my $json = Bugzilla::WebService::JSON->new;
+ my $json = $self->SUPER::create_json_coder(@_);
$json->allow_blessed(1);
$json->convert_blessed(1);
$json->allow_nonref(1);
# Implement JSONP.
if (my $callback = $self->_bz_callback) {
my $content = $response->content;
- if (blessed $content) {
- $content = $content->encode;
- }
# Prepend the JSONP response with /**/ in order to protect
# against possible encoding attacks (e.g., affecting Flash).
$response->content("/**/$callback($content)");
else {
push(@header_args, "-ETag", $etag) if $etag;
print $cgi->header(-status => $response->code, @header_args);
- my $content = $response->content;
- if (blessed $content) {
- $content = $content->encode;
- utf8::encode($content);
- }
- print $content;
+ print $response->content;
}
}
my $template = Bugzilla->template;
$content = "";
- $result->encode if blessed $result;
$template->process("rest.html.tmpl", { result => $result }, \$content)
|| ThrowTemplateError($template->error());
+++ /dev/null
-#!/usr/bin/perl
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This Source Code Form is "Incompatible With Secondary Licenses", as
-# defined by the Mozilla Public License, v. 2.0.
-use strict;
-use warnings;
-use 5.10.1;
-use lib qw( . lib local/lib/perl5 );
-
-use Scalar::Util qw(weaken);
-use Mojo::JSON qw(encode_json);
-use Scalar::Util qw(refaddr);
-use Test2::V0;
-
-use ok 'Bugzilla::WebService::JSON';
-
-my $json = Bugzilla::WebService::JSON->new;
-my $ref = {foo => 1};
-is(refaddr $json->decode($json->encode($ref)), refaddr $ref);
-
-my $box = $json->encode($ref);
-
-is($json->decode(q[{"foo":1}]), {foo => 1});
-is($json->decode($box), {foo => 1});
-
-is "$box", $box->label;
-
-$box->encode;
-
-is encode_json([ $box ]), encode_json([ encode_json($box->value) ]);
-is "$box", q[{"foo":1}];
-
-done_testing;