Index: astcc-admin.cgi =================================================================== RCS file: /usr/cvsroot/astcc/astcc-admin.cgi,v retrieving revision 1.14 diff -u -r1.14 astcc-admin.cgi --- astcc-admin.cgi 27 Apr 2005 03:18:09 -0000 1.14 +++ astcc-admin.cgi 30 Apr 2005 03:18:53 -0000 @@ -87,7 +87,7 @@ connect_db(); return -1 unless $dbh; return -1 unless $dbh->do("CREATE TABLE brands (name CHAR(40) PRIMARY KEY, language CHAR(10), publishednum CHAR(40), did char(40), markup INTEGER, inc INTEGER, fee INTEGER, days INTEGER)"); - return -1 unless $dbh->do("CREATE TABLE cards (number CHAR(20) PRIMARY KEY, language CHAR(10), facevalue INTEGER, used INTEGER NOT NULL, inc INTEGER NOT NULL, markup INTEGER NOT NULL, creation TIMESTAMP, firstuse TIMESTAMP, expiration TIMESTAMP, inuse INTEGER, brand CHAR(40), nextfee INTEGER)"); + return -1 unless $dbh->do("CREATE TABLE cards (number CHAR(20) PRIMARY KEY, language CHAR(10), facevalue INTEGER, used INTEGER NOT NULL, inc INTEGER NOT NULL, markup INTEGER NOT NULL, creation TIMESTAMP, firstuse TIMESTAMP, expiration TIMESTAMP, inuse INTEGER, brand CHAR(40), nextfee INTEGER, pin INTEGER)"); return -1 unless $dbh->do("CREATE TABLE trunks (name CHAR(40) PRIMARY KEY, tech CHAR(10), path CHAR(40) NOT NULL)"); return -1 unless $dbh->do("CREATE TABLE routes (pattern CHAR(40) PRIMARY KEY, comment CHAR(80), trunks CHAR(80), connectcost INTEGER NOT NULL, includedseconds INTEGER NOT NULL, cost INTEGER NOT NULL)"); return -1 unless $dbh->do("CREATE TABLE cdrs (cardnum CHAR(40), callerid char(80), callednum CHAR(80), trunk CHAR(40), disposition CHAR(20), billseconds INTEGER, billcost INTEGER)"); @@ -95,10 +95,22 @@ } sub users_update_db() { - return -1 unless $dbh->do("ALTER TABLE cdrs ADD COLUMN callstart CHAR(24)"); + $dbh->do("ALTER TABLE cdrs ADD COLUMN callstart CHAR(24)"); return 0; } +sub update_db() { + $dbh->do("ALTER TABLE cdrs ADD COLUMN callstart CHAR(24)"); + $dbh->do("ALTER TABLE cards ADD COLUMN pin INTEGER"); + $dbh->do("ALTER TABLE cards ADD COLUMN expiration TIMESTAMP"); + $dbh->do("ALTER TABLE cards ADD COLUMN creation TIMESTAMP"); + $dbh->do("ALTER TABLE cards ADD COLUMN firstuse TIMESTAMP"); + $dbh->do("ALTER TABLE cards ADD COLUMN nextfee INTEGER"); + $dbh->do("ALTER TABLE cards ADD COLUMN brand CHAR(40)"); + $dbh->do("ALTER TABLE cards ADD COLUMN pin INTEGER"); + return 0; +} + sub save_config() { my $tmp; open(CFG, ">/var/lib/astcc/astcc-config.conf"); @@ -241,9 +253,12 @@ sub addcard() { my ($number, $language, $seconds, $inc, $markup, $brand, $nextfee) = @_; - my $tmp = "INSERT INTO cards (number,language,inc,facevalue,markup,used,brand,nextfee) VALUES (" . + my $pin = &findunique; + my $pin = substr($pin, 0, $config{'pinlength'}); + my $tmp = "INSERT INTO cards (number,language,inc,facevalue,markup,used,brand,nextfee,pin) VALUES (" . $dbh->quote($number) . ", " . $dbh->quote($language) . ", " . $dbh->quote($inc) . ", " . $dbh->quote($seconds) . - ", " . $dbh->quote($markup) . ",0,". $dbh->quote($brand) ."," . $dbh->quote($nextfee) .")"; + ", " . $dbh->quote($markup) . ",0,". $dbh->quote($brand) ."," . $dbh->quote($nextfee) . + ", " . $dbh->quote($pin) . ")"; $dbh->do($tmp) || print "$tmp failed"; } @@ -258,9 +273,9 @@ my $sth = $dbh->prepare("SELECT * FROM brands WHERE name = " . $dbh->quote($brand)); $sth->execute; if ($config{'email'} eq "YES") { - open (EMAIL, "| $config{mailprog} $config{emailadd} -s 'New Cards Created'") || + open (EMAIL, "| $config{mailprog} $config{emailadd} -s 'New Card(s) Created'") || die "Error - could not write to $config{mailprog}\n"; - print EMAIL "You have added $count $brand cards in the amount of $pennies cents. \n\n"; + print EMAIL "You have added $count $brand card(s) in the amount of $pennies cents. \n\n"; } if ($row = $sth->fetchrow_hashref) { ($language, $inc, $markup, $nextfee) = ($row->{language}, $row->{inc}, $row->{markup}, $row->{days}); @@ -275,9 +290,9 @@ } &addcard($number, $language, $pennies * 100, $inc, $markup, $brand, $nextfee); if ($config{'email'} eq "YES") { - print EMAIL "$number \n"; + print EMAIL "Number: $number Pin: $pin \n"; } - $status .= "$number
"; + $status .= "Number: $number Pin: $pin
"; } if ($config{'email'} eq "YES") { print EMAIL ".\n"; @@ -320,10 +335,12 @@ print EMAIL_ADMIN "Account Number: $number \n"; print EMAIL_ADMIN "Password: $secret \n"; print EMAIL_ADMIN "Balance (Pennies): $pennies \n"; + print EMAIL_ADMIN "Pin: $pin \n"; } print USERS_EMAIL "Account Number: $number \n"; print USERS_EMAIL "Password: $secret \n"; print USERS_EMAIL "Balance (cents): $pennies \n"; + print USERS_EMAIL "Pin: $pin \n"; if ($sip eq "y" ) { &add_sip_user($number, $secret); } @@ -477,7 +494,7 @@ @cardlist = &list_cards(); $body .= ""; $body .= "" . $status . "\n"; - $body .= "\n"; + $body .= "\n"; foreach (@cardlist) { $cardnum = $_; $cardinfo = &getcard($cardnum); @@ -489,7 +506,7 @@ $color = "#ffffcc"; } - $body .= "\n"; } } @@ -911,7 +928,7 @@ my $body = start_form; my $activity = "
"; my $action = param('action'); - if (($action eq "Save") || ($action eq "Create Database")) { + if (($action eq "Save") || ($action eq "Create Database") || ($action eq "Update Database")) { $config{dbuser} = param('dbuser'); $config{dbpass} = param('dbpass'); $config{dbname} = param('dbname'); @@ -925,6 +942,8 @@ $config{maintverbose} = param('maintverbose'); $config{maintcdr} = param('maintcdr'); $config{maintname} = param('maintname'); + $config{pinstatus} = param('pinstatus'); + $config{pinlength} = param('pinlength'); &save_config(); $activity = "Configuration saved..."; if ($action eq "Create Database") { @@ -933,6 +952,12 @@ } else { $activity = "Database creation failed!"; } + } elsif ($action eq "Update Database") { + if (!&update_db()) {i + $activity = "Database Updated!"; + } else { + $activity = "Database Update failed!"; + } } &connect_db; } @@ -953,7 +978,10 @@ $body .= ""; $body .= ""; $body .= ""; + $body .= ""; + $body .= ""; $body .= ""; + $body .= ""; $body .= "
Card NumberBrandAmount UsedFace ValueMarkupCreationFirst UseExpirationIn Use
Card NumberBrandAmount UsedFace ValueMarkupCreationFirst UseExpirationIn UsePin
$cardnum$cardinfo->{brand}$cardinfo->{used}$cardinfo->{facevalue}$cardinfo->{markup}$cardinfo->{creation}$cardinfo->{firstuse}$cardinfo->{expiration}$cardinfo->{inuse}"; + $body .= "
$cardnum$cardinfo->{brand}$cardinfo->{used}$cardinfo->{facevalue}$cardinfo->{markup}$cardinfo->{creation}$cardinfo->{firstuse}$cardinfo->{expiration}$cardinfo->{inuse}$cardinfo->{pin}"; $body .= "
Verbose account maintainence (YES/NO) " . textfield(-name => 'maintverbose', -default => $config{maintverbose}) . "
Modify CDR to show maintainence fee (YES/NO) " . textfield(-name => 'maintcdr', -default => $config{maintcdr}) . "
CDR Text for maintainence fee" . textfield(-name => 'maintname', -default => $config{maintname}) . "
Pin Length (4-20) " . textfield(-name => 'pinlength', -default => $config{pinlength}) . "
Require Pins (Yes/NO)" . textfield(-name => 'pinstatus', -default => $config{pinstatus}) . "
 " . submit(-name => 'action', -value => 'Save') . "" . submit( -name => 'action', -value => 'Create Database') . " 
 " . submit(-name => 'action', -value => 'Update Database') . " 
"; return $body; } Index: astcc.agi =================================================================== RCS file: /usr/cvsroot/astcc/astcc.agi,v retrieving revision 1.12 diff -u -r1.12 astcc.agi --- astcc.agi 12 Mar 2005 06:52:38 -0000 1.12 +++ astcc.agi 30 Apr 2005 03:18:53 -0000 @@ -289,7 +289,7 @@ $sth->finish; return "CHANUNAVAIL" unless $res; if ($res->{tech} eq "Local") { - $dialstr = "Local/$phone/$res->{path}|30|HL(" . ($maxtime * 60 * 1000) . ":60000:30000)"; + $dialstr = "Local/$phone/$res->{path}|30|HL/n(" . ($maxtime * 60 * 1000) . ":60000:30000)"; $res = $AGI->exec("DIAL $dialstr"); $answeredtime = $AGI->get_variable("ANSWEREDTIME"); $dialstatus = $AGI->get_variable("DIALSTATUS"); @@ -329,10 +329,10 @@ sub calccost() { my ($adjconn, $adjcost, $answeredtime, $increment) = @_; - my $adjtime = int(($answeredtime + $increment - 1) / $increment) * $increment; + eval { my $adjtime = int(($answeredtime + $increment - 1) / $increment) * $increment }; my $cost; print STDERR "Adjusted time is $adjtime, cost is $adjcost with $adjconn fee\n"; - $cost = int($adjcost * $adjtime / 60); + eval { $cost = int($adjcost * $adjtime / 60) }; $cost += $adjconn; print STDERR "Total cost is $cost\n"; return $cost; @@ -441,7 +441,9 @@ if (length($res) > 0) { $cardno = $AGI->get_data("astcc-silence"); } else { - $cardno = $AGI->get_data("astcc-accountnum"); + $res = &mystreamfile("astcc-pleasepin"); # Please enter your + $res = &mysaynumber($config{'cardlength'}); # How many digits long + $cardno = $AGI->get_data("astcc-accountnum2"); #digit account number skipping any punctuation followed by the pound sign } exit if $cardno < 0; $cardno = $res . $cardno; @@ -481,6 +483,31 @@ # # At this point we have a valid card number. # +$tries = 0; +if ($config{'pinstatus'} eq "YES") { + $correctpin = $carddata->{pin}; + while ($pin ne $correctpin) { + $tries++; + if ($quiet < 5 ) { + $res = &mystreamfile("astcc-pleasepin"); + $res = &mysaynumber($config{'pinlength'}); + $pin = $AGI->get_data("astcc-pin"); + } else { $res = "silent"; } + if ($tries > 1) { + $res = &mystreamfile("astcc-invalidpin"); + } + if ($tries > 2) { + if ($quiet < 2 ) { + $AGI->stream_file("vm-goodbye"); + } + exit(0); + } + } +} +# +# At this point we have a valid card and pin number. +# + &checkexpired($carddata->{number}); &checkinuse($carddata->{number}); &setinuse($carddata->{number}, 1);