forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
3.8 KiB
130 lines
3.8 KiB
<?php |
|
|
|
include "util/Crypt.php"; |
|
$crypt = new Crypt('#S1mpl3S_C0nn3ct@R00t'); |
|
|
|
$request = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS); |
|
$chatApi = 'http://' . $_SESSION["prm_chat_api"]; |
|
$matricula = GetMatricula(); |
|
|
|
try { |
|
$email = getEmailAgente($dbcon, $matricula); |
|
if (!$email) { |
|
throw new Exception("Email não informado no cadastro de usuário!"); |
|
} |
|
|
|
if (!$_SESSION['SSTokenChat']) { |
|
$_SESSION['SSTokenChat'] = login($chatApi, $email['email']); |
|
} |
|
|
|
$options = queues($chatApi, $_SESSION['SSTokenChat']); |
|
|
|
if ($request['selectqueue'] && $request['btConectar']) { |
|
$numbers = number($chatApi, $_SESSION['SSTokenChat']); |
|
$info = [ |
|
"token" => $_SESSION['SSTokenChat'], |
|
"id_number" => $numbers[0]['id'], |
|
"id_empresa" => $numbers[0]['id_empresa'], |
|
"servidor" => $_SESSION['prm_chat_api'], |
|
"websocket" => $_SESSION['prm_sk_host_chat'], |
|
"matricula" => $matricula, |
|
"fila" => $request['selectqueue'], |
|
"expire" => strtotime('+1 days', time()) |
|
]; |
|
|
|
$token = $crypt->encrypt(json_encode($info, true)); |
|
$url = $chatApi . ":8001/index.php?t=" . $token; |
|
$jsStartup[] = sprintf('window.open("%s", "popupWindow", "width=1450, height=950, resizable=NO,scrollbars=YES");', $url); |
|
} |
|
} catch (Exception $ex) { |
|
$jsStartup[] = sprintf("alert('%s')", $ex->getMessage()); |
|
} |
|
|
|
$smarty->assign("options", $options); |
|
$smarty->assign("jsonApp", json_encode( |
|
[ |
|
'matricula' => GetMatricula(), |
|
'server_api' => $_SESSION['prm_chat_api'], |
|
'server_ws' => $_SESSION['prm_sk_host_chat'], |
|
'supervisor' => IsSupervisor($dbcon) |
|
] |
|
)); |
|
|
|
GetTemplate($smarty, 'simpleschat/connect.tpl'); |
|
|
|
function number($chatApi, $token) |
|
{ |
|
$response = curl("{$chatApi}/api/v1/number", null, $token); |
|
if (!$response['data']) { |
|
throw new Exception('Não foi encontrar os números.'); |
|
} |
|
return $response['data']; |
|
} |
|
|
|
function queues($chatApi, $token) |
|
{ |
|
$response = curl("{$chatApi}/api/v1/filas", null, $token); |
|
$option = null; |
|
|
|
if (!$response['data']) { |
|
throw new Exception('Não foi possível listar as filas.'); |
|
} |
|
|
|
foreach ($response['data'] as $v) { |
|
$option .= "<option value='{$v['id']}'>{$v['nome']}</option>"; |
|
} |
|
return $option; |
|
} |
|
|
|
function login($chatApi, $email) |
|
{ |
|
$json = json_encode(['email' => $email, "matricula" => md5(GetMatricula())]); |
|
$response = curl("{$chatApi}/access/login", $json); |
|
|
|
if ($response['status'] == 'success' || strpos($response['message'], 'autenticado') !== false) { |
|
return $response['data']['token']; |
|
} |
|
throw new Exception('Não foi possível gerar o token.'); |
|
} |
|
|
|
function curl($url, $params = null, $token = null) |
|
{ |
|
$curl = curl_init(); |
|
curl_setopt($curl, CURLOPT_URL, $url); |
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); |
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); |
|
|
|
if ($params) { |
|
curl_setopt($curl, CURLOPT_POST, true); |
|
curl_setopt($curl, CURLOPT_POSTFIELDS, $params); |
|
} |
|
|
|
curl_setopt($curl, CURLOPT_TIMEOUT, 30); |
|
|
|
$header[] = 'Content-Type:application/json'; |
|
if ($token) { |
|
$header[] = 'Authorization: Bearer ' . $token; |
|
} |
|
|
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); |
|
$content = curl_exec($curl); |
|
if (curl_errno($curl)) { |
|
curl_close($curl); |
|
return false; |
|
} |
|
$info = curl_getinfo($curl); |
|
|
|
if ($info['http_code'] == 403) { |
|
unset($_SESSION['SSTokenChat']); |
|
} |
|
curl_close($curl); |
|
|
|
return json_decode($content, true); |
|
} |
|
|
|
function getEmailAgente($dbcon, $matricula) |
|
{ |
|
$query = "SELECT email FROM pbx_usuarios WHERE matricula = '$matricula';"; |
|
$result = pg_query($dbcon, $query); |
|
return pg_fetch_assoc($result); |
|
}
|
|
|