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

<?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);
}