summaryrefslogtreecommitdiffstats
path: root/auth.cgi
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@mozilla.com>2015-06-16 21:35:13 +0200
committerDylan William Hardison <dylan@hardison.net>2015-06-16 21:35:13 +0200
commitd2d610f447e9d2e100ee1634fac6c69f81ca1a1c (patch)
treef9f11fd7053745d0ad05c435684d6eef146f6973 /auth.cgi
parenta48e145a7b49d54937cc8672d4e2e71780a08e15 (diff)
downloadbugzilla-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-xauth.cgi36
1 files changed, 25 insertions, 11 deletions
diff --git a/auth.cgi b/auth.cgi
index ad9017048..dcce5c458 100755
--- a/auth.cgi
+++ b/auth.cgi
@@ -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);