summaryrefslogtreecommitdiffstats
path: root/Bugzilla/WebService/Server/JSONRPC.pm
diff options
context:
space:
mode:
authorMax Kanat-Alexander <mkanat@bugzilla.org>2010-03-24 00:11:31 +0100
committerMax Kanat-Alexander <mkanat@bugzilla.org>2010-03-24 00:11:31 +0100
commit81714e248b1a1a3da1dd2d771118371bc8c7ffb0 (patch)
tree47e9b05188d377fc8ac7ab5cdaa041e36200bf9b /Bugzilla/WebService/Server/JSONRPC.pm
parentccb36aaa7adc9d07d74dd5c2e64763cc8749cf4c (diff)
downloadbugzilla-81714e248b1a1a3da1dd2d771118371bc8c7ffb0.tar.gz
bugzilla-81714e248b1a1a3da1dd2d771118371bc8c7ffb0.tar.xz
Bug 553774: Make User.login correctly return cookies under JSON-RPC
r=dkl, a=mkanat
Diffstat (limited to 'Bugzilla/WebService/Server/JSONRPC.pm')
-rw-r--r--Bugzilla/WebService/Server/JSONRPC.pm19
1 files changed, 19 insertions, 0 deletions
diff --git a/Bugzilla/WebService/Server/JSONRPC.pm b/Bugzilla/WebService/Server/JSONRPC.pm
index d07901a7f..3ec64c6bc 100644
--- a/Bugzilla/WebService/Server/JSONRPC.pm
+++ b/Bugzilla/WebService/Server/JSONRPC.pm
@@ -52,6 +52,25 @@ sub create_json_coder {
# Override the JSON::RPC method to return our CGI object instead of theirs.
sub cgi { return Bugzilla->cgi; }
+# Override the JSON::RPC method to use $cgi->header properly instead of
+# just printing text directly. This fixes various problems, including
+# sending Bugzilla's cookies properly.
+sub response {
+ my ($self, $response) = @_;
+ my $headers = $response->headers;
+ my @header_args;
+ foreach my $name ($headers->header_field_names) {
+ my @values = $headers->header($name);
+ $name =~ s/-/_/g;
+ foreach my $value (@values) {
+ push(@header_args, "-$name", $value);
+ }
+ }
+ my $cgi = $self->cgi;
+ print $cgi->header(-status => $response->code, @header_args);
+ print $response->content;
+}
+
sub type {
my ($self, $type, $value) = @_;