From c1fa559e16cbaa5e7a3133f7ea0b086ea00ba650 Mon Sep 17 00:00:00 2001 From: Byron Jones Date: Thu, 5 Mar 2015 12:57:53 +0800 Subject: Bug 1128853: Bugzilla shouldn't try to write API tokens into the shadow DB r=dkl,a=glob --- Bugzilla.pm | 11 +++++++++++ Bugzilla/Token.pm | 5 +++++ template/en/default/account/prefs/prefs.html.tmpl | 1 + template/en/default/admin/components/create.html.tmpl | 1 + template/en/default/admin/components/edit.html.tmpl | 1 + template/en/default/admin/products/create.html.tmpl | 1 + template/en/default/admin/sudo.html.tmpl | 1 + template/en/default/attachment/create.html.tmpl | 1 + template/en/default/attachment/edit.html.tmpl | 1 + template/en/default/bug/create/create.html.tmpl | 1 + template/en/default/bug/show-header.html.tmpl | 1 + template/en/default/global/header.html.tmpl | 4 +++- template/en/default/list/list.html.tmpl | 1 + template/en/default/request/queue.html.tmpl | 1 + 14 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Bugzilla.pm b/Bugzilla.pm index 8e1f8886f..e27be0f7f 100644 --- a/Bugzilla.pm +++ b/Bugzilla.pm @@ -530,6 +530,11 @@ sub switch_to_main_db { return $class->dbh_main; } +sub is_shadow_db { + my $class = shift; + return $class->request_cache->{dbh} != $class->dbh_main; +} + sub fields { my ($class, $criteria) = @_; $criteria ||= {}; @@ -935,6 +940,12 @@ Switch from using the main database to using the shadow database. Change the database object to refer to the main database. +=item C + +Returns true if the currently active database is the shadow database. +Returns false if a the currently active database is the man database, or if a +shadow database is not configured or enabled. + =item C The current Parameters of Bugzilla, as a hashref. If C diff --git a/Bugzilla/Token.pm b/Bugzilla/Token.pm index 24ffad3c3..84d86b8c6 100644 --- a/Bugzilla/Token.pm +++ b/Bugzilla/Token.pm @@ -432,6 +432,9 @@ sub _create_token { trick_taint($tokentype); trick_taint($eventdata); + my $is_shadow = Bugzilla->is_shadow_db; + $dbh = Bugzilla->switch_to_main_db() if $is_shadow; + $dbh->bz_start_transaction(); my $token = GenerateUniqueToken(); @@ -444,8 +447,10 @@ sub _create_token { if (wantarray) { my (undef, $token_ts, undef) = GetTokenData($token); $token_ts = str2time($token_ts); + Bugzilla->switch_to_shadow_db() if $is_shadow; return ($token, $token_ts); } else { + Bugzilla->switch_to_shadow_db() if $is_shadow; return $token; } } diff --git a/template/en/default/account/prefs/prefs.html.tmpl b/template/en/default/account/prefs/prefs.html.tmpl index 21a932ef6..8875eb26f 100644 --- a/template/en/default/account/prefs/prefs.html.tmpl +++ b/template/en/default/account/prefs/prefs.html.tmpl @@ -55,6 +55,7 @@ [% PROCESS global/header.html.tmpl title = current_tab.label subheader = filtered_login + generate_api_token = 1 style_urls = ['skins/standard/admin.css'] javascript_urls = ['js/util.js', 'js/field.js', 'js/TUI.js'] doc_section = current_tab.doc_section diff --git a/template/en/default/admin/components/create.html.tmpl b/template/en/default/admin/components/create.html.tmpl index 4db4a489c..96c9ce384 100644 --- a/template/en/default/admin/components/create.html.tmpl +++ b/template/en/default/admin/components/create.html.tmpl @@ -14,6 +14,7 @@ [% title = BLOCK %]Add component to the [% product.name FILTER html %] product[% END %] [% PROCESS global/header.html.tmpl title = title + generate_api_token = 1 style_urls = ['skins/standard/admin.css'] yui = [ 'autocomplete' ] javascript_urls = [ "js/field.js" ] diff --git a/template/en/default/admin/components/edit.html.tmpl b/template/en/default/admin/components/edit.html.tmpl index 9998845e2..c4da1181b 100644 --- a/template/en/default/admin/components/edit.html.tmpl +++ b/template/en/default/admin/components/edit.html.tmpl @@ -18,6 +18,7 @@ [% END %] [% PROCESS global/header.html.tmpl title = title + generate_api_token = 1 style_urls = ['skins/standard/admin.css'] yui = [ 'autocomplete' ] javascript_urls = [ "js/field.js" ] diff --git a/template/en/default/admin/products/create.html.tmpl b/template/en/default/admin/products/create.html.tmpl index b34f67b62..0dcfd7283 100644 --- a/template/en/default/admin/products/create.html.tmpl +++ b/template/en/default/admin/products/create.html.tmpl @@ -17,6 +17,7 @@ [% PROCESS global/header.html.tmpl title = title + generate_api_token = 1 style_urls = ['skins/standard/admin.css'] javascript_urls = ['js/util.js', 'js/field.js'] yui = [ 'autocomplete' ] diff --git a/template/en/default/admin/sudo.html.tmpl b/template/en/default/admin/sudo.html.tmpl index b3f748697..8cdfb5204 100644 --- a/template/en/default/admin/sudo.html.tmpl +++ b/template/en/default/admin/sudo.html.tmpl @@ -8,6 +8,7 @@ [% PROCESS global/header.html.tmpl title = "Begin sudo session" + generate_api_token = 1 style_urls = ['skins/standard/admin.css'] doc_section = "administering/users.html#impersonating-users" %] diff --git a/template/en/default/attachment/create.html.tmpl b/template/en/default/attachment/create.html.tmpl index 13c13cdb9..e566b428e 100644 --- a/template/en/default/attachment/create.html.tmpl +++ b/template/en/default/attachment/create.html.tmpl @@ -16,6 +16,7 @@ title = title header = header subheader = subheader + generate_api_token = 1 style_urls = ['skins/standard/bug.css'] yui = [ 'autocomplete' ] javascript_urls = [ "js/attachment.js", 'js/field.js', "js/util.js", "js/TUI.js" ] diff --git a/template/en/default/attachment/edit.html.tmpl b/template/en/default/attachment/edit.html.tmpl index 497f89a8d..184cdde05 100644 --- a/template/en/default/attachment/edit.html.tmpl +++ b/template/en/default/attachment/edit.html.tmpl @@ -21,6 +21,7 @@ title = title header = header subheader = subheader + generate_api_token = 1 doc_section = "using/editing.html#attachments" javascript_urls = ['js/attachment.js', 'js/field.js'] style_urls = ['skins/standard/bug.css'] diff --git a/template/en/default/bug/create/create.html.tmpl b/template/en/default/bug/create/create.html.tmpl index 0815f3600..61faf1c1a 100644 --- a/template/en/default/bug/create/create.html.tmpl +++ b/template/en/default/bug/create/create.html.tmpl @@ -11,6 +11,7 @@ [% PROCESS global/header.html.tmpl title = title + generate_api_token = 1 yui = [ 'autocomplete', 'calendar', 'datatable', 'button' ] style_urls = ['skins/standard/bug.css'] javascript_urls = [ "js/attachment.js", "js/util.js", diff --git a/template/en/default/bug/show-header.html.tmpl b/template/en/default/bug/show-header.html.tmpl index f41890a46..583708492 100644 --- a/template/en/default/bug/show-header.html.tmpl +++ b/template/en/default/bug/show-header.html.tmpl @@ -23,6 +23,7 @@ [% title = title _ "($filtered_alias) " %] [% END %] [% title = title _ filtered_desc %] +[% generate_api_token = 1 %] [% yui = ['autocomplete', 'calendar'] %] [% yui.push('container') IF user.can_tag_comments %] [% javascript_urls = [ "js/util.js", "js/field.js" ] %] diff --git a/template/en/default/global/header.html.tmpl b/template/en/default/global/header.html.tmpl index a6548f999..bf952ad96 100644 --- a/template/en/default/global/header.html.tmpl +++ b/template/en/default/global/header.html.tmpl @@ -20,6 +20,7 @@ # style_urls: list. List of URLs to CSS style sheets. # message: string. A message to display to the user. May contain HTML. # atomlink: Atom link URL, May contain HTML + # generate_api_token: generate a token which can be used to make authenticated webservice calls #%] [% IF message %] @@ -32,6 +33,7 @@ onload = "" style_urls = [] yui = [] + generate_api_token = 0 %] [% SET yui_css = { @@ -175,7 +177,7 @@ version_required: "You must select a Version for this [% terms.bug %]." } - [% IF javascript_urls.containsany(['js/bug.js', 'js/field.js', 'js/comment-tagging.js']) %] + [% IF generate_api_token %] , api_token: '[% get_api_token FILTER js FILTER html %]' [% END %] }; diff --git a/template/en/default/list/list.html.tmpl b/template/en/default/list/list.html.tmpl index 259b26cf9..d5022778e 100644 --- a/template/en/default/list/list.html.tmpl +++ b/template/en/default/list/list.html.tmpl @@ -59,6 +59,7 @@ [% PROCESS global/header.html.tmpl title = title + generate_api_token = dotweak atomlink = "buglist.cgi?$urlquerypart&title=$title&ctype=atom" yui = [ 'autocomplete', 'calendar' ] javascript_urls = [ "js/util.js", "js/field.js", "js/TUI.js" ] diff --git a/template/en/default/request/queue.html.tmpl b/template/en/default/request/queue.html.tmpl index b2b76ba0b..7e8c44c8b 100644 --- a/template/en/default/request/queue.html.tmpl +++ b/template/en/default/request/queue.html.tmpl @@ -11,6 +11,7 @@ [% PROCESS global/header.html.tmpl title="Request Queue" + generate_api_token = 1 onload="var f = document.request_form; selectProduct(f.product, f.component, null, null, 'Any');" javascript_urls=["js/productform.js", "js/field.js"] style_urls = ['skins/standard/buglist.css'] -- cgit v1.2.1