|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
include "util/Crypt.php";
|
|
|
|
|
|
|
|
|
|
define("CONF_KEY_LICENCA", md5("S1MPL3S_IP"));
|
|
|
|
|
define("CONF_FILE_PATH", "/var/www/html/aplicativo/cadastros/licenca/");
|
|
|
|
|
define("CONF_FILE_UUID", 'uuid.lca');
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* RECEBE OS DADOS DO FORMUL<EFBFBD>RIO E GERA O TOTAL DE LICENCA EM UM ARQUIVO CRIPTOGRAFADO
|
|
|
|
|
* @param type $fields
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function GerarArquivo($fields) {
|
|
|
|
|
|
|
|
|
|
$info = [
|
|
|
|
|
'document',
|
|
|
|
|
'razao_social',
|
|
|
|
|
'perfil',
|
|
|
|
|
'pa',
|
|
|
|
|
'pa_fixo',
|
|
|
|
|
'ramais',
|
|
|
|
|
'supervisor',
|
|
|
|
|
'pesquisa',
|
|
|
|
|
'tarifador',
|
|
|
|
|
'mesaoperadora',
|
|
|
|
|
'manager_one'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
//LIMPA O ARRAY, SETA O PREFIXO NAS CHAVES E INSERE VALOR ZERO PARA OS VAZIOS
|
|
|
|
|
$unfix = 'lca_';
|
|
|
|
|
$prefix = "clto_";
|
|
|
|
|
foreach ($fields as $key => $value) {
|
|
|
|
|
$key = str_replace($unfix, '', $key);
|
|
|
|
|
|
|
|
|
|
if (in_array($key, $info)) {
|
|
|
|
|
$data[$prefix . $key] = empty($value) ? '0' : $value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$data['clto_server_registro'] = 0;
|
|
|
|
|
$data['clto_contrato_numero'] = 0;
|
|
|
|
|
$data['clto_date_record'] = date('Y-m-d');
|
|
|
|
|
|
|
|
|
|
$fileName = $data['clto_razao_social'] . $data['clto_document'];
|
|
|
|
|
$file = criarArquivo($fileName, $data);
|
|
|
|
|
DownloadArquivo($file);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* GERA UM ARQUIVO COM AS INFORMACOES DA MAQUINA
|
|
|
|
|
* >> CASO PASSE $tmp GERA UM ARQUIVO TEMPORARIO PARA A CONSULTA DO UUID EM TEMPO REAL
|
|
|
|
|
* @param type $tmp
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
function GerarUUID($tmp = false) {
|
|
|
|
|
$file = CONF_FILE_PATH . ($tmp ? 'tmp/' . md5(date('Y-m-d') . CONF_KEY_LICENCA) . "_" : '') . CONF_FILE_UUID;
|
|
|
|
|
|
|
|
|
|
if (!file_exists($file) && $tmp) {
|
|
|
|
|
foreach (glob('*_' . CONF_FILE_UUID) as $f) {
|
|
|
|
|
unlink($f);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (file_exists($file) && $tmp) {
|
|
|
|
|
return $file;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CnvrtFileExec('dmidecode -t system | grep UUID: > ' . $file);
|
|
|
|
|
CnvrtFileExec('chown pbx:pbx ' . $file);
|
|
|
|
|
|
|
|
|
|
$contents = __readFile($file, false);
|
|
|
|
|
$uid = explode(':', trim($contents));
|
|
|
|
|
|
|
|
|
|
__writeFile($file, ['uuid' => trim($uid[1]), 'genereted' => date('Y-m-d H:i:s'), 'contract' => md5(trim($uid[1]))], false);
|
|
|
|
|
|
|
|
|
|
return $tmp ? $file : trim($uid[1]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* CRIA O ARQUIVO DE LICENCA COM O NOME E DOCUMENTO EM MD5 JUNTAMENTE COM AS INFORMACOES GERADAS DA FUNCAO GERAARQUIVO
|
|
|
|
|
* @param type $filename
|
|
|
|
|
* @param array $data
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
function criarArquivo($filename, $data) {
|
|
|
|
|
$file = CONF_FILE_PATH . md5($filename) . ".lca";
|
|
|
|
|
$data['clto_data_log'] = $file;
|
|
|
|
|
__createFile($file, preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $data));
|
|
|
|
|
return $file;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* INFORMA OS DADOS DE CONTRATO E UUID PARA O ARQUIVO DE LICENCA QUANDO FIZER O UPLOAD NO SITE
|
|
|
|
|
* @param type $file
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
function validarArquivo($file) {
|
|
|
|
|
$file_lca = CONF_FILE_PATH . $file['conf']['name'];
|
|
|
|
|
$tmpFileLocal = $file['conf']['tmp_name'];
|
|
|
|
|
$tmpFileName = $file['conf']['name'];
|
|
|
|
|
move_uploaded_file($tmpFileLocal, $file_lca);
|
|
|
|
|
|
|
|
|
|
$content = __readFile($file_lca);
|
|
|
|
|
if (explode('.', $tmpFileName)[1] == 'lca') {
|
|
|
|
|
$uuid = GerarUUID();
|
|
|
|
|
__writeFile($file_lca, ['clto_server_registro' => $uuid, 'clto_contrato_numero' => md5($uuid)]);
|
|
|
|
|
$content = __readFile($file_lca);
|
|
|
|
|
return $content;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* DOWNLOAD DO ARQUIVO REGISTRADO NO VENDAMAIS
|
|
|
|
|
* @param type $nomeArquivo
|
|
|
|
|
* @return type
|
|
|
|
|
*/
|
|
|
|
|
function DownloadArquivo($nomeArquivo) {
|
|
|
|
|
try {
|
|
|
|
|
ob_clean();
|
|
|
|
|
$nome = basename($nomeArquivo);
|
|
|
|
|
$linhas = file_get_contents($nomeArquivo);
|
|
|
|
|
header("Pragma: public");
|
|
|
|
|
header('Cache-Control: no-cache, must-revalidate');
|
|
|
|
|
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
|
|
|
|
|
header('Accept-Ranges: bytes');
|
|
|
|
|
header('Content-Type: ' . GetMimeContentType($nome));
|
|
|
|
|
header('Content-Disposition: attachment; filename="' . $nome . '";');
|
|
|
|
|
header('Content-Transfer-Encoding: binary');
|
|
|
|
|
header('Connection: close');
|
|
|
|
|
echo $linhas;
|
|
|
|
|
ob_flush();
|
|
|
|
|
unlink($nomeArquivo);
|
|
|
|
|
exit;
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
return $ex->getMessage();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* VALIDA A LICENCA DURANTE O PRIMEIRO LOGIN COM AS INFORMACOES DO ARQUIVO TEMPORARIO| BANCO SIMPLES E ARQUIVO DE LICENCA
|
|
|
|
|
* @param type $dbcon
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
function validarLicenca($dbcon) {
|
|
|
|
|
$db = __getLicencaPBX($dbcon);
|
|
|
|
|
|
|
|
|
|
if (!$db) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$f = GerarUUID(true);
|
|
|
|
|
if ($f) {
|
|
|
|
|
$uid = __readFile($f);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$content = __readFile($db['clto_data_log']);
|
|
|
|
|
$uuid = __readFile(CONF_FILE_PATH . CONF_FILE_UUID);
|
|
|
|
|
|
|
|
|
|
if ($content['clto_server_registro'] != $uid['uuid'] || $db['clto_server_registro'] != $uid['uuid']) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($uuid['contract'] != $db['clto_contrato_numero']) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
########################################
|
|
|
|
|
#### FUNCOES ESCRITA/LEITURA ####
|
|
|
|
|
########################################
|
|
|
|
|
|
|
|
|
|
function __createFile($file, $dados) {
|
|
|
|
|
$crypt = new Crypt(CONF_KEY_LICENCA);
|
|
|
|
|
$dataCrypt = $crypt->encrypt(json_encode($dados, true));
|
|
|
|
|
file_put_contents($file, $dataCrypt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function __readFile($file, $encrypeted = true) {
|
|
|
|
|
$crypt = new Crypt(CONF_KEY_LICENCA);
|
|
|
|
|
$content = file_get_contents($file);
|
|
|
|
|
|
|
|
|
|
if ($encrypeted) {
|
|
|
|
|
$content = $crypt->decrypt($content);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$json = json_decode($content, true);
|
|
|
|
|
if ($json) {
|
|
|
|
|
return $json;
|
|
|
|
|
}
|
|
|
|
|
return $content;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function __writeFile($file, $dados = null, $append = true) {
|
|
|
|
|
$crypt = new Crypt(CONF_KEY_LICENCA);
|
|
|
|
|
$content = __readFile($file);
|
|
|
|
|
if ($dados) {
|
|
|
|
|
if (!$append) {
|
|
|
|
|
file_put_contents($file, $crypt->encrypt(json_encode($dados, true)));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
foreach ($dados as $k => $v) {
|
|
|
|
|
$content[$k] = $v;
|
|
|
|
|
}
|
|
|
|
|
file_put_contents($file, $crypt->encrypt(json_encode($content, true)));
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
file_put_contents($file, $crypt->encrypt(json_encode($content, true)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
########################################
|
|
|
|
|
#### BANCO DE DADOS ####
|
|
|
|
|
########################################
|
|
|
|
|
|
|
|
|
|
function __getLicencaPBX($dbcon) {
|
|
|
|
|
$query = "SELECT clto_cnpj, clto_data_log, clto_server_registro, clto_contrato_numero FROM pbx_controle_licenciamento;";
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
$res = pg_fetch_assoc($result);
|
|
|
|
|
return $res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* INSERE AS INFORMACOES PASSADAS NO ARQUIVO DE LICENCA PARA O BANCO DO SIMPLESIP
|
|
|
|
|
* @param type $dbcon
|
|
|
|
|
* @param type $data
|
|
|
|
|
* @return boolean
|
|
|
|
|
* @throws Exception
|
|
|
|
|
*/
|
|
|
|
|
function __validLicenca($dbcon, $data) {
|
|
|
|
|
if (!$data['clto_document']) {
|
|
|
|
|
throw new Exception("As informa<EFBFBD><EFBFBD>es do arquivo est<EFBFBD> corrompido!");
|
|
|
|
|
}
|
|
|
|
|
$respbx = __getLicencaPBX($dbcon);
|
|
|
|
|
$table = 'pbx_controle_licenciamento';
|
|
|
|
|
$where = 'clto_cnpj';
|
|
|
|
|
$filter = $data['clto_document'];
|
|
|
|
|
$columns = array(
|
|
|
|
|
'clto_cnpj',
|
|
|
|
|
'clto_razao_social',
|
|
|
|
|
'clto_perfil_aplicacao_id',
|
|
|
|
|
'clto_licenca_pa',
|
|
|
|
|
'clto_licenca_pa_fixo',
|
|
|
|
|
'clto_licenca_ramal',
|
|
|
|
|
'clto_server_registro',
|
|
|
|
|
'clto_contrato_numero',
|
|
|
|
|
'clto_data_registro',
|
|
|
|
|
'clto_data_log'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (!pg_query($dbcon, 'BEGIN')) {
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi possivel iniciar a transa<EFBFBD><EFBFBD>o!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
recordParams($dbcon, $data);
|
|
|
|
|
|
|
|
|
|
if ($respbx['clto_cnpj'] == $data['clto_document']) {
|
|
|
|
|
__updateLicenca($dbcon, $data, $columns, $table, $where, $filter);
|
|
|
|
|
} else {
|
|
|
|
|
__sendLicenca($dbcon, $data, $columns, $table);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!pg_query($dbcon, 'COMMIT')) {
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi possivel realizar o commit da transa<EFBFBD><EFBFBD>o!");
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
} catch (Exception $ex) {
|
|
|
|
|
pg_query($dbcon, 'ROLLBACK');
|
|
|
|
|
$GLOBALS['jsStartup'][] = sprintf("alert('%s');", $ex->getMessage());
|
|
|
|
|
throw new Exception($ex->getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function __updateLicenca($dbcon, $data, $columns, $table, $where, $filter) {
|
|
|
|
|
$values = array_combine($columns, $data);
|
|
|
|
|
|
|
|
|
|
foreach ($values as $key => $value) {
|
|
|
|
|
$values[$key] = " {$key} = '{$value}'";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$query = sprintf("UPDATE %s SET %s WHERE %s = '%s'", $table, implode(',', $values), $where, $filter);
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
|
|
|
|
|
if (!$result) {
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi poss<EFBFBD>vel atualizar as informa<EFBFBD><EFBFBD>es da licen<EFBFBD>a!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function __sendLicenca($dbcon, $data, $columns, $table) {
|
|
|
|
|
$values = array_values($data);
|
|
|
|
|
|
|
|
|
|
$query = sprintf("TRUNCATE TABLE %s", $table);
|
|
|
|
|
if (!pg_query($dbcon, $query)) {
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi poss<EFBFBD>vel inserir as informa<EFBFBD><EFBFBD>es da licen<EFBFBD>a no [Simples IP]!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$query = sprintf("INSERT INTO %s (%s) VALUES('%s');", $table, implode(',', $columns), implode("','", $values));
|
|
|
|
|
|
|
|
|
|
if (!pg_query($dbcon, $query)) {
|
|
|
|
|
throw new Exception("N<EFBFBD>o foi poss<EFBFBD>vel inserir as informa<EFBFBD><EFBFBD>es da licen<EFBFBD>a no [Simples IP]!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function GetPerfilApl() {
|
|
|
|
|
$query = "SELECT * FROM pbx_grupo WHERE gp_system = 1 AND gp_id <> 43";
|
|
|
|
|
$resp = pg_query($query);
|
|
|
|
|
$resp = pg_fetch_all($resp);
|
|
|
|
|
return $resp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* REALIZA A INSER<EFBFBD><EFBFBD>O DAS INFORMA<EFBFBD><EFBFBD>ES DA LICEN<EFBFBD>A NA TABELA DE PARAMETROS DO SISTEMA
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function recordParams($dbcon, $data) {
|
|
|
|
|
$columns = array(
|
|
|
|
|
'prm_max_licenca',
|
|
|
|
|
'prm_max_licenca_fixo',
|
|
|
|
|
'prm_max_ramal'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$values = array(
|
|
|
|
|
$data['clto_pa'],
|
|
|
|
|
$data['clto_pa_fixo'],
|
|
|
|
|
$data['clto_ramais']
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$table = 'pbx_parametros';
|
|
|
|
|
$where = 'id';
|
|
|
|
|
$filter = '1';
|
|
|
|
|
|
|
|
|
|
managePaFixo($dbcon, $data);
|
|
|
|
|
|
|
|
|
|
if (!VerificaRamaisCriados($data['clto_ramais'])) {
|
|
|
|
|
throw new Exception("O n<EFBFBD>mero de ramais criados <EFBFBD> superior ao parametro informado na licen<EFBFBD>a!");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__updateLicenca($dbcon, $values, $columns, $table, $where, $filter);
|
|
|
|
|
|
|
|
|
|
$_SESSION['prm_max_licenca_fixo'] = $data['clto_pa_fixo'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* RESPONS<EFBFBD>VEL POR GERENCIAR AS LICEN<EFBFBD>AS PA FIXO
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function managePaFixo($dbcon, $data) {
|
|
|
|
|
$query = "SELECT COUNT(*) AS qtd_pa_fixo FROM pbx_licenca_pa_fixo WHERE id_user IS NOT NULL";
|
|
|
|
|
$result = pg_query($dbcon, $query);
|
|
|
|
|
$result = pg_fetch_assoc($result);
|
|
|
|
|
|
|
|
|
|
if ($data['clto_pa_fixo'] < $result['qtd_pa_fixo']) {
|
|
|
|
|
throw new Exception("O n<EFBFBD>mero de P.A. fixos criados <EFBFBD> superior ao parametro informado na licen<EFBFBD>a!");
|
|
|
|
|
} else {
|
|
|
|
|
$query = "DELETE FROM pbx_licenca_pa_fixo WHERE id_user IS NULL";
|
|
|
|
|
|
|
|
|
|
if (!pg_query($dbcon, $query)) {
|
|
|
|
|
throw new Exception('A opera<EFBFBD><EFBFBD>o n<EFBFBD>o pode ser realizada!');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$rows = $data['clto_pa_fixo'] - $result['qtd_pa_fixo'];
|
|
|
|
|
|
|
|
|
|
for ($cont = 0; $cont < $rows; $cont++) {
|
|
|
|
|
$query = sprintf("INSERT INTO pbx_licenca_pa_fixo (licenca) VALUES ('%s')", generateRandomKey());
|
|
|
|
|
if (!pg_query($dbcon, $query)) {
|
|
|
|
|
throw new Exception('A opera<EFBFBD><EFBFBD>o n<EFBFBD>o pode ser realizada!');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* GERADOR DE CHAVES ALEAT<EFBFBD>RIAS UTILIZADOS PARA LICEN<EFBFBD>A PA FIXO
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
function generateRandomKey() {
|
|
|
|
|
return bin2hex(random_bytes(10));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* VERIFICA SE EXISTE LICEN<EFBFBD>A CADASTRADA NO BANCO DE DADOS E RETORNA AS PERMISS<EFBFBD>ES.
|
|
|
|
|
*/
|
|
|
|
|
function existLicense($conn){
|
|
|
|
|
//verifica o grupo de permissoes de acordo com o tipo da licen<EFBFBD>a
|
|
|
|
|
$query = "SELECT a.fun_id
|
|
|
|
|
FROM pbx_grupo_funcoes a
|
|
|
|
|
INNER JOIN pbx_grupo b ON a.gp_id = b.gp_id
|
|
|
|
|
WHERE a.gp_id IN (SELECT clto_perfil_aplicacao_id
|
|
|
|
|
FROM pbx_controle_licenciamento
|
|
|
|
|
)
|
|
|
|
|
GROUP BY a.fun_id
|
|
|
|
|
ORDER BY a.fun_id";
|
|
|
|
|
$result = pg_query($conn, $query);
|
|
|
|
|
|
|
|
|
|
if (!pg_num_rows($result) || !validarLicenca($conn)){
|
|
|
|
|
$permissions = array('1', '4');
|
|
|
|
|
} else {
|
|
|
|
|
while ($row = pg_fetch_assoc($result)) {
|
|
|
|
|
$permissions[] = $row['fun_id'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return $permissions;
|
|
|
|
|
}
|