From c3869a2ff66dab5ea620ada2f691481f8be361c5 Mon Sep 17 00:00:00 2001 From: Digimer Date: Mon, 23 Dec 2019 00:54:09 -0500 Subject: [PATCH] * Started adding in front-end support for managing email servers and alert recipients. Added the new 'Email' module to (later) habdle all email-related tasks. * Fixed a bug in Accounts->read_cookies where, when a user's hash had expired, the logged error message didn't show the user's name. Signed-off-by: Digimer --- Anvil/Tools.pm | 15 +++ Anvil/Tools/Account.pm | 22 +++- Anvil/Tools/Email.pm | 121 ++++++++++++++++++ cgi-bin/striker | 51 ++++++++ html/skins/alteeve/email.html | 37 ++++++ html/skins/alteeve/email.js | 6 + html/skins/alteeve/images/email_off.png | Bin 0 -> 17654 bytes html/skins/alteeve/images/email_on.png | Bin 0 -> 18999 bytes html/skins/alteeve/images/email_recipient.png | Bin 0 -> 12145 bytes html/skins/alteeve/images/email_server.png | Bin 0 -> 13648 bytes html/skins/alteeve/images/sources.txt | 9 ++ html/skins/alteeve/main.html | 11 ++ notes | 32 +++-- rpm/SPECS/anvil.spec | 1 + share/words.xml | 4 + tools/scancore | 2 + tools/test.pl | 2 +- 17 files changed, 293 insertions(+), 20 deletions(-) create mode 100755 Anvil/Tools/Email.pm create mode 100644 html/skins/alteeve/email.html create mode 100644 html/skins/alteeve/email.js create mode 100644 html/skins/alteeve/images/email_off.png create mode 100644 html/skins/alteeve/images/email_on.png create mode 100644 html/skins/alteeve/images/email_recipient.png create mode 100644 html/skins/alteeve/images/email_server.png diff --git a/Anvil/Tools.pm b/Anvil/Tools.pm index 0ef79b46..ea7a3748 100644 --- a/Anvil/Tools.pm +++ b/Anvil/Tools.pm @@ -44,6 +44,7 @@ use Anvil::Tools::Alert; use Anvil::Tools::Convert; use Anvil::Tools::Database; use Anvil::Tools::DRBD; +use Anvil::Tools::Email; use Anvil::Tools::Get; use Anvil::Tools::Job; use Anvil::Tools::Log; @@ -125,6 +126,7 @@ sub new CONVERT => Anvil::Tools::Convert->new(), DATABASE => Anvil::Tools::Database->new(), DRBD => Anvil::Tools::DRBD->new(), + EMAIL => Anvil::Tools::Email->new(), GET => Anvil::Tools::Get->new(), LOG => Anvil::Tools::Log->new(), JOB => Anvil::Tools::Job->new(), @@ -166,6 +168,7 @@ sub new $anvil->Convert->parent($anvil); $anvil->Database->parent($anvil); $anvil->DRBD->parent($anvil); + $anvil->Email->parent($anvil); $anvil->Get->parent($anvil); $anvil->Log->parent($anvil); $anvil->Job->parent($anvil); @@ -502,6 +505,18 @@ sub DRBD return ($self->{HANDLE}{DRBD}); } +=head2 Email + +Access the C methods via 'C<< $anvil->Email->method >>'. + +=cut +sub Email +{ + my $self = shift; + + return ($self->{HANDLE}{EMAIL}); +} + =head2 Get Access the C methods via 'C<< $anvil->Get->method >>'. diff --git a/Anvil/Tools/Account.pm b/Anvil/Tools/Account.pm index b2039526..18da3b7c 100644 --- a/Anvil/Tools/Account.pm +++ b/Anvil/Tools/Account.pm @@ -531,15 +531,19 @@ sub read_cookies # Validate the cookie if there is a User UUID. Pick the random number up from the database. my $query = " SELECT - session_salt + a.user_name, + b.session_salt FROM - sessions + users a, + sessions b WHERE - session_user_uuid = ".$anvil->Database->quote($anvil->data->{cookie}{anvil_user_uuid})." + a.user_uuid = b.session_user_uuid +AND + b.session_user_uuid = ".$anvil->Database->quote($anvil->data->{cookie}{anvil_user_uuid})." AND - session_host_uuid = ".$anvil->Database->quote($anvil->Get->host_uuid)." + b.session_host_uuid = ".$anvil->Database->quote($anvil->Get->host_uuid)." ;"; - $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, key => "log_0124", variables => { query => $query }}); + $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "log_0124", variables => { query => $query }}); my $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__}); my $count = @{$results}; $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { @@ -562,9 +566,13 @@ AND } # Read in their "rand" value - $anvil->data->{sessions}{session_salt} = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__})->[0]->[0]; + $anvil->data->{sys}{users}{user_name} = $results->[0]->[0]; + $anvil->data->{sessions}{session_salt} = $results->[0]->[1]; $anvil->data->{sessions}{session_salt} = "" if not defined $anvil->data->{sessions}{session_salt}; - $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { "sessions::session_salt" => $anvil->data->{sessions}{session_salt} }}); + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { + "sys::users::user_name" => $anvil->data->{sys}{users}{user_name}, + "sessions::session_salt" => $anvil->data->{sessions}{session_salt}, + }}); # Generate a hash using today and yesterday's date. my ($today_hash) = $anvil->Account->_build_cookie_hash({ diff --git a/Anvil/Tools/Email.pm b/Anvil/Tools/Email.pm new file mode 100755 index 00000000..88d30dec --- /dev/null +++ b/Anvil/Tools/Email.pm @@ -0,0 +1,121 @@ +package Anvil::Tools::Email; +# +# This module contains methods used to manage the local postfix server and handle and dispatch email via +# mailx. +# + +use strict; +use warnings; +use Scalar::Util qw(weaken isweak); +use Data::Dumper; + +our $VERSION = "3.0.0"; +my $THIS_FILE = "Email.pm"; + +### Methods; + +=pod + +=encoding utf8 + +=head1 NAME + +Anvil::Tools::Email + +Provides all methods used to manage the local C<< postfix >> server and handle and dispatch email via C<< mailx >> + +=head1 SYNOPSIS + + use Anvil::Tools; + + # Get a common object handle on all Anvil::Tools modules. + my $anvil = Anvil::Tools->new(); + + # Access to methods using '$anvil->Email->X'. + # + # + +=head1 METHODS + +Methods in this module; + +=cut +sub new +{ + my $class = shift; + my $self = { + }; + + bless $self, $class; + + return ($self); +} + +# Get a handle on the Anvil::Tools object. I know that technically that is a sibling module, but it makes more +# sense in this case to think of it as a parent. +sub parent +{ + my $self = shift; + my $parent = shift; + + $self->{HANDLE}{TOOLS} = $parent if $parent; + + # Defend against memory leads. See Scalar::Util'. + if (not isweak($self->{HANDLE}{TOOLS})) + { + weaken($self->{HANDLE}{TOOLS}); + } + + return ($self->{HANDLE}{TOOLS}); +} + +############################################################################################################# +# Public methods # +############################################################################################################# + +=head2 check_postfix + +This method checks the current postfix server configuration to see if it needs to be updated, then checks to see if the local C<< postfix >> daemin is enabled and started. + +If any problem is encountered, C<< 1 >> is returned. Otherwise, if all is well, C<< 0 >> is returned. + +Parameters; + +=head3 config (optional, default '1') + +If set to C<< 0 >>, the configuration is not checked or updated. + +=head3 daemon (optional, default '1') + +If set to C<< 0 >>, the C<< postfix >> daemon is not checked or started. + +=cut +sub check_postfix +{ + my $self = shift; + my $parameter = shift; + my $anvil = $self->parent; + my $debug = defined $parameter->{debug} ? $parameter->{debug} : 3; + + my $problem = 0; + my $config = defined $parameter->{config} ? $parameter->{config} : 1; + my $daemon = defined $parameter->{daemon} ? $parameter->{daemon} : 1; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { + config => $config, + daemon => $daemon, + }}); + + + + return($problem); +} + +# =head3 +# +# Private Functions; +# +# =cut + +############################################################################################################# +# Private functions # +############################################################################################################# diff --git a/cgi-bin/striker b/cgi-bin/striker index 1ef4287d..2142ac7f 100755 --- a/cgi-bin/striker +++ b/cgi-bin/striker @@ -210,6 +210,7 @@ sub print_and_exit files_button => $anvil->data->{sys}{users}{user_name} ? $anvil->Template->get({file => "main.html", name => "files_button_on"}) : $anvil->Template->get({file => "main.html", name => "files_button_off"}), jobs_button => $say_jobs_button, striker_button => $anvil->data->{sys}{users}{user_name} ? $anvil->Template->get({file => "main.html", name => "striker_button_on"}) : $anvil->Template->get({file => "main.html", name => "striker_button_off"}), + email_button => $anvil->data->{sys}{users}{user_name} ? $anvil->Template->get({file => "main.html", name => "email_button_on"}) : $anvil->Template->get({file => "main.html", name => "email_button_off"}), user_button => $anvil->data->{sys}{users}{user_name} ? $anvil->Template->get({file => "main.html", name => "user_button_on"}) : $anvil->Template->get({file => "main.html", name => "user_button_off"}), }}); my $footer = $anvil->Template->get({file => "main.html", name => "footer", variables => { @@ -329,6 +330,10 @@ sub process_task { process_jobs_menu($anvil); } + elsif ($anvil->data->{cgi}{email}{value}) + { + process_email_menu($anvil); + } else { # Load the main page. @@ -349,6 +354,52 @@ sub process_task return(0); } +# This handles tasks related to email, mail servers and alert recipients. +sub process_email_menu +{ + my ($anvil) = @_; + + $anvil->data->{form}{back_link} = "?email=true"; + $anvil->data->{cgi}{task}{value} = "" if not defined $anvil->data->{cgi}{task}{value}; + $anvil->data->{cgi}{action}{value} = "" if not defined $anvil->data->{cgi}{action}{value}; + $anvil->data->{cgi}{save}{value} = "" if not defined $anvil->data->{cgi}{save}{value}; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { + "form::back_link" => $anvil->data->{form}{back_link}, + "cgi::task::value" => $anvil->data->{cgi}{task}{value}, + "cgi::action::value" => $anvil->data->{cgi}{action}{value}, + "cgi::save::value" => $anvil->data->{cgi}{save}{value}, + }}); + + if ($anvil->data->{cgi}{task}{value} eq "email_server") + { + #process_email_server_page($anvil); + } + elsif ($anvil->data->{cgi}{task}{value} eq "email_recipient") + { + #process_email_recipient_page($anvil); + } + else + { + # What we show for the reboot icon and text depends on if a reboot is pending. + my $reboot_needed = $anvil->System->reboot_needed(); + my $reboot_icon = $reboot_needed ? "reboot_needed_icon.png" : "reboot_icon.png"; + my $reboot_message = $reboot_needed ? "#!string!striker_0093!#" : "#!string!striker_0092!#"; + $anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 3, list => { + reboot_needed => $reboot_needed, + reboot_icon => $reboot_icon, + reboot_message => $reboot_message, + }}); + + # The 'back' goes home + $anvil->data->{form}{back_link} = "?"; + $anvil->data->{form}{refresh_link} = "?email=true"; + $anvil->data->{form}{body} = $anvil->Template->get({file => "email.html", name => "main-menu", variables => { + }}); + } + + return(0); +} + # This handles the "Striker" menu items. sub process_striker_menu { diff --git a/html/skins/alteeve/email.html b/html/skins/alteeve/email.html new file mode 100644 index 00000000..b598757e --- /dev/null +++ b/html/skins/alteeve/email.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + +
+   +
+ #!string!striker_0165!# +
+   +
+ + + #!string!striker_0166!# +
+ + + #!string!striker_0167!# +
+ + diff --git a/html/skins/alteeve/email.js b/html/skins/alteeve/email.js new file mode 100644 index 00000000..353a83ba --- /dev/null +++ b/html/skins/alteeve/email.js @@ -0,0 +1,6 @@ +$.ajaxSetup({ + cache: false +}); +$(function() { + +}); diff --git a/html/skins/alteeve/images/email_off.png b/html/skins/alteeve/images/email_off.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed0f653baef0fb308ffe49ebd57664f5b3dcf34 GIT binary patch literal 17654 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д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 Lqle26`Tzbe4?j3l literal 0 HcmV?d00001 diff --git a/html/skins/alteeve/images/email_recipient.png b/html/skins/alteeve/images/email_recipient.png new file mode 100644 index 0000000000000000000000000000000000000000..8c7ce4a75482dded816a6b642fa305becda08f2d GIT binary patch literal 12145 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 D@-6-N literal 0 HcmV?d00001 diff --git a/html/skins/alteeve/images/email_server.png b/html/skins/alteeve/images/email_server.png new file mode 100644 index 0000000000000000000000000000000000000000..54248afeb0d03312436eca0ecfeb0c76145dc251 GIT binary patch literal 13648 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 o_k_tRn0|D2twq9&?J-U9u<0Kj?K8vp #!variable!anvil_button!# + + #!variable!email_button!# + #!variable!user_button!# @@ -58,6 +61,14 @@ + + + + + +#!string!striker_0164!# + + diff --git a/notes b/notes index 98987e68..68e49348 100644 --- a/notes +++ b/notes @@ -48,21 +48,29 @@ dnf download --source awscli booth booth-arbitrator booth-core booth-site booth- pcs pcs-snmp python3-azure-sdk python3-boto3 python3-botocore python3-fasteners python3-gflags python3-google-api-client python3-httplib2 python3-oauth2client python3-s3transfer python3-uritemplate \ resource-agents resource-agents-aliyun resource-agents-gcp -rpm -Uvh python-s3transfer-0.1.13-1.el8.src.rpm python-oauth2client-4.1.2-6.el8.src.rpm booth-1.0-5.f2d38ce.git.el8.src.rpm google-api-python-client-1.6.5-3.el8.src.rpm python-boto3-1.6.1-2.el8.src.rpm python-httplib2-0.10.3-4.el8.src.rpm python-botocore-1.9.1-2.el8.src.rpm corosync-qdevice-3.0.0-2.el8.src.rpm python-uritemplate-3.0.0-3.el8.src.rpm python3-azure-sdk-4.0.0-9.el8.src.rpm awscli-1.14.50-5.el8.src.rpm python-gflags-2.0-15.el8ost.src.rpm resource-agents-4.1.1-33.el8.src.rpm python-fasteners-0.14.1-15.el8ost.src.rpm pcs-0.10.2-4.el8.src.rpm fence-agents-4.2.1-30.el8_1.1.src.rpm +rpm -Uvh python-s3transfer-0.1.13-1.el8.src.rpm python-oauth2client-4.1.2-6.el8.src.rpm booth-1.0-5.f2d38ce.git.el8.src.rpm google-api-python-client-1.6.5-3.el8.src.rpm python-boto3-1.6.1-2.el8.src.rpm python-httplib2-0.10.3-4.el8.src.rpm python-botocore-1.9.1-2.el8.src.rpm corosync-qdevice-3.0.0-2.el8.src.rpm python-uritemplate-3.0.0-3.el8.src.rpm python3-azure-sdk-4.0.0-9.el8.src.rpm awscli-1.14.50-5.el8.src.rpm python-gflags-2.0-15.el8ost.src.rpm resource-agents-4.1.1-33.el8.src.rpm pcs-0.10.2-4.el8.src.rpm fence-agents-4.2.1-30.el8_1.1.src.rpm +rpm -Uvh python-fasteners-0.14.1-15.el8ost.src.rpm -rpmbuild -ba python-s3transfer.spec python-oauth2client.spec booth.spec google-api-python-client.spec python-boto3.spec python-httplib2.spec python-botocore.spec corosync-qdevice.spec python-uritemplate.spec python3-azure-sdk.spec \ - awscli.spec python-gflags.spec resource-agents.spec python-fasteners.spec pcs.spec fence-agents.spec +rpm -Uvh awscli-1.14.50-5.el8.src.rpm booth-1.0-5.f2d38ce.git.el8.src.rpm corosync-qdevice-3.0.0-2.el8.src.rpm fence-agents-4.2.1-30.el8.1.src.rpm google-api-python-client-1.6.5-3.el8.src.rpm pacemaker-2.0.2-3.el8.2.src.rpm \ + pcs-0.10.2-4.el8.src.rpm python-boto3-1.6.1-2.el8.src.rpm python-botocore-1.9.1-2.el8.src.rpm python-gflags-2.0-15.el8.src.rpm python-httplib2-0.10.3-4.el8.src.rpm python-oauth2client-4.1.2-6.el8.src.rpm \ + python-s3transfer-0.1.13-1.el8.src.rpm python-uritemplate-3.0.0-3.el8.src.rpm python3-azure-sdk-4.0.0-9.el8.src.rpm resource-agents-4.1.1-33.el8.src.rpm -The key packages which are needed are: - corosync - corosynclib-devel - pacemaker - pacemaker-cli - pacemaker-doc - pacemaker-libs-devel - pcs - resource-agents + +rpmbuild -ba --sign pcs.spec +rpmbuild -ba --sign python3-azure-sdk.spec +rpmbuild -ba --sign python-s3transfer.spec python-oauth2client.spec booth.spec google-api-python-client.spec python-boto3.spec python-httplib2.spec python-botocore.spec corosync-qdevice.spec python-uritemplate.spec awscli.spec python-gflags.spec resource-agents.spec fence-agents.spec + +# rpmbuild -ba python-fasteners.spec + + +### Need to find/build +python2-futures +python2-monotonic + + +dnf install booth-site corosync corosynclib-devel pacemaker pacemaker-cli pacemaker-libs-devel pcs + Network planning; diff --git a/rpm/SPECS/anvil.spec b/rpm/SPECS/anvil.spec index 6220f533..24f89e5f 100644 --- a/rpm/SPECS/anvil.spec +++ b/rpm/SPECS/anvil.spec @@ -37,6 +37,7 @@ Requires: hdparm Requires: htop Requires: iproute Requires: lsscsi +Requires: mailx Requires: mlocate Requires: perl-Capture-Tiny Requires: perl-Data-Dumper diff --git a/share/words.xml b/share/words.xml index cc36163c..bb609b5e 100644 --- a/share/words.xml +++ b/share/words.xml @@ -1019,6 +1019,10 @@ If you are comfortable that the target has changed for a known reason, you can s The network will soon be reconfigured and then the target will reboot. In a couple minutes, it should be ready. Return How many network connections will exist for each network type. + Email and alert configuration + Alert email server and recipient configuration. + Configure which server(s) can be used for forwarding email alerts to. + Configure who will receive email alerts. #!variable!number!#/sec diff --git a/tools/scancore b/tools/scancore index 103fcf65..b8e83e25 100755 --- a/tools/scancore +++ b/tools/scancore @@ -233,6 +233,8 @@ sub prepare_for_run $anvil->Database->connect(); $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, 'print' => 1, level => 1, key => "log_0132"}); + # TODO: Check/configure the mail server. + return(0); } diff --git a/tools/test.pl b/tools/test.pl index 92ceb0be..0a07028b 100755 --- a/tools/test.pl +++ b/tools/test.pl @@ -30,4 +30,4 @@ $anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, secure = print "DB Connections: [".$anvil->data->{sys}{database}{connections}."]\n"; #$anvil->Network->load_interfces({debug => 2}); -$anvil->System->generate_state_json({debug => 2}); +#$anvil->System->generate_state_json({debug => 2});