summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@hardison.net>2017-11-27 17:59:15 +0100
committerGitHub <noreply@github.com>2017-11-27 17:59:15 +0100
commitaa8e455c9735d5a7ea4703dba3f22a69e07b9698 (patch)
treebf9b9c454946e248593f7a39528d3f9a4cb079bd /scripts
parent6c437576ffbec1a3f7296302f8594f89653992dd (diff)
downloadbugzilla-aa8e455c9735d5a7ea4703dba3f22a69e07b9698.tar.gz
bugzilla-aa8e455c9735d5a7ea4703dba3f22a69e07b9698.tar.xz
no bug - tweaks for conduit/phabricator dev environments
* tweak * change around unsafe auth delegation to work in bmo container * fixes for critic errors
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/entrypoint.pl46
-rwxr-xr-xscripts/generate_conduit_data.pl162
2 files changed, 192 insertions, 16 deletions
diff --git a/scripts/entrypoint.pl b/scripts/entrypoint.pl
index 04d442180..f5abf4966 100755
--- a/scripts/entrypoint.pl
+++ b/scripts/entrypoint.pl
@@ -23,19 +23,41 @@ use IO::Async::Signal;
use constant CI => $ENV{CI};
-my $cmd = shift @ARGV;
-my $func = __PACKAGE__->can("cmd_$cmd")
- or die "unknown command: $cmd\n";
+my $cmd = shift @ARGV;
my $opts = __PACKAGE__->can("opt_$cmd") // sub { @ARGV };
+my $func = __PACKAGE__->can("cmd_$cmd") // sub {
+ check_data_dir();
+ wait_for_db();
+ run(@_);
+};
fix_path();
check_user();
-check_env() unless $cmd eq 'shell';
-
-$func->(@ARGV);
+check_env(qw(
+ LOCALCONFIG_ENV
+ BMO_db_host
+ BMO_db_name
+ BMO_db_user
+ BMO_db_pass
+ BMO_memcached_namespace
+ BMO_memcached_servers
+)) unless $cmd eq 'shell';
+
+$func->($opts->());
sub cmd_demo {
- cmd_load_test_data() unless -f "/app/data/params";
+ unless (-f '/app/data/params') {
+ cmd_load_test_data();
+ check_env(qw(
+ PHABRICATOR_LOGIN
+ PHABRICATOR_PASSWORD
+ PHABRICATOR_API_KEY
+ CONDUIT_LOGIN
+ CONDUIT_PASSWORD
+ CONDUIT_API_KEY
+ ));
+ run( 'perl', 'scripts/generate_conduit_data.pl' );
+ }
cmd_httpd();
}
@@ -300,15 +322,7 @@ sub check_data_dir {
}
sub check_env {
- my @require_env = qw(
- LOCALCONFIG_ENV
- BMO_db_host
- BMO_db_name
- BMO_db_user
- BMO_db_pass
- BMO_memcached_namespace
- BMO_memcached_servers
- );
+ my (@require_env) = @_;
my @missing_env = grep { not exists $ENV{$_} } @require_env;
if (@missing_env) {
die "Missing required environmental variables: ", join(", ", @missing_env), "\n";
diff --git a/scripts/generate_conduit_data.pl b/scripts/generate_conduit_data.pl
new file mode 100755
index 000000000..91c5d26ec
--- /dev/null
+++ b/scripts/generate_conduit_data.pl
@@ -0,0 +1,162 @@
+#!/usr/bin/perl
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+use strict;
+use warnings;
+use lib qw(. lib local/lib/perl5);
+
+use Bugzilla;
+use Bugzilla::Bug;
+use Bugzilla::Config qw(:admin);
+use Bugzilla::Constants;
+use Bugzilla::User;
+use Bugzilla::User::APIKey;
+
+BEGIN {
+ Bugzilla->extensions;
+}
+
+my $dbh = Bugzilla->dbh;
+
+# set Bugzilla usage mode to USAGE_MODE_CMDLINE
+Bugzilla->usage_mode(USAGE_MODE_CMDLINE);
+
+my $admin_email = shift || 'admin@mozilla.bugs';
+Bugzilla->set_user( Bugzilla::User->check( { name => $admin_email } ) );
+
+##########################################################################
+# Create Conduit Test User
+##########################################################################
+
+my $conduit_login = $ENV{CONDUIT_LOGIN} || 'conduit@mozilla.bugs';
+my $conduit_password = $ENV{CONDUIT_PASSWORD} || 'password123456789!';
+my $conduit_api_key = $ENV{CONDUIT_API_KEY} || '';
+
+print "creating conduit user account...\n";
+if ( !Bugzilla::User->new( { name => $conduit_login } ) ) {
+ my $new_user = Bugzilla::User->create(
+ {
+ login_name => $conduit_login,
+ realname => 'Conduit Test User',
+ cryptpassword => $conduit_password
+ },
+ );
+
+ if ($conduit_api_key) {
+ Bugzilla::User::APIKey->create_special(
+ {
+ user_id => $new_user->id,
+ description => 'API key for Conduit User',
+ api_key => $conduit_api_key
+ }
+ );
+ }
+}
+##########################################################################
+# Create Phabricator Automation Bot
+##########################################################################
+
+my $phab_login = $ENV{PHABRICATOR_LOGIN} || 'phab-bot@bmo.tld';
+my $phab_password = $ENV{PHABRICATOR_PASSWORD} || 'password123456789!';
+my $phab_api_key = $ENV{PHABRICATOR_API_KEY} || '';
+
+print "creating phabricator automation account...\n";
+if ( !Bugzilla::User->new( { name => $phab_login } ) ) {
+ my $new_user = Bugzilla::User->create(
+ {
+ login_name => $phab_login,
+ realname => 'Phabricator Automation',
+ cryptpassword => $phab_password
+ },
+ );
+
+ if ($phab_api_key) {
+ Bugzilla::User::APIKey->create_special(
+ {
+ user_id => $new_user->id,
+ description => 'API key for Phabricator Automation',
+ api_key => $phab_api_key
+ }
+ );
+ }
+}
+##########################################################################
+# Add Users to Groups
+##########################################################################
+my @users_groups = (
+ { user => 'conduit@mozilla.bugs', group => 'editbugs' },
+ { user => 'conduit@mozilla.bugs', group => 'core-security' },
+ { user => 'phab-bot@bmo.tld', group => 'editbugs' },
+ { user => 'phab-bot@bmo.tld', group => 'core-security' },
+);
+print "adding users to groups...\n";
+foreach my $user_group (@users_groups) {
+ my $group = Bugzilla::Group->new( { name => $user_group->{group} } );
+ my $user = Bugzilla::User->new( { name => $user_group->{user} } );
+ my $sth_add_mapping = $dbh->prepare(
+ 'INSERT INTO user_group_map (user_id, group_id, isbless, grant_type)'
+ . ' VALUES (?, ?, ?, ?)'
+ );
+
+ # Don't crash if the entry already exists.
+ my $ok = eval {
+ $sth_add_mapping->execute( $user->id, $group->id, 0, GRANT_DIRECT );
+ 1;
+ };
+ warn $@ unless $ok;
+}
+
+##########################################################################
+# Create Conduit Test Bug
+##########################################################################
+print "creating conduit test bug...\n";
+Bugzilla->set_user( Bugzilla::User->check( { name => 'conduit@mozilla.bugs' } ) );
+Bugzilla::Bug->create(
+ {
+ product => 'Firefox',
+ component => 'General',
+ priority => '--',
+ bug_status => 'NEW',
+ version => 'unspecified',
+ comment => '-- Comment Created By Conduit User --',
+ rep_platform => 'Unspecified',
+ short_desc => 'Conduit Test Bug',
+ op_sys => 'Unspecified',
+ bug_severity => 'normal',
+ version => 'unspecified',
+ }
+);
+
+##########################################################################
+# Set Parameters
+##########################################################################
+print "setting custom parameters...\n";
+my %set_params = ( password_check_on_login => 0, );
+
+my $params_modified;
+foreach my $param ( keys %set_params ) {
+ my $value = $set_params{$param};
+ next if !$value || Bugzilla->params->{$param} eq $value;
+ SetParam( $param, $value );
+ $params_modified = 1;
+}
+
+write_params() if $params_modified;
+
+##########################################################################
+# Set Phabricator Push Connector Values
+##########################################################################
+print "setting push connector options...\n";
+my ($phab_is_configured) = $dbh->selectrow_array('SELECT COUNT(*) FROM push_options WHERE connector = 'Phabricator'');
+unless ($phab_is_configured) {
+ $dbh->do('INSERT INTO push_options (connector, option_name, option_value) VALUES ('global','enabled','Enabled')');
+ $dbh->do(
+ 'INSERT INTO push_options (connector, option_name, option_value) VALUES ('Phabricator','enabled','Enabled')');
+ $dbh->do(
+ 'INSERT INTO push_options (connector, option_name, option_value) VALUES ('Phabricator','phabricator_url','http://phabricator.test')'
+ );
+}
+
+print "installation and configuration complete!\n";