Browse Source

Alteracoes para manter o isolamento das organizacoes.

1.9
AMARILDO PEREIRA 5 months ago committed by bruno
parent
commit
4a9dae63c9
  1. 26
      admin/funcoes.php
  2. 2
      include/util/funcoesAmi.php
  3. 37
      include/util/funcoesApl.php
  4. 1
      include/util/funcoesLicenca.php
  5. 4
      include/util/util.php
  6. 12
      login.php
  7. 12
      projeto/base/sql/versao-1.9.0.sql
  8. 2
      seguranca/trocaSenha.php

26
admin/funcoes.php

@ -684,7 +684,7 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
//Asterisk 1.4
//$query = "SELECT nome, \"mode\", '/var/lib/asterisk/moh/'||replace(nome, ' ', '') as directory, random from pbx_musichold_grupos order by id asc";
//$query = "SELECT nome, \"mode\", '/var/lib/asterisk/moh/'||replace(nome, ' ', '') as directory, case when random = 'yes' then 'random' else 'alpha' end as sort from pbx_musichold_grupos order by id asc";
$query = "SELECT nome, \"mode\", directory, case when random = 'yes' then 'random' else 'alpha' end as sort, org_id from pbx_musichold_grupos order by org_id, id asc";
$query = "SELECT directory as nome, \"mode\", directory, case when random = 'yes' then 'random' else 'alpha' end as sort, org_id from pbx_musichold_grupos order by org_id, id asc";
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$orgIdArqivo = $dados['org_id'];
@ -696,7 +696,9 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
if ($nomeColuna == 'org_id') {
continue;
} else if ($nomeColuna == "nome") {
fwrite($escreve, sprintf("[%s%s]\n", $dados[$nomeColuna], ($orgIdArqivo ? "_{$orgIdArqivo}" : '')));
$classPath = explode('/', $dados[$nomeColuna]);
$classMusic = $classPath[(count($classPath)-1)];
fwrite($escreve, sprintf("[%s]\n", $classMusic));
} else if ($dados[$nomeColuna] != '') {
fwrite($escreve, $nomeColuna . '=' . $dados[$nomeColuna] . "\n");
}
@ -788,12 +790,14 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
while ($dados = pg_fetch_array($result)) {
$dados2[] = $dados;
$numero = $org_id . $dados['numero'];
//$numero = $org_id . $dados['numero'];
$numero = $dados['numero'];
$x++;
fwrite($escreve, 'exten => _' . $numero . ',1,' . (($dados['m_espera'] == 'N') ? 'Ringing()' : 'Answer()') . "\n");
fwrite($escreve, 'exten => _' . $numero . ',n,ExecIf($["${ISNULL(${CDR(direcao)})}" = "1"]?Set(CDR(direcao)=I))' . "\n");
fwrite($escreve, 'exten => _' . $numero . ',n,ExecIf($["${CDR(direcao)}" != "E" && "${ISNULL(${CDR(ramal_origem)})}" = "1"]?Set(CDR(ramal_origem)=${CALLERID(num)}))' . "\n");
fwrite($escreve, 'exten => _' . $numero . ',n,Set(CHANNEL(accountcode)=${TRANSFER})' . "\n");
fwrite($escreve, 'exten => _' . $numero . ",n,Set(__ORG_ID={$org_id})\n");
fwrite($escreve, 'exten => _' . $numero . ',n,AGI(pbx_complemento.php,ext-fila,' . trim($dados['nome']) . ')' . "\n");
fwrite($escreve, 'exten => _' . $numero . ',n,AGI(indisponibilidade.php,' . trim($dados['nome']) . ')' . "\n");
fwrite($escreve, 'exten => _' . $numero . ',n,AGI(prioridade_fila.php,${CALLERID(NUM):-13},' . trim($dados['nome']) . ')' . "\n");
@ -871,7 +875,8 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
$arq = $caminho_producao . "sip_ramais.conf";
$escreve = fopen($arq, 'w');
$query = "SELECT nome,type,secret,callerid,qualify,port,case when nat = 'yes' then 'force_rport,comedia' else nat end as nat,host,dtmfmode,context,canreinvite,disallow,allow,\"call-limit\",videosupport,fromdomain,t38pt_udptl,mailbox,pickupgroup,callgroup,insecure,accountcode, extranet, ispbx_tronco
$query = "SELECT nome,type,secret,callerid,qualify,port,case when nat = 'yes' then 'force_rport,comedia' else nat end as nat,host,dtmfmode,context,canreinvite,disallow,allow,\"call-limit\",videosupport,
fromdomain,t38pt_udptl,mailbox,pickupgroup,callgroup,insecure,accountcode, extranet, ispbx_tronco, org_id
FROM pbx_sip_ramais order by id asc";
$result = pg_query($dbcon, $query);
@ -886,7 +891,9 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
}
for ($i = 0; pg_num_fields($result) > $i; $i++) {
$nomeCampo = pg_field_name($result, $i);
if ($nomeCampo == "nome") {
if ($nomeCampo == "org_id") {
continue;
} else if ($nomeCampo == "nome") {
fwrite($escreve, "[" . $dados[pg_field_name($result, $i)] . "]" . "\n");
} else if ($nomeCampo == "extranet") {
$extranet = trim($dados['extranet']);
@ -914,8 +921,9 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
}
}
}
fwrite($escreve, sprintf("setvar=RAMAL_REGISTRO=%s", $dados["nome"]));
fwrite($escreve, sprintf("setvar=CALLERID_REGISTRO=%s", $dados["callerid"]));
fwrite($escreve, sprintf("setvar=RAMAL_REGISTRO=%s\n", $dados["nome"]));
fwrite($escreve, sprintf("setvar=CALLERID_REGISTRO=%s\n", $dados["callerid"]));
fwrite($escreve, sprintf("setvar=ORG_ID=%s\n", $dados["org_id"]));
fwrite($escreve, chr(13) . chr(10));
}
@ -946,7 +954,7 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
}
}
}
fwrite($escreve, chr(13) . chr(10));
fwrite($escreve, "\n");
}
fclose($escreve);
@ -1220,7 +1228,7 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
localnet, nat, canreinvite, directrtpsetup, rtcachefriends, rtsavesysname,
rtupdate, rtautoclear, ignoreregexpire, domain, autodomain,
allowexternaldomains, fromdomain, jbenable, jbforce, jbmaxsize,
jbresyncthreshold, jbimpl, jblog, auth FROM pbx_sip_general where org_id = (select id from pbx_organizacao where master = '%s')", GetOrganizacaoMaster());
jbresyncthreshold, jbimpl, jblog, auth FROM pbx_sip_general where org_id = '%s'", GetOrganizacaoMaster());
$result = pg_query($dbcon, $query);
while ($dados = pg_fetch_array($result)) {
$x++;

2
include/util/funcoesAmi.php

@ -894,7 +894,7 @@ function __fwrite($socket, $value, $function = '', $logOnly = false) {
if ($debugAmi) {
$login = "anonimo";
if (function_exists('IsUserConnect')) {
$login = IsUserConnect() ? $_SESSION["SSlogin"] : "anonimo";
$login = IsUserConnect() ? GetLogin() : "anonimo";
}
$path = "/var/log/asterisk/log_ami_$login.log";
if ($function) {

37
include/util/funcoesApl.php

@ -588,6 +588,9 @@ function IsUserAdmin() {
}
function IsAdmin() {
if (strpos(GetLogin(), "@") !== false) {
return strtolower(GetLogin()) == 'admin@system.cloud';
}
return strtoupper(GetLogin()) == 'ADMIN';
}
@ -1297,8 +1300,11 @@ function GetDisponivelFila() {
return $_SESSION["prm_disponivel_fila"];
}
function GetLogin() {
return IsUserConnect() ? $_SESSION["SSlogin"] : "Desconectado";
function GetLogin($full = false) {
if (IsUserConnect()) {
return $full ? $_SESSION["SSlogin"] : explode('@', $_SESSION["SSlogin"])[0];
}
return "Desconectado";
}
function GetOrganizacao() {
@ -1317,10 +1323,12 @@ function GetOrganizacao() {
}
return $_SESSION['SSEmpresaPadrao'];
}
/*
* A organizacao master sempre tera o id 0, porque é basicamente usada como templante
* para as demais organizacoes.
*/
function GetOrganizacaoMaster() {
return 0;
// global $dbcon;
@ -1333,9 +1341,8 @@ function GetOrganizacaoMaster() {
// return $_SESSION['SSEmpresaMaster'];
}
function GetOrganizacaoIsMaster(){
return (int)StrToIntDef(GetOrganizacao(), -1) === 0 ? true : false;
function GetOrganizacaoIsMaster() {
return (int) StrToIntDef(GetOrganizacao(), -1) === 0 ? true : false;
}
function GetAllOrganizacao() {
@ -4459,7 +4466,6 @@ function GetLinkMenu($linkMenu, $funId = 0, $url = '', $acao = 'upd') {
}
function MontaMenu($idMenu, $userId, $linkMenu = 1, $notMenu = 0, $acao = "upd") {
global $dbcon;
/*
* Funcao retorna menu para aplicacao.
* -$idMenu -> Indica que a raiz da arvore de menu, a partir deste "nó" retorna o restante da arvore.
@ -4996,3 +5002,22 @@ function RemoveOrganizacaoStr($str) {
}
return strpos($str, $orgId) === 0 ? substr($str, strlen($orgId)) : $str;
}
function GetMusicaEspera($db, $musicSel = null) {
$org_id = GetOrganizacao();
$combo = '';
$combo .= '<select name="musicclass" id="musicclass" class="caixas">' . "\n";
$query = "SELECT nome, directory FROM pbx_musichold_grupos where org_id = {$org_id} AND nome not ilike 'agentes' order by nome asc";
$result = pg_query($db, $query);
while ($dados = pg_fetch_assoc($result)) {
$sel = ($musicSel == $dados["nome"]) ? "selected" : "";
$clasMusic = $dados["nome"];
$pathMusic = explode('/', $dados["directory"]);
$mclass = $pathMusic[(count($pathMusic) - 1)];
$combo .= "<option value=\"$mclass\" $sel>$clasMusic</option>\n";
}
return $combo . '</select>';
}

1
include/util/funcoesLicenca.php

@ -150,6 +150,7 @@ function DownloadArquivo($nomeArquivo)
*/
function validarLicenca($dbcon)
{
return true;
$db = __getLicencaPBX($dbcon);
if (!$db) {

4
include/util/util.php

@ -577,8 +577,10 @@ function GetNomeOrganizacao($nome)
{
if (strpos($nome, '@') !== false) {
$info = explode('@', $nome);
return ['nome' => $info[0], 'org_id' => $info[1]];
return ['nome' => $nome, 'org_id' => $info[1]];
//return ['nome' => $info[0], 'org_id' => $info[1]];
}
return $nome;
}
function GravaNumeroOrganizacao($numero)

12
login.php

@ -16,10 +16,12 @@ if (isset($_POST['btLogin'])) {
if (($validaTentativa == false) && ($_POST["loginUser"] != 'admin')) {
echo "<script> confirm('Seu acesso foi bloqueado por inúmeras tentativas de acesso inválidos! Para o desbloqueio, realize a alteração de senha ou consulte seu Administrador.');</script>";
echo "<script> window.location.href = '/index.php';</script>";
} else if (!validarLicenca($dbcon) && ($_POST["loginUser"] != 'admin')) {
echo "<script> confirm('Sua licença é inválida por favor entre em contato com o suporte da Simples IP para ativar sua central!'); </script>";
echo "<script> window.location.href = '/index.php'; </script>";
}
}
// else if (!validarLicenca($dbcon) && ($_POST["loginUser"] != 'admin')) {
// echo "<script> confirm('Sua licença é inválida por favor entre em contato com o suporte da Simples IP para ativar sua central!'); </script>";
// echo "<script> window.location.href = '/index.php'; </script>";
// }
$query = "select id, nome, apelido, matricula,
case when((select count(*)
@ -57,7 +59,7 @@ if (isset($_POST['btLogin'])) {
if ($senhaIsValid && RegistraAcesso($row['apelido'], $row['id'])) {
$_SESSION["SSTimeOut"] = time();
$_SESSION["SSlogin"] = $row['apelido'];
$_SESSION["SSlogin"] = $login;
$_SESSION["SSnomeUser"] = $row['nome'];
$_SESSION["SSidUser"] = $row['id'];
$_SESSION["SSmatriculaUser"] = $row['matricula'];

12
projeto/base/sql/versao-1.9.0.sql

@ -206,9 +206,12 @@ UNION ALL
update pbx_usuarios set org_padrao = 0, user_system = 1, email = apelido || '@system.cloud' where id in(341,342,462,467);
alter table pbx_usuarios alter column email set not null;
-- Indices para tabela de usuarios para garantir unicidade de login no sistema e apelido por organizadao.
drop index if exists idxPbxUsuariosApelido;
drop index if exists idxPbxUsuariosApelido;
drop index if exists "PbxUsuariosEmail";
create unique index "idxPbxUsuariosEmail" on pbx_usuarios(email);
create unique index "idxPbxUsuarosApelidoOrgId" on pbx_usuarios(apelido, org_padrao);
-- Removendo a chave primária existente
ALTER TABLE pbx_usuarios DROP CONSTRAINT if exists "pbx_usuarios_pkey";
@ -217,5 +220,8 @@ ALTER TABLE pbx_usuarios DROP CONSTRAINT if exists "pkPbxUsuarios";
-- Adicionando nova chave primária
ALTER TABLE pbx_usuarios ADD CONSTRAINT "pkPbxUsuarios" PRIMARY KEY (id);
-- Recolocando protecao contra sql injection que foi removida.
update pbx_usuarios set check_vl = md5(email);
-- Recolocando protecao contra sql injection que foi removida.git
update pbx_usuarios set check_vl = md5(email);
-- Garante a unicidade do nome do grupo por organizacao.
create unique index "idxPbxGrupoNome" on pbx_grupo(gp_nome, org_id);

2
seguranca/trocaSenha.php

@ -34,7 +34,7 @@ if ( protocolNewPassword( $_POST["senhaNova"] ) == false ) {
}
$login = substr(GetLogin(), 0, 20);
$login = substr(GetLogin(true), 0, 50);
$senha = (substr($_POST["senhaAtu"], 0, 14));
/* verifica a senha atual é correta */

Loading…
Cancel
Save