277 lines
8.3 KiB
Perl
277 lines
8.3 KiB
Perl
#!/usr/bin/perl
|
|
#use warnings;
|
|
|
|
# Our little random password generator sub
|
|
sub randomPassword {
|
|
my $password;
|
|
my $_rand;
|
|
|
|
my $password_length = $_[0];
|
|
if (!$password_length) {
|
|
$password_length = 10;
|
|
}
|
|
|
|
my @chars = split(" ",
|
|
"0 1 2 3 4 5 6 7 8 9 a b c d e
|
|
f g h i j k l m n o p q r s t u
|
|
v w x y z 0 1 2 3 4 5 6 7 8 9 A
|
|
B C D E F G H I J K L M N O P Q
|
|
R S T U V W X Y Z 0 1 2 3 4 5 6
|
|
7 8 9");
|
|
|
|
srand;
|
|
|
|
for (my $i=0; $i <= $password_length ;$i++) {
|
|
$_rand = int(rand 41);
|
|
$password .= $chars[$_rand];
|
|
}
|
|
return $password;
|
|
}
|
|
|
|
# Used for number to letter substitution in loops
|
|
@abcnumsub = split(" ", "a b c d e f g h i j k l m n o p q r s t u v w x y z");
|
|
|
|
# default path to astguiclient configuration file:
|
|
$PATHconf = '/etc/astguiclient.conf';
|
|
|
|
open(conf, "$PATHconf") || die "can't open $PATHconf: $!\n";
|
|
@conf = <conf>;
|
|
close(conf);
|
|
$i=0;
|
|
foreach(@conf)
|
|
{
|
|
$line = $conf[$i];
|
|
$line =~ s/ |>|\n|\r|\t|\#.*|;.*//gi;
|
|
if ( ($line =~ /^VARDB_server/) && ($CLIDB_server < 1) )
|
|
{$VARDB_server = $line; $VARDB_server =~ s/.*=//gi;}
|
|
if ( ($line =~ /^VARDB_database/) && ($CLIDB_database < 1) )
|
|
{$VARDB_database = $line; $VARDB_database =~ s/.*=//gi;}
|
|
if ( ($line =~ /^VARDB_user/) && ($CLIDB_user < 1) )
|
|
{$VARDB_user = $line; $VARDB_user =~ s/.*=//gi;}
|
|
if ( ($line =~ /^VARDB_pass/) && ($CLIDB_pass < 1) )
|
|
{$VARDB_pass = $line; $VARDB_pass =~ s/.*=//gi;}
|
|
if ( ($line =~ /^VARDB_port/) && ($CLIDB_port < 1) )
|
|
{$VARDB_port = $line; $VARDB_port =~ s/.*=//gi;}
|
|
|
|
$i++;
|
|
}
|
|
|
|
|
|
### begin parsing run-time options ### Shamelessly stolen from Matt's code
|
|
if (length($ARGV[0])>1)
|
|
{
|
|
$i=0;
|
|
while ($#ARGV >= $i)
|
|
{
|
|
$args = "$args $ARGV[$i]";
|
|
$i++;
|
|
}
|
|
print "\n\nPhone Alias Creation Tool\n\n";
|
|
if ($args =~ /--help/i)
|
|
{
|
|
print "allowed run time options:\n";
|
|
print " [--start-phone=XXXX] = Phone to start from\n";
|
|
print " [--phone-count=XXX] = Number of sequential phones to make\n";
|
|
print " [--password=X] = Password to set all phones to, or RND if random\n";
|
|
print " [--pass-length=X] = Length to set password to if random (Defaults to 10)\n";
|
|
print " [--protocol=SIP/IAX] = Create SIP or IAX entries (required)\n";
|
|
print " [--gmt-offset=-/+X] = GMT Offset of phone, I.E. -5.00 for EST, etc\n";
|
|
print " [--server=server_id] = Don't create alias, just set up phones on a single server\n";
|
|
print " [--debug] = debug\n";
|
|
exit;
|
|
}
|
|
else
|
|
{
|
|
if ($args =~ /--debug/i)
|
|
{
|
|
$DB=1;
|
|
print "\n----- DEBUG -----\n\n";
|
|
}
|
|
}
|
|
if ($args =~ /--start-phone=/i) # starting phone extension
|
|
{
|
|
@startphoneARY = split(/--start-phone=/,$args);
|
|
@startphoneARX = split(/ /,$startphoneARY[1]);
|
|
if (length($startphoneARX[0])>2)
|
|
{
|
|
$startphone = $startphoneARX[0];
|
|
$startphone =~ s/\/$| |\r|\n|\t//gi;
|
|
print " Start Phone : $startphone\n";
|
|
} else {
|
|
die "Need a starting phone position\n";
|
|
}
|
|
}
|
|
|
|
if ($args =~ /--phone-count=/i) # number of sequential phones to make
|
|
{
|
|
@phonecountARY = split(/--phone-count=/,$args);
|
|
@phonecountARX = split(/ /,$phonecountARY[1]);
|
|
if (length($phonecountARX[0])>1)
|
|
{
|
|
$phonecount = $phonecountARX[0];
|
|
$phonecount =~ s/\/$| |\r|\n|\t//gi;
|
|
print " Phone Count : $phonecount\n";
|
|
} else {
|
|
die "Need to be creating at least 10 phones to use this script!\n";
|
|
}
|
|
}
|
|
|
|
if ($args =~ /--password=/i) # static password to use
|
|
{
|
|
@passwordARY = split(/--password=/,$args);
|
|
@passwordARX = split(/ /,$passwordARY[1]);
|
|
if (length($passwordARX[0])>2)
|
|
{
|
|
$password = $passwordARX[0];
|
|
$password =~ s/\/$| |\r|\n|\t//gi;
|
|
print " Password : $password\n";
|
|
} else {
|
|
die "No password option given\n";
|
|
}
|
|
}
|
|
|
|
if ($args =~ /--pass-length=/i) # password length to use if random
|
|
{
|
|
@passlengthARY = split(/--pass-length=/,$args);
|
|
@passlengthARX = split(/ /,$passlengthARY[1]);
|
|
$passlength = $passlengthARX[0];
|
|
$passlength =~ s/\/$| |\r|\n|\t//gi;
|
|
if ($password=='RND')
|
|
{
|
|
print " Pass Length : $passlength\n";
|
|
$passlength = $passlength - 1 ;
|
|
}
|
|
}
|
|
|
|
if ($args =~ /--protocol=/i) # Protocol to use
|
|
{
|
|
@protocolARY = split(/--protocol=/,$args);
|
|
@protocolARX = split(/ /,$protocolARY[1]);
|
|
if (length($protocolARX[0])>2)
|
|
{
|
|
$protocol = $protocolARX[0];
|
|
$protocol =~ s/\/$| |\r|\n|\t//gi;
|
|
print " Protocol : $protocol\n";
|
|
} else {
|
|
die "Need to specify SIP or IAX protocol\n";
|
|
}
|
|
}
|
|
|
|
if ($args =~ /--server=/i) # Protocol to use
|
|
{
|
|
@serverARY = split(/--server=/,$args);
|
|
@serverARX = split(/ /,$serverARY[1]);
|
|
if (length($serverARX[0])>2)
|
|
{
|
|
$server = $serverARX[0];
|
|
$server =~ s/\/$| |\r|\n|\t//gi;
|
|
print " server : $server\n";
|
|
}
|
|
}
|
|
|
|
if ($args =~ /--gmt-offset=/i) # Protocol to use
|
|
{
|
|
@gmtoffsetARY = split(/--gmt-offset=/,$args);
|
|
@gmtoffsetARX = split(/ /,$gmtoffsetARY[1]);
|
|
if (length($gmtoffsetARX[0])>3)
|
|
{
|
|
$gmtoffset = $gmtoffsetARX[0];
|
|
$gmtoffset =~ s/\/$| |\r|\n|\t//gi;
|
|
print " GMT offset : $gmtoffset\n";
|
|
} else {
|
|
die "GMT Offset not set\n";
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
die "no command line options set\n";
|
|
}
|
|
|
|
# Some other simple data validation
|
|
if (length($passlength)>0 and $password!='RND') {
|
|
die "Can not use randomn password without a password length";
|
|
}
|
|
|
|
# Set-up our database connection strings, die if we cant connect to either DB
|
|
use DBI;
|
|
$dbhA = DBI->connect("DBI:mysql:$VARDB_database:$VARDB_server:$VARDB_port", "$VARDB_user", "$VARDB_pass") or die "Couldn't connect to database: " . DBI->errstr;
|
|
|
|
# Find our servers
|
|
if (length($server)>2) {
|
|
$stmtSERVERS = "select server_ip from servers where server_id='$server' and active_agent_login_server='Y' and active='Y';";
|
|
if ($DB==1) {print "Server Selection SQL: $stmtSERVERS\n"; }
|
|
} else {
|
|
$stmtSERVERS = "select server_ip from servers where active_agent_login_server='Y' and active='Y';";
|
|
if ($DB==1) {print "Server Selection SQL: $stmtSERVERS\n"; }
|
|
}
|
|
$sthSERVERS = $dbhA->prepare($stmtSERVERS) or die "Preparing sthSERVERS: ",$dbhA->errstr;
|
|
$sthSERVERS->execute or die "Executing sthSERVERS: ",$dbhA->errstr;
|
|
$sthSERVERSrows = $sthSERVERS->rows;
|
|
|
|
# Now loop through our servers, creating an array of their IP's
|
|
if ($sthSERVERSrows>=1) {
|
|
$i=0;
|
|
while ($i < $sthSERVERSrows) {
|
|
@arySERVERS = $sthSERVERS->fetchrow_array;
|
|
$server_ip = $arySERVERS[0];
|
|
if ($i==0) {
|
|
$server_ip_list = $server_ip;
|
|
} else {
|
|
$server_ip_list = $server_ip_list . " " . $server_ip;
|
|
}
|
|
|
|
$i++;
|
|
}
|
|
if ($DB==1) { print "Server IP List: $server_ip_list\n"; }
|
|
@serverip = split(" ", $server_ip_list);
|
|
|
|
} else {
|
|
die "That server does not exist\n";
|
|
}
|
|
|
|
$i=0;
|
|
# Now do some inserts
|
|
while ($i < $phonecount) {
|
|
$n=0;
|
|
$currphone = $startphone + $i;
|
|
$aliaslist = '';
|
|
$phonepass = $password;
|
|
if ($password=='RND') {
|
|
$phonepass = randomPassword($passlength);
|
|
}
|
|
if ($DB==1) { print "Password for phone $currphone: $phonepass \n"; }
|
|
while ($n < $sthSERVERSrows) {
|
|
if ($sthSERVERSrows>1) { $currphonealias = $currphone . $abcnumsub[$n]; } else { $currphonealias = $currphone; }
|
|
|
|
if ($n == 0) {
|
|
$aliaslist = $currphonealias;
|
|
} else {
|
|
$aliaslist = $aliaslist . "," . $currphonealias;
|
|
}
|
|
|
|
$server_ip = $serverip[$n];
|
|
$stmtPHONE = "INSERT INTO phones (extension,dialplan_number,voicemail_id,server_ip,login,pass,status,active,phone_type,fullname,protocol,local_gmt,outbound_cid) values('$currphonealias','$currphone','$currphone','$server_ip','$currphonealias','$phonepass','ACTIVE','Y','Agent $currphone','station $currphone','$protocol','$gmtoffset','0000000000');";
|
|
if ($DB==1) { print "Phone insert $n for phone $currphone: $stmtPHONE \n"; }
|
|
$sthPHONE = $dbhCDR->prepare($stmtPHONE) or die "Preparing stmtPHONE: ",$dbhA->errstr;
|
|
$sthPHONE->execute or die "Executing sthPHONE: ",$dbhA->errstr;
|
|
$sthPHONE->finish;
|
|
|
|
$n++;
|
|
}
|
|
$aliaslogin = $currphone . 'x';
|
|
|
|
if ($sthSERVERSrows>1) {
|
|
$stmtALIAS = "insert into phones_alias (alias_id, alias_name, logins_list) values ('$aliaslogin', '$aliaslogin', '$aliaslist');";
|
|
if ($DB==1) { print "Phone alias insert for phone $currphone: $stmtALIAS \n"; }
|
|
$sthALIAS = $dbhCDR->prepare($stmtALIAS) or die "Preparing stmtALIAS: ",$dbhA->errstr;
|
|
$sthALIAS->execute or die "Executing sthALIAS: ",$dbhA->errstr;
|
|
$sthALIAS->finish;
|
|
}
|
|
$i++;
|
|
}
|
|
|
|
print "\n\nAlias list done\n";
|