summaryrefslogtreecommitdiffstats
path: root/Bugzilla/WebService/Server.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Bugzilla/WebService/Server.pm')
-rw-r--r--Bugzilla/WebService/Server.pm147
1 files changed, 76 insertions, 71 deletions
diff --git a/Bugzilla/WebService/Server.pm b/Bugzilla/WebService/Server.pm
index c4bd3e605..2aed48e22 100644
--- a/Bugzilla/WebService/Server.pm
+++ b/Bugzilla/WebService/Server.pm
@@ -22,88 +22,93 @@ use Module::Runtime qw(require_module);
use Try::Tiny;
sub handle_login {
- my ($self, $class, $method, $full_method) = @_;
- # Throw error if the supplied class does not exist or the method is private
- ThrowCodeError('unknown_method', {method => $full_method}) if (!$class or $method =~ /^_/);
-
- # We never want to create a new session unless the user is calling the
- # login method. Setting dont_persist_session makes
- # Bugzilla::Auth::_handle_login_result() skip calling persist_login().
- if ($full_method ne 'User.login') {
- Bugzilla->request_cache->{dont_persist_session} = 1;
- }
-
- try {
- require_module($class);
- }
- catch {
- ThrowCodeError('unknown_method', {method => $full_method});
- FATAL($_);
- };
- return if ($class->login_exempt($method)
- and !defined Bugzilla->input_params->{Bugzilla_login});
- Bugzilla->login();
-
- Bugzilla::Hook::process(
- 'webservice_before_call',
- { 'method' => $method, full_method => $full_method });
+ my ($self, $class, $method, $full_method) = @_;
+
+ # Throw error if the supplied class does not exist or the method is private
+ ThrowCodeError('unknown_method', {method => $full_method})
+ if (!$class or $method =~ /^_/);
+
+ # We never want to create a new session unless the user is calling the
+ # login method. Setting dont_persist_session makes
+ # Bugzilla::Auth::_handle_login_result() skip calling persist_login().
+ if ($full_method ne 'User.login') {
+ Bugzilla->request_cache->{dont_persist_session} = 1;
+ }
+
+ try {
+ require_module($class);
+ }
+ catch {
+ ThrowCodeError('unknown_method', {method => $full_method});
+ FATAL($_);
+ };
+ return
+ if ($class->login_exempt($method)
+ and !defined Bugzilla->input_params->{Bugzilla_login});
+ Bugzilla->login();
+
+ Bugzilla::Hook::process('webservice_before_call',
+ {'method' => $method, full_method => $full_method});
}
sub datetime_format_inbound {
- my ($self, $time) = @_;
-
- my $converted = datetime_from($time, Bugzilla->local_timezone);
- if (!defined $converted) {
- ThrowUserError('illegal_date', { date => $time });
- }
- $time = $converted->ymd() . ' ' . $converted->hms();
- return $time
+ my ($self, $time) = @_;
+
+ my $converted = datetime_from($time, Bugzilla->local_timezone);
+ if (!defined $converted) {
+ ThrowUserError('illegal_date', {date => $time});
+ }
+ $time = $converted->ymd() . ' ' . $converted->hms();
+ return $time;
}
sub datetime_format_outbound {
- my ($self, $date) = @_;
-
- return undef if (!defined $date or $date eq '');
-
- my $time = $date;
- if (blessed($date)) {
- # We expect this to mean we were sent a datetime object
- $time->set_time_zone('UTC');
- } else {
- # We always send our time in UTC, for consistency.
- # passed in value is likely a string, create a datetime object
- $time = datetime_from($date, 'UTC');
- }
- return $time->iso8601();
+ my ($self, $date) = @_;
+
+ return undef if (!defined $date or $date eq '');
+
+ my $time = $date;
+ if (blessed($date)) {
+
+ # We expect this to mean we were sent a datetime object
+ $time->set_time_zone('UTC');
+ }
+ else {
+ # We always send our time in UTC, for consistency.
+ # passed in value is likely a string, create a datetime object
+ $time = datetime_from($date, 'UTC');
+ }
+ return $time->iso8601();
}
# ETag support
sub bz_etag {
- my ($self, $data) = @_;
- my $cache = Bugzilla->request_cache;
-
- if (Bugzilla->request_cache->{bz_etag_disable}) {
- return undef;
+ my ($self, $data) = @_;
+ my $cache = Bugzilla->request_cache;
+
+ if (Bugzilla->request_cache->{bz_etag_disable}) {
+ return undef;
+ }
+ elsif (defined $data) {
+
+ # Serialize the data if passed a reference
+ local $Storable::canonical = 1;
+ $data = freeze($data) if ref $data;
+
+ # Wide characters cause md5_base64() to die.
+ utf8::encode($data) if utf8::is_utf8($data);
+
+ # Append content_type to the end of the data
+ # string as we want the etag to be unique to
+ # the content_type. We do not need this for
+ # XMLRPC as text/xml is always returned.
+ if (blessed($self) && $self->can('content_type')) {
+ $data .= $self->content_type if $self->content_type;
}
- elsif (defined $data) {
- # Serialize the data if passed a reference
- local $Storable::canonical = 1;
- $data = freeze($data) if ref $data;
-
- # Wide characters cause md5_base64() to die.
- utf8::encode($data) if utf8::is_utf8($data);
-
- # Append content_type to the end of the data
- # string as we want the etag to be unique to
- # the content_type. We do not need this for
- # XMLRPC as text/xml is always returned.
- if (blessed($self) && $self->can('content_type')) {
- $data .= $self->content_type if $self->content_type;
- }
-
- $cache->{'bz_etag'} = md5_base64($data);
- }
- return $cache->{'bz_etag'};
+
+ $cache->{'bz_etag'} = md5_base64($data);
+ }
+ return $cache->{'bz_etag'};
}
1;