#!/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_USER_LOGIN} || 'conduit@mozilla.bugs'; my $conduit_password = $ENV{CONDUIT_USER_PASSWORD} || 'password123456789!'; my $conduit_api_key = $ENV{CONDUIT_USER_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_BOT_LOGIN} || 'phab-bot@bmo.tld'; my $phab_password = $ENV{PHABRICATOR_BOT_PASSWORD} || 'password123456789!'; my $phab_api_key = $ENV{PHABRICATOR_BOT_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_params( password_check_on_login => 0, phabricator_base_uri => 'http://phabricator.test/', phabricator_enabled => 1, phabricator_sync_groups => 'core-security', ); set_push_connector_options(); print "installation and configuration complete!\n"; sub set_push_connector_options { print "setting push connector options...\n"; my ($phab_is_configured) = $dbh->selectrow_array(q{SELECT COUNT(*) FROM push_options WHERE connector = 'Phabricator'}); unless ($phab_is_configured) { $dbh->do(q{INSERT INTO push_options (connector, option_name, option_value) VALUES ('global','enabled','Enabled')}); $dbh->do( q{INSERT INTO push_options (connector, option_name, option_value) VALUES ('Phabricator','enabled','Enabled')}); $dbh->do( q{INSERT INTO push_options (connector, option_name, option_value) VALUES ('Phabricator','phabricator_url','http://phabricator.test')} ); } } sub set_params { my (%set_params) = @_; print "setting custom parameters...\n"; if ($ENV{PHABRICATOR_API_KEY}) { $set_params{phabricator_api_key} = $ENV{PHABRICATOR_API_KEY}; } if ($ENV{PHABRICATOR_APP_ID} && $ENV{PHABRICATOR_AUTH_CALLBACK_URL}) { $set_params{phabricator_app_id} = $ENV{PHABRICATOR_APP_ID}; $set_params{phabricator_auth_callback_url} = $ENV{PHABRICATOR_AUTH_CALLBACK_URL}; } 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; }