From f582495d75cce5810fd0ada91a73ad5a3ac529be Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Mon, 12 Jan 2004 03:07:46 +0000 Subject: [PATCH] Move scripts to contrib/scripts git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1963 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- Makefile | 4 +- README.messages-expire | 20 - addmailbox | 45 -- messages-expire.pl | 73 --- postgres_cdr.sql | 32 - retrieve_extensions_from_mysql.pl | 113 ---- retrieve_sip_conf_from_mysql.pl | 93 --- vmail.cgi | 931 ------------------------------ vmdb.sql | 2 - 9 files changed, 2 insertions(+), 1311 deletions(-) delete mode 100755 README.messages-expire delete mode 100755 addmailbox delete mode 100755 messages-expire.pl delete mode 100755 postgres_cdr.sql delete mode 100755 retrieve_extensions_from_mysql.pl delete mode 100755 retrieve_sip_conf_from_mysql.pl delete mode 100755 vmail.cgi delete mode 100755 vmdb.sql diff --git a/Makefile b/Makefile index 2e0982139f..eae88ed05a 100755 --- a/Makefile +++ b/Makefile @@ -401,7 +401,7 @@ webvmail: @[ -d $(DESTDIR)$(HTTPDIR) ] || ( echo "No HTTP directory" && exit 1 ) @[ -d $(DESTDIR)$(HTTPDIR)/html ] || ( echo "No http directory" && exit 1 ) @[ -d $(DESTDIR)$(HTTPDIR)/cgi-bin ] || ( echo "No cgi-bin directory" && exit 1 ) - install -m 4755 -o root -g root vmail.cgi $(DESTDIR)$(HTTPDIR)/cgi-bin/vmail.cgi + install -m 4755 -o root -g root contrib/scripts/vmail.cgi $(DESTDIR)$(HTTPDIR)/cgi-bin/vmail.cgi mkdir -p $(DESTDIR)$(HTTPDIR)/html/_asterisk for x in images/*.gif; do \ install -m 644 $$x $(DESTDIR)$(HTTPDIR)/html/_asterisk/; \ @@ -416,7 +416,7 @@ webvmail: @echo " +-------------------------------------------+" mailbox: - ./addmailbox + ./contrib/scripts/addmailbox rpm: __rpm diff --git a/README.messages-expire b/README.messages-expire deleted file mode 100755 index e9c5061ac6..0000000000 --- a/README.messages-expire +++ /dev/null @@ -1,20 +0,0 @@ -expire-messages.pl - -expire-messages finds messages more than X days old and deletes them. -Because the older messages will be the lower numbers in the folder (msg0000 -will be older than msg0005), just deleting msg0000 will not work. -expire-messages then runs a routine that goes into every folder in every -mailbox to reorganize. If the folder contains msg0000, no action is taken. -If the folder does not, the rename routine takes the oldest message and -names it msg0000, the next oldest message and names it msg0001 and so on. - -The file deletion is done by the -exec parameter to 'find'. It would be far -more efficient to take the output from 'find' and just reorganize the -directories from which we deleted a file. Something for the future... - -Keep in mind that messages are deleted at the beginning of the script you -will have mailbox trouble if you check messages before the script -reorganizes your mailbox. - -To use it, make sure the paths are right. Adjust $age (originally set to -31) if necessary. diff --git a/addmailbox b/addmailbox deleted file mode 100755 index d62db4e4ea..0000000000 --- a/addmailbox +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh -clear -VMHOME=/var/spool/asterisk/voicemail -SNDHOME=/var/lib/asterisk/sounds -echo -echo "Enter Voicemail Context of the mailbox you are creating." -echo "The context is the value between the square brackets in" -echo "the voicemail.conf file." -echo "(DEFAULT: default)" -echo -n "Voicemail Context: " -read context -echo -echo "Enter the Mailbox number of the voicemail box you are creating." -echo -n "Mailbox Number: " -read mailbox - -context=${context:-default} - -if [ ! -e "${VMHOME}/${context}" ] - then - echo - echo "New Voicemail context.." - echo "Creating Voicemail context directory..." - mkdir -p ${VMHOME}/${context} -fi - -echo -echo "Creating Voicemail directory..." -mkdir -p ${VMHOME}/${context}/${mailbox} -echo "Creating INBOX..." -mkdir -p ${VMHOME}/${context}/${mailbox}/INBOX -echo "Creating Default greetings..." -cat ${SNDHOME}/vm-theperson.gsm > ${VMHOME}/${context}/${mailbox}/unavail.gsm -cat ${SNDHOME}/vm-theperson.gsm > ${VMHOME}/${context}/${mailbox}/busy.gsm -cat ${SNDHOME}/vm-extension.gsm > ${VMHOME}/${context}/${mailbox}/greet.gsm -nums=`echo $mailbox | sed 's/./ \0/g'` -for x in $nums; do - cat ${SNDHOME}/digits/${x}.gsm >> ${VMHOME}/${context}/${mailbox}/unavail.gsm - cat ${SNDHOME}/digits/${x}.gsm >> ${VMHOME}/${context}/${mailbox}/busy.gsm - cat ${SNDHOME}/digits/${x}.gsm >> ${VMHOME}/${context}/${mailbox}/greet.gsm -done -cat ${SNDHOME}/vm-isunavail.gsm >> ${VMHOME}/${context}/${mailbox}/unavail.gsm -cat ${SNDHOME}/vm-isonphone.gsm >> ${VMHOME}/${context}/${mailbox}/busy.gsm -echo "Complete." - diff --git a/messages-expire.pl b/messages-expire.pl deleted file mode 100755 index bb4fec5b38..0000000000 --- a/messages-expire.pl +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/perl -# -# Script to expire voicemail after a specified number of days -# by Steve Creel <screel@turbs.com> -# - -# Directory housing the voicemail spool for asterisk -$dir = "/var/spool/asterisk/voicemail"; - -# Context for which the script should be running -$context = "default"; - -# Age (Delete files older than $age days old) -$age = 31; - -# Delete all files older than $age (but named msg????.??? to be sure -# we don't delete greetings or the user's name) - -system('find '.$dir.'/'.$context.' -name msg????.??? -mtime +'.$age.' -exec rm {} \; -exec echo Deleted {} \;'); - -# For testing - what number to we start when we renumber? -$start = "0"; - -# Rename to msg and a 4 digit number, 0 padded. -$fnbase = sprintf "msg%04d", $start; - -# Make $dir include the context too -$dir.="/".$context; - -( -d $dir ) || die "Can't read list of mailboxes ($dir): $!\n"; -@mailboxes = `ls -A1 $dir`; -chomp(@mailboxes); - -$save_fnbase = $fnbase; - -foreach $mailbox (@mailboxes) { - - ( -d $dir."/".$mailbox) || die "Can't read list of folders (".$dir."/".$mailbox."): $!\n"; - @folders = `ls -A1 $dir/$mailbox`; - chomp(@folders); - - foreach $folder (@folders) { - if (-d $dir."/".$mailbox."/".$folder) { - ( -d $dir."/".$mailbox."/".$folder) || die "Can't read list of messages (".$dir."/".$mailbox."/".$folder.") $!\n"; - @files = `ls -A1 $dir/$mailbox/$folder/`; - - # Sort so everything is in proper order. - @files = sort @files; - chomp(@files); - - # If there is still (after deleting old files earlier in the - # script) a msg0000.txt, we don't need to shuffle anything - # in this folder. - if (-f $dir."/".$mailbox."/".$folder."/msg0000.txt") { next; } - - foreach $ext (("WAV", "wav", "gsm", "txt")) { - # Reset the fnbase for each file type - $fnbase = $save_fnbase; - - foreach $file (@files) { - if ( $file =~ /$ext/ ) { - chdir($dir."/".$mailbox."/".$folder."/") || die "Can't change folder: $!"; - print "Renaming: ".$dir."/".$mailbox."/".$folder."/".$file." to ".$fnbase.".".$ext."\n"; - rename($file, $fnbase.".".$ext) || die "Cannot rename: $!"; - $fnbase++; - } - } - } - } - } -} - -__END__ \ No newline at end of file diff --git a/postgres_cdr.sql b/postgres_cdr.sql deleted file mode 100755 index e03fd957e7..0000000000 --- a/postgres_cdr.sql +++ /dev/null @@ -1,32 +0,0 @@ - -/* - * Id: postgres_cdr.sql,v 1.8.2.11 2003/10/10 11:15:43 pnixon Exp $ - * - * --- Peter Nixon [ codemonkey@peternixon.net ] - * - * This is a PostgreSQL schema for doing CDR accounting with Asterisk - * - * The calls will automatically be logged as long as the module is loaded. - * - */ - - -CREATE TABLE cdr ( - AcctId BIGSERIAL PRIMARY KEY, - calldate TIMESTAMP with time zone NOT NULL DEFAULT now(), - clid VARCHAR(80) NOT NULL default '', - src VARCHAR(80) NOT NULL default '', - dst VARCHAR(80) NOT NULL default '', - dcontext VARCHAR(80) NOT NULL default '', - channel VARCHAR(80) NOT NULL default '', - dstchannel VARCHAR(80) NOT NULL default '', - lastapp VARCHAR(80) NOT NULL default '', - lastdata VARCHAR(80) NOT NULL default '', - duration INTEGER NOT NULL default '0', - billsec INTEGER NOT NULL default '0', - disposition VARCHAR(45) NOT NULL default '', - amaflags INTEGER NOT NULL default '0', - accountcode VARCHAR(20) NOT NULL default '', - uniqueid VARCHAR(32) NOT NULL default '' -); - diff --git a/retrieve_extensions_from_mysql.pl b/retrieve_extensions_from_mysql.pl deleted file mode 100755 index ca195cfe58..0000000000 --- a/retrieve_extensions_from_mysql.pl +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/perl -Tw -# Use these commands to create the appropriate tables in MySQL -# If flags is 1 then this record is not included in the output extensions file -# -#CREATE TABLE extensions ( -# context CHAR(20) DEFAULT 'default' NOT NULL, -# extension CHAR(20) NOT NULL, -# priority INT(2) DEFAULT '1' NOT NULL, -# application CHAR(20) NOT NULL, -# args CHAR(50), -# descr TEXT, -# flags INT(1) DEFAULT '0' NOT NULL, -# PRIMARY KEY(context, extension, priority) -#); -# -#CREATE TABLE globals ( -# variable CHAR(20) NOT NULL, -# value CHAR(50) NOT NULL, -# PRIMARY KEY(variable, value) -#); - -use DBI; -################### BEGIN OF CONFIGURATION #################### - -# the name of the extensions table -$table_name = "extensions"; -# the name of the globals table -$global_table_name = "globals"; -# the path to the extensions.conf file -# WARNING: this file will be substituted by the output of this program -$extensions_conf = "/etc/asterisk/extensions.conf"; -# the name of the box the MySQL database is running on -$hostname = "localhost"; -# the name of the database our tables are kept -$database = "user"; -# username to connect to the database -$username = ""; -# password to connect to the database -$password = ""; - -################### END OF CONFIGURATION ####################### - -open EXTEN, ">$extensions_conf" || die "Cannot create/overwrite extensions file: $extensions_conf\n"; - -$dbh = DBI->connect("dbi:mysql:dbname=$database;host=$hostname", "$username", "$password"); -$statement = "SELECT * from $global_table_name order by variable"; -my $result = $dbh->selectall_arrayref($statement); -unless ($result) { - # check for errors after every single database call - print "dbh->selectall_arrayref($statement) failed!\n"; - print "DBI::err=[$DBI::err]\n"; - print "DBI::errstr=[$DBI::errstr]\n"; - exit; -} -my @resultSet = @{$result}; -if ( $#resultSet > -1 ) { - print EXTEN "[globals]\n"; - foreach $row (@{ $result }) { - my @result = @{ $row }; - print EXTEN "$result[0] = $result[1]\n"; - } - print EXTEN "\n"; -} - -$statement = "SELECT context from $table_name group by context"; - -$result = $dbh->selectall_arrayref($statement); -unless ($result) { - # check for errors after every single database call - print "dbh->selectall_arrayref($statement) failed!\n"; - print "DBI::err=[$DBI::err]\n"; - print "DBI::errstr=[$DBI::errstr]\n"; -} - -@resultSet = @{$result}; -if ( $#resultSet == -1 ) { - print "No extensions defined in $table_name\n"; - exit; -} - -foreach my $row ( @{ $result } ) { - my $context = @{ $row }[0]; - print EXTEN "[$context]\n"; - $statement = "SELECT * from $table_name where context='$context' order by extension, priority"; - my $result = $dbh->selectall_arrayref($statement); - unless ($result) { - # check for errors after every single database call - print "dbh->selectall_arrayref($statement) failed!\n"; - print "DBI::err=[$DBI::err]\n"; - print "DBI::errstr=[$DBI::errstr]\n"; - exit; - } - - my @resSet = @{$result}; - if ( $#resSet == -1 ) { - print "no results\n"; - exit; - } - foreach my $row ( @{ $result } ) { - my @result = @{ $row }; - if ($result[6] == 0) { - print EXTEN "exten => $result[1],$result[2],$result[3]"; - print EXTEN "($result[4])" if defined $result[4]; - print EXTEN "\t" if not defined $result[4]; - print EXTEN "\t; $result[5]" if defined $result[5]; - print EXTEN "\n"; - } - } - print EXTEN "\n"; -} - -exit 0; - diff --git a/retrieve_sip_conf_from_mysql.pl b/retrieve_sip_conf_from_mysql.pl deleted file mode 100755 index 03395a1258..0000000000 --- a/retrieve_sip_conf_from_mysql.pl +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/perl -Tw -# Retrieves the sip user/peer entries from the database -# Use these commands to create the appropriate tables in MySQL -# -#CREATE TABLE sip (id INT(11) DEFAULT -1 NOT NULL,keyword VARCHAR(20) NOT NULL,data VARCHAR(50) NOT NULL, flags INT(1) DEFAULT 0 NOT NULL,PRIMARY KEY (id,keyword)); -# -# if flags = 1 then the records are not included in the output file - -use DBI; -################### BEGIN OF CONFIGURATION #################### - -# the name of the extensions table -$table_name = "sip"; -# the path to the extensions.conf file -# WARNING: this file will be substituted by the output of this program -$sip_conf = "/etc/asterisk/sip_additional.conf"; -# the name of the box the MySQL database is running on -$hostname = "localhost"; -# the name of the database our tables are kept -$database = "sip"; -# username to connect to the database -$username = "root"; -# password to connect to the database -$password = ""; - -################### END OF CONFIGURATION ####################### - -$additional = ""; - -open EXTEN, ">$sip_conf" || die "Cannot create/overwrite extensions file: $sip_conf\n"; - -$dbh = DBI->connect("dbi:mysql:dbname=$database;host=$hostname", "$username", "$password"); -$statement = "SELECT keyword,data from $table_name where id=0 and keyword <> 'account' and flags <> 1"; -my $result = $dbh->selectall_arrayref($statement); -unless ($result) { - # check for errors after every single database call - print "dbh->selectall_arrayref($statement) failed!\n"; - print "DBI::err=[$DBI::err]\n"; - print "DBI::errstr=[$DBI::errstr]\n"; - exit; -} -my @resultSet = @{$result}; -if ( $#resultSet > -1 ) { - foreach $row (@{ $result }) { - my @result = @{ $row }; - $additional .= $result[0]."=".$result[1]."\n"; - } -} - -$statement = "SELECT data,id from $table_name where keyword='account' and flags <> 1 group by data"; - -$result = $dbh->selectall_arrayref($statement); -unless ($result) { - # check for errors after every single database call - print "dbh->selectall_arrayref($statement) failed!\n"; - print "DBI::err=[$DBI::err]\n"; - print "DBI::errstr=[$DBI::errstr]\n"; -} - -@resultSet = @{$result}; -if ( $#resultSet == -1 ) { - print "No sip accounts defined in $table_name\n"; - exit; -} - -foreach my $row ( @{ $result } ) { - my $account = @{ $row }[0]; - my $id = @{ $row }[1]; - print EXTEN "[$account]\n"; - $statement = "SELECT keyword,data from $table_name where id=$id and keyword <> 'account' and flags <> 1 order by keyword"; - my $result = $dbh->selectall_arrayref($statement); - unless ($result) { - # check for errors after every single database call - print "dbh->selectall_arrayref($statement) failed!\n"; - print "DBI::err=[$DBI::err]\n"; - print "DBI::errstr=[$DBI::errstr]\n"; - exit; - } - - my @resSet = @{$result}; - if ( $#resSet == -1 ) { - print "no results\n"; - exit; - } - foreach my $row ( @{ $result } ) { - my @result = @{ $row }; - print EXTEN "$result[0]=$result[1]\n"; - } - print EXTEN "$additional\n"; -} - -exit 0; - diff --git a/vmail.cgi b/vmail.cgi deleted file mode 100755 index 7a3113e828..0000000000 --- a/vmail.cgi +++ /dev/null @@ -1,931 +0,0 @@ -#!/usr/bin/perl -# -# Web based Voicemail for Asterisk -# -# Copyright (C) 2002, Linux Support Services, Inc. -# -# Distributed under the terms of the GNU General Public License -# -# Written by Mark Spencer <markster@linux-support.net> -# -# (icky, I know.... if you know better perl please help!) -# -# -use CGI qw/:standard/; -use Carp::Heavy; -use CGI::Carp qw(fatalsToBrowser); - -@validfolders = ( "INBOX", "Old", "Work", "Family", "Friends", "Cust1", "Cust2", "Cust3", "Cust4", "Cust5" ); - -%formats = ( - "wav" => { - name => "Uncompressed WAV", - mime => "audio/x-wav", - pref => 1 - }, - "WAV" => { - name => "GSM Compressed WAV", - mime => "audio/x-wav", - pref => 2 - }, - "gsm" => { - name => "Raw GSM Audio", - mime => "audio/x-gsm", - pref => 3 - } -); - -$astpath = "/_asterisk"; - -$stdcontainerstart = "<table align=center width=600><tr><td>\n"; -$footer = "<hr><font size=-1><a href=\"http://www.asterisk.org\">The Asterisk Open Source PBX</a> Copyright 2002, <a href=\"http://www.digium.com\">Digium, Inc.</a></a>"; -$stdcontainerend = "</td></tr><tr><td align=right>$footer</td></tr></table>\n"; - -sub login_screen() { - print header; - my ($message) = @_; - print <<_EOH; - -<TITLE>Asterisk Web-Voicemail</TITLE> -<BODY BGCOLOR="white"> -$stdcontainerstart -<FORM METHOD="post"> -<input type=hidden name="action" value="login"> -<table align=center> -<tr><td valign=top align=center rowspan=6><img align=center src="$astpath/animlogo.gif"></td></tr> -<tr><td align=center colspan=2><font size=+2>Comedian Mail Login</font></td></tr> -<tr><td align=center colspan=2><font size=+1>$message</font></td></tr> -<tr><td>Mailbox:</td><td><input type=text name="mailbox"></td></tr> -<tr><td>Password:</td><td><input type=password name="password"></td></tr> -<tr><td align=right colspan=2><input value="Login" type=submit></td></tr> -</table> -</FORM> -$stdcontainerend -</BODY>\n -_EOH - -} - -sub check_login() -{ - local ($filename, $startcat) = @_; - local ($mbox, $context) = split(/\@/, param('mailbox')); - local $pass = param('password'); - local $category = $startcat; - local @fields; - local $tmp; - local (*VMAIL); - if (!$category) { - $category = "general"; - } - if (!$context) { - $context = param('context'); - } - if (!$context) { - $context = "default"; - } - if (!$filename) { - $filename = "/etc/asterisk/voicemail.conf"; - } -# print header; -# print "Including <h2>$filename</h2> while in <h2>$category</h2>...\n"; - open(VMAIL, "<$filename") || die("Bleh, no $filename"); - while(<VMAIL>) { - chomp; - if (/include\s\"([^\"]+)\"$/) { - ($tmp, $category) = &check_login("/etc/asterisk/$1", $category); - if (length($tmp)) { -# print "Got '$tmp'\n"; - return ($tmp, $category); - } - } elsif (/\[(.*)\]/) { - $category = $1; - } elsif ($category ne "general") { - if (/([^\s]+)\s*\=\>?\s*(.*)/) { - @fields = split(/\,\s*/, $2); -# print "<p>Mailbox is $1\n"; - if (($mbox eq $1) && ($pass eq $fields[0]) && ($context eq $category)) { - return ($fields[1] ? $fields[1] : "Extension $mbox in $context", $category); - } - } - } - } - close(VMAIL); - return ("", $category); -} - -sub validmailbox() -{ - local ($context, $mbox, $filename, $startcat) = @_; - local $category = $startcat; - local @fields; - local (*VMAIL); - if (!$context) { - $context = param('context'); - } - if (!$context) { - $context = "default"; - } - if (!$filename) { - $filename = "/etc/asterisk/voicemail.conf"; - } - if (!$category) { - $category = "general"; - } - open(VMAIL, "<$filename") || die("Bleh, no $filename"); - while(<VMAIL>) { - chomp; - if (/include\s\"([^\"]+)\"$/) { - ($tmp, $category) = &validmailbox($mbox, $context, "/etc/asterisk/$1"); - if ($tmp) { - return ($tmp, $category); - } - } elsif (/\[(.*)\]/) { - $category = $1; - } elsif (($category ne "general") && ($category eq $context)) { - if (/([^\s]+)\s*\=\>?\s*(.*)/) { - @fields = split(/\,\s*/, $2); - if (($mbox eq $1) && ($context eq $category)) { - return ($fields[2] ? $fields[2] : "unknown", $category); - } - } - } - } - return ("", $category); -} - -sub mailbox_options() -{ - local($context, $current, $filename, $category) = @_; - local (*VMAIL); - local $tmp2; - local $tmp; - if (!$filename) { - $filename = "/etc/asterisk/voicemail.conf"; - } - if (!$category) { - $category = "general"; - } -# print header; -# print "Including <h2>$filename</h2> while in <h2>$category</h2>...\n"; - open(VMAIL, "<$filename") || die("Bleh, no voicemail.conf"); - while(<VMAIL>) { - chomp; - s/\;.*$//; - if (/include\s\"([^\"]+)\"$/) { - ($tmp2, $category) = &mailbox_options($context, $current, "/etc/asterisk/$1", $category); -# print "Got '$tmp2'...\n"; - $tmp .= $tmp2; - } elsif (/\[(.*)\]/) { - $category = $1; - } elsif ($category ne "general") { - if (/([^\s]+)\s*\=\>?\s*(.*)/) { - @fields = split(/\,\s*/, $2); - $text = "$1"; - if ($fields[2]) { - $text .= " ($fields[1])"; - } - if ($1 eq $current) { - $tmp .= "<OPTION SELECTED>$text</OPTION>\n"; - } else { - $tmp .= "<OPTION>$text</OPTION>\n"; - } - - } - } - } - close(VMAIL); - return ($tmp, $category); -} - -sub mailbox_list() -{ - local ($name, $context, $current) = @_; - local $tmp; - local $text; - local $tmp; - local $opts; - if (!$context) { - $context = "default"; - } - $tmp = "<SELECT name=\"$name\">\n"; - ($opts) = &mailbox_options($context, $current); - $tmp .= $opts; - $tmp .= "</SELECT>\n"; - -} - -sub msgcount() -{ - my ($context, $mailbox, $folder) = @_; - my $path = "/var/spool/asterisk/voicemail/$context/$mailbox/$folder"; - if (opendir(DIR, $path)) { - my @msgs = grep(/^msg....\.txt$/, readdir(DIR)); - closedir(DIR); - return sprintf "%d", $#msgs + 1; - } - return "0"; -} - -sub msgcountstr() -{ - my ($context, $mailbox, $folder) = @_; - my $count = &msgcount($context, $mailbox, $folder); - if ($count > 1) { - "$count messages"; - } elsif ($count > 0) { - "$count message"; - } else { - "no messages"; - } -} -sub messages() -{ - my ($context, $mailbox, $folder) = @_; - my $path = "/var/spool/asterisk/voicemail/$context/$mailbox/$folder"; - if (opendir(DIR, $path)) { - my @msgs = sort grep(/^msg....\.txt$/, readdir(DIR)); - closedir(DIR); - return map { s/^msg(....)\.txt$/$1/; $_ } @msgs; - } - return (); -} - -sub getcookie() -{ - my ($var) = @_; - return cookie($var); -} - -sub makecookie() -{ - my ($format) = @_; - cookie(-name => "format", -value =>["$format"], -expires=>"+1y"); -} - -sub getfields() -{ - my ($context, $mailbox, $folder, $msg) = @_; - my $fields; - if (open(MSG, "</var/spool/asterisk/voicemail/$context/$mailbox/$folder/msg${msg}.txt")) { - while(<MSG>) { - s/\#.*$//g; - if (/^(\w+)\s*\=\s*(.*)$/) { - $fields->{$1} = $2; - } - } - close(MSG); - $fields->{'msgid'} = $msg; - } else { print "<BR>Unable to open '$msg' in '$mailbox', '$folder'\n<B>"; } - $fields; -} - -sub message_prefs() -{ - my ($nextaction, $msgid) = @_; - my $folder = param('folder'); - my $mbox = param('mailbox'); - my $passwd = param('password'); - my $format = param('format'); - if (!$format) { - $format = &getcookie('format'); - } - print header; - print <<_EOH; - -<TITLE>Asterisk Web-Voicemail: Preferences</TITLE> -<BODY BGCOLOR="white"> -$stdcontainerstart -<FORM METHOD="post"> -<table width=100% align=center> -<tr><td align=right colspan=3><font size=+2>Web Voicemail Preferences</font></td></tr> -<tr><td align=left><font size=+1>Preferred Audio Format:</font></td><td colspan=2></td></tr> -_EOH - -foreach $fmt (sort { $formats{$a}->{'pref'} <=> $formats{$b}->{'pref'} } keys %formats) { - my $clicked = "checked" if $fmt eq $format; - print "<tr><td></td><td align=left><input type=radio name=\"format\" $clicked value=\"$fmt\"></td><td width=100%> $formats{$fmt}->{name}</td></tr>\n"; -} - -print <<_EOH; -<tr><td align=right colspan=3><input type=submit value="save settings..."></td></tr> -</table> -<input type=hidden name="action" value="$nextaction"> -<input type=hidden name="folder" value="$folder"> -<input type=hidden name="mailbox" value="$mbox"> -<input type=hidden name="context" value="$context"> -<input type=hidden name="password" value="$passwd"> -<input type=hidden name="msgid" value="$msgid"> -$stdcontainerend -</BODY>\n -_EOH - -} - -sub message_play() -{ - my ($message, $msgid) = @_; - my $folder = param('folder'); - my ($mbox, $context) = split(/\@/, param('mailbox')); - my $passwd = param('password'); - my $format = param('format'); - - my $fields; - if (!$context) { - $context = param('context'); - } - if (!$context) { - $context = "default"; - } - - my $folders = &folder_list('newfolder', $context, $mbox, $folder); - my $mailboxes = &mailbox_list('forwardto', $context, $mbox); - if (!$format) { - $format = &getcookie('format'); - } - if (!$format) { - &message_prefs("play", $msgid); - } else { - print header(-cookie => &makecookie($format)); - $fields = &getfields($context, $mbox, $folder, $msgid); - if (!$fields) { - print "<BR>Bah!\n"; - return; - } - my $duration = $fields->{'duration'}; - if ($duration) { - $duration = sprintf "%d:%02d", $duration/60, $duration % 60; - } else { - $duration = "<i>Unknown</i>"; - } - print <<_EOH; - -<TITLE>Asterisk Web-Voicemail: $folder Message $msgid</TITLE> -<BODY BGCOLOR="white"> -$stdcontainerstart -<FORM METHOD="post"> -<table width=100% align=center> -<tr><td align=right colspan=3><font size=+1>$folder Message $msgid</font></td></tr> -_EOH - - print <<_EOH; -<tr><td align=center colspan=3> -<table> - <tr><td colspan=2 align=center><font size=+1>$folder <b>$msgid</b></font></td></tr> - <tr><td><b>Message:</b></td><td>$msgid</td></tr>\n - <tr><td><b>Mailbox:</b></td><td>$mbox</td></tr>\n - <tr><td><b>Folder:</b></td><td>$folder</td></tr>\n - <tr><td><b>From:</b></td><td>$fields->{callerid}</td></tr>\n - <tr><td><b>Duration:</b></td><td>$duration</td></tr>\n - <tr><td><b>Original Date:</b></td><td>$fields->{origdate}</td></tr>\n - <tr><td><b>Original Mailbox:</b></td><td>$fields->{origmailbox}</td></tr>\n - <tr><td><b>Caller Channel:</b></td><td>$fields->{callerchan}</td></tr>\n - <tr><td align=center colspan=2> - <input name="action" type=submit value="index"> - <input name="action" type=submit value="delete "> - <input name="action" type=submit value="forward to -> "> - $mailboxes - <input name="action" type=submit value="save to ->"> - $folders - <input name="action" type=submit value="play "> - <input name="action" type=submit value="download"> -</td></tr> -<tr><td colspan=2 align=center> -<embed width=400 height=40 src="vmail.cgi?action=audio&folder=$folder&mailbox=$mbox&password=$passwd&msgid=$msgid&format=$format&dontcasheme=$$.$format" autostart=yes loop=false></embed> -</td></tr></table> -</td></tr> -</table> -<input type=hidden name="folder" value="$folder"> -<input type=hidden name="mailbox" value="$mbox"> -<input type=hidden name="context" value="$context"> -<input type=hidden name="password" value="$passwd"> -<input type=hidden name="msgid" value="$msgid"> -$stdcontainerend -</BODY>\n -_EOH - } -} - -sub message_audio() -{ - my ($forcedownload) = @_; - my $folder = param('folder'); - my $msgid = param('msgid'); - my $mailbox = param('mailbox'); - my $format = param('format'); - if (!$format) { - $format = &getcookie('format'); - } - my $path = "/var/spool/asterisk/vm/$mailbox/$folder/msg${msgid}.$format"; - - $msgid =~ /^\d\d\d\d$/ || die("Msgid Liar ($msgid)!"); - grep(/^${format}$/, keys %formats) || die("Format Liar ($format)!"); - - # Mailbox and folder are already verified - if (open(AUDIO, "<$path")) { - $size = -s $path; - $|=1; - if ($forcedownload) { - print header(-type=>$formats{$format}->{'mime'}, -Content_length => $size, -attachment => "msg${msgid}.$format"); - } else { - print header(-type=>$formats{$format}->{'mime'}, -Content_length => $size); - } - - while(($amt = sysread(AUDIO, $data, 4096)) > 0) { - syswrite(STDOUT, $data, $amt); - } - close(AUDIO); - } else { - die("Hrm, can't seem to open $path\n"); - } -} - -sub message_index() -{ - my ($folder, $message) = @_; - my ($mbox, $context) = split(/\@/, param('mailbox')); - my $passwd = param('password'); - my $message2; - my $msgcount; - my $hasmsg; - my $newmessages, $oldmessages; - my $format = param('format'); - if (!$format) { - $format = &getcookie('format'); - } - if (!$context) { - $context = param('context'); - } - if (!$context) { - $context = "default"; - } - if ($folder) { - $msgcount = &msgcountstr($context, $mbox, $folder); - $message2 = " Folder '$folder' has " . &msgcountstr($context, $mbox, $folder); - } else { - $newmessages = &msgcount($context, $mbox, "INBOX"); - $oldmessages = &msgcount($context, $mbox, "Old"); - if (($newmessages > 0) || ($oldmessages < 1)) { - $folder = "INBOX"; - } else { - $folder = "Old"; - } - $message2 = "You have"; - if ($newmessages > 0) { - $message2 .= " <b>$newmessages</b> NEW"; - if ($oldmessages > 0) { - $message2 .= "and <b>$oldmessages</b> OLD"; - if ($oldmessages != 1) { - $message2 .= " messages."; - } else { - $message2 .= "message."; - } - } else { - if ($newmessages != 1) { - $message2 .= " messages."; - } else { - $message2 .= " message."; - } - } - } else { - if ($oldmessages > 0) { - $message2 .= " <b>$oldmessages</b> OLD"; - if ($oldmessages != 1) { - $message2 .= " messages."; - } else { - $message2 .= " message."; - } - } else { - $message2 .= " <b>no</b> messages."; - } - } - } - - my $folders = &folder_list('newfolder', $context, $mbox, $folder); - my $cfolders = &folder_list('changefolder', $context, $mbox, $folder); - my $mailboxes = &mailbox_list('forwardto', $context, $mbox); - print header(-cookie => &makecookie($format)); - print <<_EOH; - -<TITLE>Asterisk Web-Voicemail: $mbox $folder</TITLE> -<BODY BGCOLOR="white"> -$stdcontainerstart -<FORM METHOD="post"> -<table width=100% align=center> -<tr><td align=center colspan=2><font size=+2><I>$message</I></font></td></tr> -<tr><td align=right colspan=2><font size=+1><b>$folder</b> Messages</font> <input type=submit name="action" value="change to ->">$cfolders</td></tr> -<tr><td align=left colspan=2><font size=+1>$message2</font></td></tr> -</table> -<table width=100% align=center cellpadding=0 cellspacing=0> -_EOH - -print "<tr><td> Msg</td><td> From</td><td> Duration</td><td> Date</td><td> </td></tr>\n"; -print "<tr><td><hr></td><td><hr></td><td><hr></td><td><hr></td><td></td></tr>\n"; -foreach $msg (&messages($context, $mbox, $folder)) { - - $fields = &getfields($context, $mbox, $folder, $msg); - $duration = $fields->{'duration'}; - if ($duration) { - $duration = sprintf "%d:%02d", $duration / 60, $duration % 60; - } else { - $duration = "<i>Unknown</i>"; - } - $hasmsg++; - print "<tr><td><input type=checkbox name=\"msgselect\" value=\"$msg\"> <b>$msg</b></td><td>$fields->{'callerid'}</td><td>$duration</td><td>$fields->{'origdate'}</td><td><input name='play$msg' alt=\"Play message $msg\" border=0 type=image align=left src=\"$astpath/play.gif\"></td></tr>\n"; - -} -if (!$hasmsg) { - print "<tr><td colspan=4 align=center><P><b><i>No messages</i></b><P></td></tr>"; -} - -print <<_EOH; -</table> -<table width=100% align=center> -<tr><td align=right colspan=2> - <input type="submit" name="action" value="refresh"> -_EOH - -if ($hasmsg) { -print <<_EOH; - <input type="submit" name="action" value="delete"> - <input type="submit" name="action" value="save to ->"> - $folders - <input type="submit" name="action" value="forward to ->"> - $mailboxes -_EOH -} - -print <<_EOH; -</td></tr> -<tr><td align=right colspan=2> - <input type="submit" name="action" value="preferences"> - <input type="submit" name="action" value="logout"> -</td></tr> -</table> -<input type=hidden name="folder" value="$folder"> -<input type=hidden name="mailbox" value="$mbox"> -<input type=hidden name="context" value="$context"> -<input type=hidden name="password" value="$passwd"> -</FORM> -$stdcontainerend -</BODY>\n -_EOH -} - -sub validfolder() -{ - my ($folder) = @_; - return grep(/^$folder$/, @validfolders); -} - -sub folder_list() -{ - my ($name, $context, $mbox, $selected) = @_; - my $f; - my $count; - my $tmp = "<SELECT name=\"$name\">\n"; - foreach $f (@validfolders) { - $count = &msgcount($context, $mbox, $f); - if ($f eq $selected) { - $tmp .= "<OPTION SELECTED>$f ($count)</OPTION>\n"; - } else { - $tmp .= "<OPTION>$f ($count)</OPTION>\n"; - } - } - $tmp .= "</SELECT>"; -} - -sub message_rename() -{ - my ($context, $mbox, $oldfolder, $old, $newfolder, $new) = @_; - my $oldfile, $newfile; - return if ($old eq $new) && ($oldfolder eq $newfolder); - - if ($context =~ /^(\w+)$/) { - $context = $1; - } else { - die("Invalid Context<BR>\n"); - } - - if ($mbox =~ /^(\w+)$/) { - $mbox = $1; - } else { - die ("Invalid mailbox<BR>\n"); - } - - if ($oldfolder =~ /^(\w+)$/) { - $oldfolder = $1; - } else { - die("Invalid old folder<BR>\n"); - } - - if ($newfolder =~ /^(\w+)$/) { - $newfolder = $1; - } else { - die("Invalid new folder ($newfolder)<BR>\n"); - } - - if ($old =~ /^(\d\d\d\d)$/) { - $old = $1; - } else { - die("Invalid old Message<BR>\n"); - } - - if ($new =~ /^(\d\d\d\d)$/) { - $new = $1; - } else { - die("Invalid old Message<BR>\n"); - } - - my $path = "/var/spool/asterisk/voicemail/$context/$mbox/$newfolder"; - mkdir $path, 0755; - my $path = "/var/spool/asterisk/voicemail/$context/$mbox/$oldfolder"; - opendir(DIR, $path) || die("Unable to open directory\n"); - my @files = grep /^msg${old}\.\w+$/, readdir(DIR); - closedir(DIR); - foreach $oldfile (@files) { - my $tmp = $oldfile; - if ($tmp =~ /^(msg${old}.\w+)$/) { - $tmp = $1; - $oldfile = $path . "/$tmp"; - $tmp =~ s/msg${old}/msg${new}/; - $newfile = "/var/spool/asterisk/voicemail/$context/$mbox/$newfolder/$tmp"; -# print "Renaming $oldfile to $newfile<BR>\n"; - rename($oldfile, $newfile); - } - } -} - -sub file_copy() -{ - my ($orig, $new) = @_; - my $res; - my $data; - open(IN, "<$orig") || die("Unable to open '$orig'\n"); - open(OUT, ">$new") || DIE("Unable to open '$new'\n"); - while(($res = sysread(IN, $data, 4096)) > 0) { - syswrite(OUT, $data, $res); - } - close(OUT); - close(IN); -} - -sub message_copy() -{ - my ($mbox, $newmbox, $oldfolder, $old, $new) = @_; - my $oldfile, $newfile; - return if ($mbox eq $newmbox); - - if ($mbox =~ /^(\w+)$/) { - $mbox = $1; - } else { - die ("Invalid mailbox<BR>\n"); - } - - if ($newmbox =~ /^(\w+)$/) { - $newmbox = $1; - } else { - die ("Invalid new mailbox<BR>\n"); - } - - if ($oldfolder =~ /^(\w+)$/) { - $oldfolder = $1; - } else { - die("Invalid old folder<BR>\n"); - } - - if ($old =~ /^(\d\d\d\d)$/) { - $old = $1; - } else { - die("Invalid old Message<BR>\n"); - } - - if ($new =~ /^(\d\d\d\d)$/) { - $new = $1; - } else { - die("Invalid old Message<BR>\n"); - } - - my $path = "/var/spool/asterisk/vm/$newmbox"; - mkdir $path, 0755; - my $path = "/var/spool/asterisk/vm/$newmbox/INBOX"; - mkdir $path, 0755; - my $path = "/var/spool/asterisk/vm/$mbox/$oldfolder"; - opendir(DIR, $path) || die("Unable to open directory\n"); - my @files = grep /^msg${old}\.\w+$/, readdir(DIR); - closedir(DIR); - foreach $oldfile (@files) { - my $tmp = $oldfile; - if ($tmp =~ /^(msg${old}.\w+)$/) { - $tmp = $1; - $oldfile = $path . "/$tmp"; - $tmp =~ s/msg${old}/msg${new}/; - $newfile = "/var/spool/asterisk/vm/$newmbox/INBOX/$tmp"; -# print "Copying $oldfile to $newfile<BR>\n"; - &file_copy($oldfile, $newfile); - } - } -} - -sub message_delete() -{ - my ($context, $mbox, $folder, $msg) = @_; - if ($mbox =~ /^(\w+)$/) { - $mbox = $1; - } else { - die ("Invalid mailbox<BR>\n"); - } - if ($context =~ /^(\w+)$/) { - $context = $1; - } else { - die ("Invalid context<BR>\n"); - } - if ($folder =~ /^(\w+)$/) { - $folder = $1; - } else { - die("Invalid folder<BR>\n"); - } - if ($msg =~ /^(\d\d\d\d)$/) { - $msg = $1; - } else { - die("Invalid Message<BR>\n"); - } - my $path = "/var/spool/asterisk/voicemail/$context/$mbox/$folder"; - opendir(DIR, $path) || die("Unable to open directory\n"); - my @files = grep /^msg${msg}\.\w+$/, readdir(DIR); - closedir(DIR); - foreach $oldfile (@files) { - if ($oldfile =~ /^(msg${msg}.\w+)$/) { - $oldfile = $path . "/$1"; -# print "Deleting $oldfile<BR>\n"; - unlink($oldfile); - } - } -} - -sub message_forward() -{ - my ($toindex, @msgs) = @_; - my $folder = param('folder'); - my ($mbox, $context) = split(/\@/, param('mailbox')); - my $newmbox = param('forwardto'); - my $msg; - my $msgcount; - if (!$context) { - $context = param('context'); - } - if (!$context) { - $context = "default"; - } - $newmbox =~ s/(\w+)(\s+.*)?$/$1/; - if (!&validmailbox($context, $newmbox)) { - die("Bah! Not a valid mailbox '$newmbox'\n"); - return ""; - } - $msgcount = &msgcount($context, $newmbox, "INBOX"); - my $txt; - if ($newmbox ne $mbox) { -# print header; - foreach $msg (@msgs) { -# print "Forwarding $msg from $mbox to $newmbox<BR>\n"; - &message_copy($mbox, $newmbox, $folder, $msg, sprintf "%04d", $msgcount); - $msgcount++; - } - $txt = "Forwarded messages " . join(', ', @msgs) . "to $newmbox"; - } else { - $txt = "Can't forward messages to yourself!\n"; - } - if ($toindex) { - &message_index($folder, $txt); - } else { - &message_play($txt, $msgs[0]); - } -} - -sub message_delete_or_move() -{ - my ($toindex, $del, @msgs) = @_; - my $txt; - my $path; - my $y, $x; - my $folder = param('folder'); - my $newfolder = param('newfolder') unless $del; - $newfolder =~ s/^(\w+)\s+.*$/$1/; - my ($mbox, $context) = split(/\@/, param('mailbox')); - if (!$context) { - $context = param('context'); - } - if (!$context) { - $context = "default"; - } - my $passwd = param('password'); - my $msgcount = &msgcount($context, $mbox, $folder); - my $omsgcount = &msgcount($context, $mbox, $newfolder) if $newfolder; -# print header; - if ($newfolder ne $folder) { - $y = 0; - for ($x=0;$x<$msgcount;$x++) { - my $msg = sprintf "%04d", $x; - my $newmsg = sprintf "%04d", $y; - if (grep(/^$msg$/, @msgs)) { - if ($newfolder) { - &message_rename($context, $mbox, $folder, $msg, $newfolder, sprintf "%04d", $omsgcount); - $omsgcount++; - } else { - &message_delete($context, $mbox, $folder, $msg); - } - } else { - &message_rename($context, $mbox, $folder, $msg, $folder, $newmsg); - $y++; - } - } - if ($del) { - $txt = "Deleted messages " . join (', ', @msgs); - } else { - $txt = "Moved messages " . join (', ', @msgs) . " to $newfolder"; - } - } else { - $txt = "Can't move a message to the same folder they're in already"; - } - # Not as many messages now - $msgcount--; - if ($toindex || ($msgs[0] >= $msgcount)) { - &message_index($folder, $txt); - } else { - &message_play($txt, $msgs[0]); - } -} - -if (param()) { - my $folder = param('folder'); - my $changefolder = param('changefolder'); - $changefolder =~ s/(\w+)\s+.*$/$1/; - - my $newfolder = param('newfolder'); - $newfolder =~ s/^(\w+)\s+.*$/$1/; - if ($newfolder && !&validfolder($newfolder)) { - print header; - die("Bah! new folder '$newfolder' isn't a folder."); - } - $action = param('action'); - $msgid = param('msgid'); - if (!$action) { - my ($tmp) = grep /^play\d\d\d\d\.x$/, param; - if ($tmp =~ /^play(\d\d\d\d)/) { - $msgid = $1; - $action = "play"; - } else { - print header; - print "No message?<BR>\n"; - return; - } - } - @msgs = param('msgselect'); - @msgs = ($msgid) unless @msgs; - { - ($mailbox) = &check_login(); - if (length($mailbox)) { - if ($action eq 'login') { - &message_index($folder, "Welcome, $mailbox"); - } elsif (($action eq 'refresh') || ($action eq 'index')) { - &message_index($folder, "Welcome, $mailbox"); - } elsif ($action eq 'change to ->') { - if (&validfolder($changefolder)) { - $folder = $changefolder; - &message_index($folder, "Welcome, $mailbox"); - } else { - die("Bah! Not a valid change to folder '$changefolder'\n"); - } - } elsif ($action eq 'play') { - &message_play("$mailbox $folder $msgid", $msgid); - } elsif ($action eq 'preferences') { - &message_prefs("refresh", $msgid); - } elsif ($action eq 'download') { - &message_audio(1); - } elsif ($action eq 'play ') { - &message_audio(0); - } elsif ($action eq 'audio') { - &message_audio(0); - } elsif ($action eq 'delete') { - &message_delete_or_move(1, 1, @msgs); - } elsif ($action eq 'delete ') { - &message_delete_or_move(0, 1, @msgs); - } elsif ($action eq 'forward to ->') { - &message_forward(1, @msgs); - } elsif ($action eq 'forward to -> ') { - &message_forward(0, @msgs); - } elsif ($action eq 'save to ->') { - &message_delete_or_move(1, 0, @msgs); - } elsif ($action eq 'save to -> ') { - &message_delete_or_move(0, 0, @msgs); - } elsif ($action eq 'logout') { - &login_screen("Logged out!\n"); - } - } else { - sleep(1); - &login_screen("Login Incorrect!\n"); - } - } -} else { - &login_screen("\ "); -} diff --git a/vmdb.sql b/vmdb.sql deleted file mode 100755 index dbef173160..0000000000 --- a/vmdb.sql +++ /dev/null @@ -1,2 +0,0 @@ -drop table if exists users; -create table users (mailbox VARCHAR(80) NOT NULL PRIMARY KEY, context VARCHAR(80), password VARCHAR(80), fullname VARCHAR(80), email VARCHAR(80), pager VARCHAR(80), options VARCHAR(160)); -- GitLab