From 850947fac56ae2dc48aca9968174939286e2646c Mon Sep 17 00:00:00 2001 From: mattf Date: Tue, 18 Jun 2019 20:19:26 +0000 Subject: [PATCH] Added TCPAlitigatorlist_inbound_filter.php git-svn-id: svn://192.168.202.10@3114 3d104415-ff17-0410-8863-d5cf3c621b8a --- .../TCPAlitigatorlist_inbound_filter.php | 240 ++++++++++++++++++ 1 file changed, 240 insertions(+) create mode 100644 www/vicidial/TCPAlitigatorlist_inbound_filter.php diff --git a/www/vicidial/TCPAlitigatorlist_inbound_filter.php b/www/vicidial/TCPAlitigatorlist_inbound_filter.php new file mode 100644 index 00000000..8c54c963 --- /dev/null +++ b/www/vicidial/TCPAlitigatorlist_inbound_filter.php @@ -0,0 +1,240 @@ + LICENSE: AGPLv2 +# +# This script searches tcpalitigatorlist.com's scrub service for incoming DID phone numbers +# and returns a blocking match of '1' that will send the call to the Filter route +# DID Filter URL feature in the URL search type with the following URL: +# VARhttp://server/vicidial/TCPAlitigatorlist_inbound_filter.php?phone=--A--phone_number--B-- +# +# This script REQUIRES a Settings Container in the system with ID of: TCPALITIGATORLIST: +# TCPALITIGATORLIST_URL is the URL to connect to TCPALITIGATORLIST.com. You will probably +# never have to change this unless TCPALITIGATORLIST.com completely redoes their API +#TCPALITIGATORLIST_URL => https://tcpalitigatorlist.com/wp-json/scrub/phone/tcpa/ +# USERNAME is your TCPALITIGATORLIST.com API username +#USERNAME => xyz... +# PASSWORD is your TCPALITIGATORLIST.com API password(secret) +#PASSWORD => abc... +# +# This code is tested against TCPALITIGATORLIST.COM scrub utility BETA version on 2019-06-18 +# +# CHANGES +# 190618-1417 - First Build +# + +header ("Content-type: text/html; charset=utf-8"); + +require("dbconnect_mysqli.php"); +require("functions.php"); + +if (isset($_GET["phone"])) {$phone=$_GET["phone"];} + elseif (isset($_POST["phone"])) {$phone=$_POST["phone"];} +if (isset($_GET["DB"])) {$DB=$_GET["DB"];} + elseif (isset($_POST["DB"])) {$DB=$_POST["DB"];} +if (isset($_GET["in_filter_override"])) {$in_filter_override=$_GET["in_filter_override"];} + elseif (isset($_POST["in_filter_override"])) {$in_filter_override=$_POST["in_filter_override"];} +if (isset($_GET["in_cache_override"])) {$in_cache_override=$_GET["in_cache_override"];} + elseif (isset($_POST["in_cache_override"])) {$in_cache_override=$_POST["in_cache_override"];} + +############################################# +##### START SYSTEM_SETTINGS LOOKUP ##### +$stmt = "SELECT use_non_latin,webroot_writable FROM system_settings;"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$qm_conf_ct = mysqli_num_rows($rslt); +if ($qm_conf_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $non_latin = $row[0]; + $webroot_writable = $row[1]; + } +##### END SETTINGS LOOKUP ##### +########################################### + +if ($non_latin < 1) + { + $phone=preg_replace('/[^-_0-9a-zA-Z]/','',$phone); + } +else + { + $phone = preg_replace("/'|\"|\\\\|;/","",$phone); + } +$in_filter_override=preg_replace('/[^-_0-9a-zA-Z]/','',$in_filter_override); +$in_cache_override=preg_replace('/[^-_0-9a-zA-Z]/','',$in_cache_override); +$filter_count=0; +$ENTRYdate = date("mdHis"); + +$stmt = "SELECT count(*) FROM vicidial_settings_containers where container_id='TCPALITIGATORLIST';"; +$rslt=mysql_to_mysqli($stmt, $link); +if ($DB) {echo "$stmt\n";} +$sc_ct = mysqli_num_rows($rslt); +if ($sc_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $SC_count = $row[0]; + } + +if ($SC_count > 0) + { + $stmt = "SELECT container_entry FROM vicidial_settings_containers where container_id='TCPALITIGATORLIST';"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {echo "$stmt\n";} + $sc_ct = mysqli_num_rows($rslt); + if ($sc_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $container_entry = $row[0]; + $container_ARY = explode("\n",$container_entry); + $p=0; + $scrub_url=''; + $flag_invalid=0; + $flag_dnc=0; + $flag_projdnc=0; + $flag_litigator=0; + $valid_pull=0; + $pull_counter=0; + $container_ct = count($container_ARY); + while ($p <= $container_ct) + { + $line = $container_ARY[$p]; + $line = preg_replace("/\n|\r|\t|\#.*|;.*/",'',$line); + if (preg_match("/^TCPALITIGATORLIST_URL/",$line)) + {$scrub_url = $line; $scrub_url = trim(preg_replace("/.*=>/",'',$scrub_url));} + if (preg_match("/^USERNAME/",$line)) + {$APIusername = $line; $APIusername = trim(preg_replace("/.*=>/",'',$APIusername));} + if (preg_match("/^PASSWORD/",$line)) + {$APIpassword = $line; $APIpassword = trim(preg_replace("/.*=>/",'',$APIpassword));} + if (preg_match("/^INBOUND_CACHE/",$line)) + {$in_cache = $line; $in_cache = trim(preg_replace("/.*=>/",'',$in_cache));} + + $p++; + } + if (strlen($in_filter_override)>5) + { + if ($DB) {echo "FILTER OVERRIDE: $in_filter_override|$in_filter\n";} + $in_filter = $in_filter_override; + } + if (strlen($in_cache_override)>0) + { + if ($DB) {echo "CACHE OVERRIDE: $in_cache_override|$in_cache\n";} + $in_cache = $in_cache_override; + } + $scrub_url .= $phone . "/"; + + ### BEGIN if inbound cache check is enabled, search the scrub logs for this phone number within last X days + $cache_found=0; + if ( (strlen($in_cache)>0) and ($in_cache > 0) ) + { + $stmt = "SELECT full_response,scrub_date FROM vicidial_dnccom_scrub_log where phone_number='$phone' and scrub_date > CONCAT(DATE_ADD(CURDATE(), INTERVAL -$in_cache DAY),' ',CURTIME()) order by scrub_date desc limit 1;"; + $rslt=mysql_to_mysqli($stmt, $link); + if ($DB) {echo "$stmt\n";} + $vdsl_ct = mysqli_num_rows($rslt); + if ($vdsl_ct > 0) + { + $row=mysqli_fetch_row($rslt); + $SCUfile_contents = $row[0]; + $cache_found++; + if ($DB) {echo "CACHE FOUND: $row[1]|$vdsl_ct|$stmt\n";} + } + } + ### END if inbound cache check is enabled, search the scrub logs for this phone number within last X days + + if ($cache_found < 1) + { + while ( ($valid_pull < 1) and ($pull_counter < 5) ) + { + ### insert a new url log entry + $uniqueid = $ENTRYdate . '.' . $phone; + $SQL_log = "$scrub_url"; + $SQL_log = preg_replace('/;|\n/','',$SQL_log); + $SQL_log = addslashes($SQL_log); + $stmt = "INSERT INTO vicidial_url_log SET uniqueid='$uniqueid',url_date=NOW(),url_type='TCPAlit',url='$SQL_log',url_response='';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $affected_rows = mysqli_affected_rows($link); + $url_id = mysqli_insert_id($link); + + $URLstart_sec = date("U"); + + if ($DB > 0) {echo "$scrub_url($APIusername:$APIpassword)
\n";} + + # use cURL to call the copy custom fields code + $curl = curl_init(); + + # Set some options - we are passing in a useragent too here + curl_setopt_array($curl, array( + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_URL => $scrub_url, + CURLOPT_POST => 0, + CURLOPT_HTTPAUTH => CURLAUTH_BASIC, + CURLOPT_USERPWD => "$APIusername:$APIpassword", + CURLOPT_SSL_VERIFYPEER => FALSE, + CURLOPT_USERAGENT => 'VICIdial inbound DID filter', + CURLOPT_VERBOSE => 1 + )); + + # Send the request & save response to $resp + $resp = curl_exec($curl); + $err = curl_errno($curl); + $errmsg = curl_error($curl); + $header = curl_getinfo($curl); + $header_string = implode(">",$header). + + # Close request to clear up some resources + curl_close($curl); + + $header_ct = count($header); + # var_dump($header); + + + if ($DB > 0) {echo "OUTPUT: |$resp|
DEBUG: |$err|$errmsg|$header_string($header_ct)|
\n";} + + ### update url log entry + $URLend_sec = date("U"); + $URLdiff_sec = ($URLend_sec - $URLstart_sec); + if ($resp) + { + if (is_array($resp)) + {$SCUfile_contents = implode("", $resp);} + else + {$SCUfile_contents = $resp;} + $SCUfile_contents = preg_replace("/;|\n/",'',$SCUfile_contents); + $SCUfile_contents = addslashes($SCUfile_contents); + $valid_pull++; + } + else + { + $SCUfile_contents = "PHP ERROR: Info=$info_string"; + if (!preg_match("/\d/",$phone)) + {$valid_pull++;} + } + $stmt = "UPDATE vicidial_url_log SET response_sec='$URLdiff_sec',url_response='$SCUfile_contents' where url_log_id='$url_id';"; + if ($DB) {echo "$stmt\n";} + $rslt=mysql_to_mysqli($stmt, $link); + $affected_rows = mysqli_affected_rows($link); + + $pull_counter++; + } + } + + if (preg_match("/match/",$SCUfile_contents)) + { + $flag_litigator++; + $filter_count++; + } + + if ($cache_found < 1) + { + $stmt = "INSERT INTO vicidial_dnccom_scrub_log SET phone_number='$phone',scrub_date=NOW(),flag_invalid='$flag_invalid',flag_dnc='$flag_dnc',flag_projdnc='$flag_projdnc',flag_litigator='$flag_litigator',full_response='$SCUfile_contents';"; + $rslt=mysql_to_mysqli($stmt, $link); + $affected_rows = mysqli_affected_rows($link); + if ($DB) {echo "$affected_rows|$stmt\n";} + } + if ($DB) {echo "DEBUG: pulls - $pull_counter\n";} + } + } + +echo "$filter_count\n"; + +?>