From: mkanat%bugzilla.org <> Date: Mon, 5 Feb 2007 00:23:20 +0000 (+0000) Subject: Bug 358354: WebService should perform a login in xmlrpc.cgi X-Git-Tag: bugzilla-3.0rc1~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d26bc5f16b26e6e28d1ce952f7f6fd2c36e88411;p=thirdparty%2Fbugzilla.git Bug 358354: WebService should perform a login in xmlrpc.cgi Patch By Max Kanat-Alexander r=LpSolit, a=mkanat --- diff --git a/Bugzilla/WebService.pm b/Bugzilla/WebService.pm index b38596f2a6..0f32e74be3 100755 --- a/Bugzilla/WebService.pm +++ b/Bugzilla/WebService.pm @@ -41,6 +41,13 @@ sub datetime_format { return $iso_datetime; } +sub handle_login { + my ($self, $module, $method) = @_; + my $exempt = LOGIN_EXEMPT->{$module}; + return if $exempt && grep { $_ eq $method } @$exempt; + Bugzilla->login; +} + package Bugzilla::WebService::XMLRPC::Transport::HTTP::CGI; use strict; diff --git a/Bugzilla/WebService/Constants.pm b/Bugzilla/WebService/Constants.pm index d1f816c84c..39d25298d2 100755 --- a/Bugzilla/WebService/Constants.pm +++ b/Bugzilla/WebService/Constants.pm @@ -27,6 +27,8 @@ use base qw(Exporter); ERROR_AUTH_NODATA ERROR_UNIMPLEMENTED + + LOGIN_EXEMPT ); # This maps the error names in global/*-error.html.tmpl to numbers. @@ -98,4 +100,13 @@ use constant ERROR_AUTH_NODATA => 410; use constant ERROR_UNIMPLEMENTED => 910; use constant ERROR_GENERAL => 999; +# For some methods, we shouldn't call Bugzilla->login before we call them. +# This is a hash--package names pointing to an arrayref of method names. +use constant LOGIN_EXEMPT => { + # Callers may have to know the Bugzilla version before logging in, + # even on a requirelogin installation. + Bugzilla => ['version'], + User => ['offer_account_by_email', 'login'], +}; + 1; diff --git a/Bugzilla/WebService/User.pm b/Bugzilla/WebService/User.pm index 74e8f8e037..db02ff75ae 100755 --- a/Bugzilla/WebService/User.pm +++ b/Bugzilla/WebService/User.pm @@ -60,10 +60,7 @@ sub login { sub logout { my $self = shift; - - Bugzilla->login(LOGIN_OPTIONAL); Bugzilla->logout; - return undef; } diff --git a/xmlrpc.cgi b/xmlrpc.cgi index e4dfacc439..c17cab86c3 100755 --- a/xmlrpc.cgi +++ b/xmlrpc.cgi @@ -35,4 +35,5 @@ my $response = Bugzilla::WebService::XMLRPC::Transport::HTTP::CGI 'User' => 'Bugzilla::WebService::User', 'Product' => 'Bugzilla::WebService::Product', }) + ->on_action(\&Bugzilla::WebService::handle_login) ->handle;