blob: 20ae532bdc79550e1a686fc4704575db61f54425 [file] [log] [blame]
#!/usr/bin/perl -w
use Getopt::Long;
use YAML;
use DBI;
use Data::Dumper;
my $getnames = 0;
my $dumpmessage = '';
my $setmessage = '';
my $resetmessage = '';
my $htmlfile = '';
my $subject = '';
my $help = 0;
GetOptions ('getmessagenames' => \$getnames,
'dumpmessage:s' => \$dumpmessage,
'resetmessage:s' => \$resetmessage,
'setmessage:s' => \$setmessage,
'htmlfile:s' => \$htmlfile,
'subject:s' => \$subject,
'help|?' => \$help);
if ($help ||
($getnames == 1 && ($dumpmessage ne '' || $setmessage ne '' || $resetmessage ne '' || $htmlfile ne '' || $subject ne '')) ||
($getnames == 0 && $dumpmessage ne '' && ($setmessage ne '' || $resetmessage ne '' || $htmlfile ne '' || $subject ne '')) ||
($getnames == 0 && $resetmessage ne '' && ($setmessage ne '' || $dumpmessage ne '' || $htmlfile ne '' || $subject ne '')) ||
($getnames == 0 && $setmessage ne '' && ($dumpmessage ne '' || $resetmessage ne '' || $htmlfile eq '' || $subject eq '')) ||
($getnames == 0 && $setmessage eq '' && $dumpmessage eq '' && $resetmessage eq ''))
{
print "Usage:\n\n";
print "vclmessages.pl --getmessagenames\n";
print "vclmessages.pl --dumpmessage '<name of message>'\n";
print "vclmessages.pl --setmessage '<name of message>' --htmlfile <filename> --subject <message subject>\n";
print "vclmessages.pl --resetmessage '<name of message>'\n\n";
print "vclmessages.pl --help|-?\n\n";
print "Where\n\n";
print "--getmessagenames displays a list of all available names that can be used\n";
print "--dumpmessage displays the current value of a message\n";
print "--setmessage sets the value of a message to the contents of the specified file\n";
print "--resetmessage sets the value of a message back to the original value as distributed with VCL\n\n";
print "<name of message> = the name of the message from the database (enclose in single quotes)\n";
print "\tuse --getmessagenames to get a list of message names\n\n";
print "<filename> = filename (including path) of file containing html contents for email message\n\n";
print "<message subject> = subject for email message (enclose in single quotes)\n\n";
exit 0;
}
my $mode = 'getnames';
$mode = 'dumpmessage' if($dumpmessage ne '');
$mode = 'setmessage' if($setmessage ne '');
$mode = 'resetmessage' if($resetmessage ne '');
my $messagename = $dumpmessage;
$messagename = $setmessage if($mode eq 'setmessage');
$messagename = $resetmessage if($mode eq 'resetmessage');
my $database = `grep ^database /etc/vcl/vcld.conf | awk -F '=' '{print \$2}'`;
my $hostname = `grep ^server /etc/vcl/vcld.conf | awk -F '=' '{print \$2}'`;
my $user = `grep ^LockerWrtUser /etc/vcl/vcld.conf | awk -F '=' '{print \$2}'`;
my $password = `grep ^wrtPass /etc/vcl/vcld.conf | awk -F '=' '{print \$2}'`;
chomp $database;
chomp $hostname;
chomp $user;
chomp $password;
my $dsn = "DBI:mysql:database=$database;host=$hostname";
my $dbh = DBI->connect($dsn, $user, $password);
# ================= get names ================
if($mode eq 'getnames')
{
my $sth = $dbh->prepare(
"SELECT name FROM variable WHERE name LIKE 'usermessage%' OR name LIKE 'adminmessage%' ORDER BY name")
or die "Error: Failed to prepare database query: $dbh->errstr()";
$sth->execute();
while (my $ref = $sth->fetchrow_hashref()) {
print "$ref->{'name'}\n";
}
$sth->finish;
$sth->finish;
$dbh->disconnect;
exit 0;
}
# ================ dump message ===============
elsif($mode eq 'dumpmessage')
{
my $sth = $dbh->prepare(
"SELECT value FROM variable WHERE name = ?")
or die "Error: Failed to prepare database query: $dbh->errstr()";
$sth->execute($messagename);
if($sth->rows == 0)
{
print "Error: Failed to find message with name $messagename\n";
$sth->finish;
$dbh->disconnect;
exit 0;
}
if($sth->rows > 1)
{
print "Error: Found multiple messages with name $messagename\n";
$sth->finish;
$dbh->disconnect;
exit 0;
}
my $ref = $sth->fetchrow_hashref();
my $data = YAML::Load($ref->{'value'});
#print Dumper($data);
print "Subject: $data->{'subject'}\n";
print "Message:\n";
print "$data->{'message'}\n";
$sth->finish;
$dbh->disconnect;
exit 0;
}
# ================= reset message ===============
elsif($mode eq 'resetmessage')
{
my $sth = $dbh->prepare(
'SELECT value FROM messagereset WHERE name = ?')
or die "Error: Failed to prepare database query: $dbh->errstr()";
$sth->execute($messagename) or die "Error: failed to query database: $dbh->errstr()";
if($sth->rows == 0)
{
print "Error: Failed to find message with name $messagename\n";
$sth->finish;
$dbh->disconnect;
exit 0;
}
if($sth->rows > 1)
{
print "Error: Found multiple messages with name $messagename\n";
$sth->finish;
$dbh->disconnect;
exit 0;
}
my $ref = $sth->fetchrow_hashref();
my $message = $ref->{'value'};
$sth = $dbh->prepare(
"UPDATE variable SET value = ?, setby = 'setemail script', timestamp = NOW() WHERE name = ?")
or die "Error: Failed to prepare database query: $dbh->errstr()";
$sth->bind_param(1, $message);
$sth->bind_param(2, $messagename);
$sth->execute() or die "Error: Failed to update value for $messagename\n";
$sth->finish;
$dbh->disconnect;
print "Success: Value reset for $messagename\n";
}
# ================= set message ===============
elsif($mode eq 'setmessage')
{
my $htmlemail;
open(my $fh, '<', $htmlfile) or die "Error: failed to open $htmlfile for reading";
{
local $/;
$htmlemail = <$fh>;
}
close($fh);
my $sth = $dbh->prepare(
'SELECT value FROM variable WHERE name = ?')
or die "Error: Failed to prepare database query: $dbh->errstr()";
$sth->execute($messagename) or die "Error: failed to query database: $dbh->errstr()";
if($sth->rows == 0)
{
print "Error: Failed to find message with name $messagename\n";
$sth->finish;
$dbh->disconnect;
exit 0;
}
if($sth->rows > 1)
{
print "Error: Found multiple messages with name $messagename\n";
$sth->finish;
$dbh->disconnect;
exit 0;
}
my $ref = $sth->fetchrow_hashref();
my $data = YAML::Load($ref->{'value'});
$data->{'message'} = $htmlemail;
$data->{'subject'} = $subject;
my $yaml = YAML::Dump($data);
$sth = $dbh->prepare(
"UPDATE variable SET value = ?, setby = 'setemail script', timestamp = NOW() WHERE name = ?")
or die "Error: Failed to prepare database query: $dbh->errstr()";
$sth->bind_param(1, $yaml);
$sth->bind_param(2, $messagename);
$sth->execute() or die "Error: Failed to update value for $messagename\n";
$sth->finish;
$dbh->disconnect;
print "Success: Value for $messagename updated from contents of $htmlfile\n";
}