Portions created by the Initial Developer are Copyright (C) 2018 the Initial Developer. All Rights Reserved. Contributor(s): Mark J Crane */ //includes require_once "root.php"; require_once "resources/require.php"; //default authorized to false $authorized = 'false'; //get the user settings $sql = "select user_uuid, domain_uuid from v_user_settings "; $sql .= "where user_setting_category = 'message' "; $sql .= "and user_setting_subcategory = 'key' "; $sql .= "and user_setting_value = :key "; $sql .= "and user_setting_enabled = 'true' "; $prep_statement = $db->prepare($sql); $prep_statement->bindParam(':key', $_GET['key']); if ($prep_statement) { $prep_statement->execute(); $row = $prep_statement->fetch(PDO::FETCH_NAMED); if (is_uuid($row['user_uuid'])) { $domain_uuid = $row['domain_uuid']; $user_uuid = $row['user_uuid']; $authorized = 'true'; } } //authorization failed if ($authorized == 'false') { //log the failed auth attempt to the system, to be available for fail2ban. openlog('FusionPBX', LOG_NDELAY, LOG_AUTH); syslog(LOG_WARNING, '['.$_SERVER['REMOTE_ADDR']."] authentication failed for ".$_GET['key']); closelog(); //send http 404 header("HTTP/1.0 404 Not Found"); echo "\n"; echo "404 Not Found\n"; echo "\n"; echo "

404 Not Found

\n"; echo "
nginx/1.12.1
\n"; echo "\n"; echo "\n"; exit(); } //get the raw input data $json = file_get_contents('php://input'); //decode the json into array $message = json_decode($json, true); //get the source phone number $phone_number = preg_replace('{[\D]}', '', $message['from']); //get the contact uuid $sql = "select c.contact_uuid "; $sql .= "from v_contacts as c, v_contact_phones as p "; $sql .= "where p.contact_uuid = c.contact_uuid "; //$sql .= "and p.phone_number = :phone_number "; $sql .= "and p.phone_number = '".$phone_number."' "; $sql .= "and c.domain_uuid = '".$domain_uuid."' "; $prep_statement = $db->prepare($sql); //$prep_statement->bindParam(':phone_number', $phone_number); $prep_statement->execute(); $row = $prep_statement->fetch(PDO::FETCH_NAMED); $contact_uuid = $row['contact_uuid']; //$contact_name_given = $row['contact_name_given']; //$contact_name_family = $row['contact_name_family']; //$contact_organization = $row['contact_organization']; //build message array $message_uuid = uuid(); $array['messages'][0]['message_uuid'] = $message_uuid; $array['messages'][0]['domain_uuid'] = $domain_uuid; $array['messages'][0]['user_uuid'] = $user_uuid; $array['messages'][0]['contact_uuid'] = $contact_uuid; $array['messages'][0]['message_uuid'] = $message_uuid; $array['messages'][0]['message_type'] = is_array($message['media']) ? 'mms' : 'sms'; $array['messages'][0]['message_direction'] = 'inbound'; $array['messages'][0]['message_date'] = 'now()'; $array['messages'][0]['message_from'] = $message['from']; $array['messages'][0]['message_to'] = $message['to']; $array['messages'][0]['message_text'] = $message['text']; $array['messages'][0]['message_json'] = $json; //build message media array (if necessary) if (is_array($message['media'])) { foreach($message['media'] as $index => $media_url) { $media_type = pathinfo($media_url, PATHINFO_EXTENSION); if ($media_type !== 'xml') { $array['message_media'][$index]['message_media_uuid'] = uuid(); $array['message_media'][$index]['message_uuid'] = $message_uuid; $array['message_media'][$index]['domain_uuid'] = $domain_uuid; $array['message_media'][$index]['user_uuid'] = $user_uuid; $array['message_media'][$index]['message_media_type'] = $media_type; $array['message_media'][$index]['message_media_url'] = $media_url; $array['message_media'][$index]['message_media_content'] = base64_encode(file_get_contents($media_url)); } } } //add the required permission $p = new permissions; $p->add("message_add", "temp"); $p->add("message_media_add", "temp"); //save message to the database $database = new database; $database->app_name = 'messages'; $database->app_uuid = '4a20815d-042c-47c8-85df-085333e79b87'; $database->uuid($message_uuid); $database->save($array); $result = $database->message; //remove the temporary permission $p->delete("message_add", "temp"); $p->delete("message_media_add", "temp"); //convert the array to json $array_json = json_encode($array); //get the list of extensions using the user_uuid $sql = "select * from v_domains as d, v_extensions as e "; $sql .= "where extension_uuid in (select extension_uuid from v_extension_users where user_uuid = '".$user_uuid."') "; $sql .= "and e.domain_uuid = d.domain_uuid "; $sql .= "and e.enabled = 'true' "; $prep_statement = $db->prepare($sql); if ($prep_statement) { $prep_statement->execute(); $extensions = $prep_statement->fetchall(PDO::FETCH_NAMED); } //create the event socket connection if (is_array($extensions)) { $fp = event_socket_create($_SESSION['event_socket_ip_address'], $_SESSION['event_socket_port'], $_SESSION['event_socket_password']); } //send the sip message if (is_array($extensions)) { foreach ($extensions as $row) { $domain_name = $row['domain_name']; $extension = $row['extension']; $number_alias = $row['number_alias']; //send the sip messages $command = "luarun app/messages/resources/send.lua ".$message["from"]."@".$domain_name." ".$extension."@".$domain_name." '".$message["text"]."'"; //send the command $response = event_socket_request($fp, "api ".$command); $response = event_socket_request($fp, "api log notice ".$command); } } //set the file //$file = '/tmp/sms.txt'; //save the file //file_put_contents($file, $json); //save the data to the file system //file_put_contents($file, $json."\n"); //file_put_contents($file, $array_json."\nfrom: ".$message["from"]." to: ".$message["to"]." text: ".$message["text"]."\n$sql_test\njson: ".$json."\n".$saved_result."\n"); ?>