diff options
Diffstat (limited to 'extensions/PhabBugz/lib/WebService.pm')
-rw-r--r-- | extensions/PhabBugz/lib/WebService.pm | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/extensions/PhabBugz/lib/WebService.pm b/extensions/PhabBugz/lib/WebService.pm index 11439ba70..0d88114f6 100644 --- a/extensions/PhabBugz/lib/WebService.pm +++ b/extensions/PhabBugz/lib/WebService.pm @@ -16,6 +16,7 @@ use base qw(Bugzilla::WebService); use Bugzilla::Attachment; use Bugzilla::Bug; use Bugzilla::BugMail; +use Bugzilla::Constants; use Bugzilla::Error; use Bugzilla::Extension::Push::Util qw(is_public); use Bugzilla::User; @@ -34,7 +35,7 @@ use Bugzilla::Extension::PhabBugz::Util qw( request ); -use Data::Dumper; +use MIME::Base64 qw(decode_base64); use constant PUBLIC_METHODS => qw( revision @@ -43,12 +44,23 @@ use constant PUBLIC_METHODS => qw( sub revision { my ($self, $params) = @_; + # Phabricator only supports sending credentials via HTTP Basic Auth + # so we exploit that function to pass in an API key as the password + # of basic auth. BMO does not support basic auth but does support + # use of API keys. + my $http_auth = Bugzilla->cgi->http('Authorization'); + $http_auth =~ s/^Basic\s+//; + $http_auth = decode_base64($http_auth); + my ($login, $api_key) = split(':', $http_auth); + $params->{'Bugzilla_login'} = $login; + $params->{'Bugzilla_api_key'} = $api_key; + + my $user = Bugzilla->login(LOGIN_REQUIRED); + unless (defined $params->{revision} && detaint_natural($params->{revision})) { ThrowCodeError('param_required', { param => 'revision' }) } - my $user = Bugzilla->set_user(Bugzilla::User->new({ name => 'conduit@mozilla.bugs' })); - # Obtain more information about the revision from Phabricator my $revision_id = $params->{revision}; my @revisions = get_revisions_by_ids([$revision_id]); @@ -65,7 +77,7 @@ sub revision { if (is_public($bug)) { $result = make_revision_public($revision_id); } - # Else bug is private + # else bug is private else { my $phab_sync_groups = Bugzilla->params->{phabricator_sync_groups} || ThrowUserError('invalid_phabricator_sync_groups'); |