diff options
author | Dylan William Hardison <dylan@mozilla.com> | 2015-06-16 21:35:13 +0200 |
---|---|---|
committer | Dylan William Hardison <dylan@hardison.net> | 2015-06-16 21:35:13 +0200 |
commit | d2d610f447e9d2e100ee1634fac6c69f81ca1a1c (patch) | |
tree | f9f11fd7053745d0ad05c435684d6eef146f6973 /auth.cgi | |
parent | a48e145a7b49d54937cc8672d4e2e71780a08e15 (diff) | |
download | bugzilla-d2d610f447e9d2e100ee1634fac6c69f81ca1a1c.tar.gz bugzilla-d2d610f447e9d2e100ee1634fac6c69f81ca1a1c.tar.xz |
Bug 1174057: Backport upstream bug 1170722 to add app_ids for auth delegation
Diffstat (limited to 'auth.cgi')
-rwxr-xr-x | auth.cgi | 36 |
1 files changed, 25 insertions, 11 deletions
@@ -22,6 +22,7 @@ use Bugzilla::Mailer qw(MessageToMTA); use URI; use URI::QueryParam; +use Digest::SHA qw(sha256_hex); Bugzilla->login(LOGIN_REQUIRED); @@ -61,20 +62,33 @@ if ($confirmed || $skip_confirmation) { { token => $token, callback => $callback }); } } - - my $new_key = Bugzilla::User::APIKey->create({ - user_id => $user->id, - description => $description, + my $app_id = sha256_hex($callback_uri, $description); + my $keys = Bugzilla::User::APIKey->match({ + user_id => $user->id, + app_id => $app_id, + revoked => 0, }); - my $template = Bugzilla->template_inner($user->setting('lang')); - my $vars = { user => $user, new_key => $new_key }; - my $message; - $template->process('email/new-api-key.txt.tmpl', $vars, \$message) - or ThrowTemplateError($template->error()); - MessageToMTA($message); + my $api_key; + if (@$keys) { + $api_key = $keys->[0]; + } + else { + $api_key = Bugzilla::User::APIKey->create({ + user_id => $user->id, + description => $description, + app_id => $app_id, + }); + my $template = Bugzilla->template_inner($user->setting('lang')); + my $vars = { user => $user, new_key => $api_key }; + my $message; + $template->process('email/new-api-key.txt.tmpl', $vars, \$message) + or ThrowTemplateError($template->error()); + + MessageToMTA($message); + } - $callback_uri->query_param(client_api_key => $new_key->api_key); + $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); |