haikuwebkit/Websites/bugs.webkit.org/extensions/EWS/Extension.pm

93 lines
2.7 KiB
Perl
Raw Permalink Normal View History

EWS for security bugs https://bugs.webkit.org/show_bug.cgi?id=186291 <rdar://problem/40829658> Reviewed by Lucas Forschler Part 2 of 2. Adds a new Bugzilla extension that will automatically CC the EWS feeder queue on each bug that has a patch up for review, including security bugs. This allows the WebKit OpenSource Project to use an unprivileged Bugzilla account for the EWS feeder queue. * extensions/EWS/Config.pm: Added. * extensions/EWS/Extension.pm: Added. (new): Initialize some bookkeeping variables we use to track whether we have seen a value change event for the review flag and whether we need to CC the feeder. The latter we need to track because we can only make changes to the CC list in the callback bug_start_of_update(). (object_before_set): This callback is called each time a setter is called on a Bugzilla object. Check if the review flag was set to ? and do some bookkeeping. Although tempting to do such work in the callback flag_end_of_update() instead of object_before_set() doing such work would come AFTER we get callback bug_start_of_update() and hence after we have committed the CC list of the bug to the database. Moreover, the "interface to [flag_end_of_update()] is UNSTABLE and it may change in the future" according to <https://github.com/bugzilla/bugzilla/blob/d7cf1c91949248222806f5a32f485b12eab8806f/Bugzilla/Hook.pm#L797>. (bug_start_of_update): Add the EWS feeder queue to the list of CC members of the bug, if needed. (config_add_panels): Adds a new panel to the Administration Parameters screen. (isReviewFlag): Helper function that returns whether the specified Bugzilla::Object represents the review flag. * extensions/EWS/docs/en/rst/index-admin.rst: Added. * extensions/EWS/lib/ParamsPanelUI.pm: Added. (checkUser): Helper function to determine if there exists a Bugzilla user corresponding to the specified login name. (get_param_list): Add configurable field to the Administration Parameters screen to specify the login name of the EWS feeder queue. * extensions/EWS/template/en/default/admin/params/ews.html.tmpl: Added. Canonical link: https://commits.webkit.org/202080@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@232980 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-06-19 20:35:03 +00:00
# Copyright (C) 2018 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package Bugzilla::Extension::EWS;
use strict;
use warnings;
use parent qw(Bugzilla::Extension);
use Bugzilla::Constants;
use Bugzilla::Group;
use Bugzilla::User;
our $VERSION = "1.0.0";
sub isReviewFlag($);
sub new
{
my ($class, @args) = @_;
my $self = $class->SUPER::new(@args);
$self->{shouldCCFeeder} = 0;
$self->{reviewFlagSeen} = 0;
return $self;
}
sub object_before_set
{
my ($self, $args) = @_;
return if $self->{reviewFlagSeen};
return if !isReviewFlag($args->{object});
my $willChangeValue = defined($args->{field}) && $args->{field} eq "status";
return if !$willChangeValue;
my $reviewRequested = $args->{value} eq "?";
$self->{shouldCCFeeder} = 1 if $reviewRequested;
$self->{reviewFlagSeen} = 1;
}
sub bug_start_of_update
{
my ($self, $args) = @_;
return if !$self->{shouldCCFeeder};
my $feeder = new Bugzilla::User({name => Bugzilla->params->{"ews_feeder_login"}});
return if !$feeder || $feeder->can_see_bug($args->{bug}->id());
$args->{bug}->add_cc($feeder);
}
sub config_add_panels
{
my ($self, $args) = @_;
my $modules = $args->{panel_modules};
$modules->{EWS} = "Bugzilla::Extension::EWS::ParamsPanelUI";
}
###
# Helper functions
##
sub isReviewFlag($)
{
my ($mayBeFlag) = @_;
return $mayBeFlag->isa("Bugzilla::Flag") && $mayBeFlag->name() eq "review";
EWS for security bugs https://bugs.webkit.org/show_bug.cgi?id=186291 <rdar://problem/40829658> Reviewed by Lucas Forschler Part 2 of 2. Adds a new Bugzilla extension that will automatically CC the EWS feeder queue on each bug that has a patch up for review, including security bugs. This allows the WebKit OpenSource Project to use an unprivileged Bugzilla account for the EWS feeder queue. * extensions/EWS/Config.pm: Added. * extensions/EWS/Extension.pm: Added. (new): Initialize some bookkeeping variables we use to track whether we have seen a value change event for the review flag and whether we need to CC the feeder. The latter we need to track because we can only make changes to the CC list in the callback bug_start_of_update(). (object_before_set): This callback is called each time a setter is called on a Bugzilla object. Check if the review flag was set to ? and do some bookkeeping. Although tempting to do such work in the callback flag_end_of_update() instead of object_before_set() doing such work would come AFTER we get callback bug_start_of_update() and hence after we have committed the CC list of the bug to the database. Moreover, the "interface to [flag_end_of_update()] is UNSTABLE and it may change in the future" according to <https://github.com/bugzilla/bugzilla/blob/d7cf1c91949248222806f5a32f485b12eab8806f/Bugzilla/Hook.pm#L797>. (bug_start_of_update): Add the EWS feeder queue to the list of CC members of the bug, if needed. (config_add_panels): Adds a new panel to the Administration Parameters screen. (isReviewFlag): Helper function that returns whether the specified Bugzilla::Object represents the review flag. * extensions/EWS/docs/en/rst/index-admin.rst: Added. * extensions/EWS/lib/ParamsPanelUI.pm: Added. (checkUser): Helper function to determine if there exists a Bugzilla user corresponding to the specified login name. (get_param_list): Add configurable field to the Administration Parameters screen to specify the login name of the EWS feeder queue. * extensions/EWS/template/en/default/admin/params/ews.html.tmpl: Added. Canonical link: https://commits.webkit.org/202080@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@232980 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2018-06-19 20:35:03 +00:00
}
__PACKAGE__->NAME;