Skip to content

Commit

Permalink
Bug 1175643 - Rewrite auth delegation to use a server-side POST inste…
Browse files Browse the repository at this point in the history
…ad of a client-side GET to delegate API Key

r/a=dkl
  • Loading branch information
dylanwh committed Aug 24, 2015
1 parent 5fd2b62 commit 07a68c6
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 4 deletions.
39 changes: 35 additions & 4 deletions auth.cgi
Expand Up @@ -23,6 +23,8 @@ use Bugzilla::Mailer qw(MessageToMTA);
use URI;
use URI::QueryParam;
use Digest::SHA qw(sha256_hex);
use LWP::UserAgent ();
use JSON qw(decode_json encode_json);

Bugzilla->login(LOGIN_REQUIRED);

Expand Down Expand Up @@ -88,10 +90,39 @@ if ($confirmed || $skip_confirmation) {
MessageToMTA($message);
}

$callback_uri->query_param(client_api_key => $api_key->api_key);
$callback_uri->query_param(client_api_login => $user->login);

print $cgi->redirect($callback_uri);
my $ua = LWP::UserAgent->new();
$ua->timeout(2);
$ua->protocols_allowed(['http', 'https']);
# If the URL of the proxy is given, use it, else get this information
# from the environment variable.
my $proxy_url = Bugzilla->params->{'proxy_url'};
if ($proxy_url) {
$ua->proxy(['http', 'https'], $proxy_url);
}
else {
$ua->env_proxy;
}
my $content = encode_json({ client_api_key => $api_key->api_key,
client_api_login => $user->login });
my $resp = $ua->post($callback_uri,
'Content-Type' => 'application/json',
Content => $content);
if ($resp->code == 200) {
$callback_uri->query_param(client_api_login => $user->login);
eval {
my $data = decode_json($resp->content);
$callback_uri->query_param(callback_result => $data->{result});
};
if ($@) {
ThrowUserError('auth_delegation_json_error', { json_text => $resp->content });
}
else {
print $cgi->redirect($callback_uri);
}
}
else {
ThrowUserError('auth_delegation_post_error', { code => $resp->code });
}
}
else {
$args{token} = issue_auth_delegation_token($callback);
Expand Down
9 changes: 9 additions & 0 deletions template/en/default/global/user-error.html.tmpl
Expand Up @@ -140,6 +140,15 @@
[% title = "Auth delegation can't be confirmed" %]
Auth delegation cannot be confirmed due to missing or invalid token.

[% ELSIF error == "auth_delegation_json_error" %]
[% title = "Auth delegation received invalid JSON" %]
Auth delegation received an invalid JSON response from auth consumer:
<pre>[% json_text FILTER html %]</pre>

[% ELSIF error == "auth_delegation_post_error" %]
[% title = "Auth delegation received invalid status code" %]
Auth delegation received an HTTP response other than 200 OK from auth consumer. Code: [% code FILTER html %]

[% ELSIF error == "auth_failure" %]
[% title = "Authorization Required" %]
[% admindocslinks = {'groups.html' => 'Group Security'} %]
Expand Down

0 comments on commit 07a68c6

Please sign in to comment.