From 4a9dae63c90c8ea0840de2143079e35b42a06bd8 Mon Sep 17 00:00:00 2001 From: Amarildo Pereira Date: Mon, 29 Apr 2024 09:45:29 -0400 Subject: [PATCH] Alteracoes para manter o isolamento das organizacoes. --- admin/funcoes.php | 26 ++++++++++++++-------- include/util/funcoesAmi.php | 2 +- include/util/funcoesApl.php | 37 ++++++++++++++++++++++++++----- include/util/funcoesLicenca.php | 1 + include/util/util.php | 4 +++- login.php | 12 +++++----- projeto/base/sql/versao-1.9.0.sql | 12 +++++++--- seguranca/trocaSenha.php | 2 +- 8 files changed, 70 insertions(+), 26 deletions(-) diff --git a/admin/funcoes.php b/admin/funcoes.php index 1e4c280a..f0e36fe9 100644 --- a/admin/funcoes.php +++ b/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++; diff --git a/include/util/funcoesAmi.php b/include/util/funcoesAmi.php index b036d506..dfb42b59 100755 --- a/include/util/funcoesAmi.php +++ b/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) { diff --git a/include/util/funcoesApl.php b/include/util/funcoesApl.php index cc06deb3..e1fe9d2d 100755 --- a/include/util/funcoesApl.php +++ b/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 .= ''; +} diff --git a/include/util/funcoesLicenca.php b/include/util/funcoesLicenca.php index aff20a4e..793d01db 100755 --- a/include/util/funcoesLicenca.php +++ b/include/util/funcoesLicenca.php @@ -150,6 +150,7 @@ function DownloadArquivo($nomeArquivo) */ function validarLicenca($dbcon) { + return true; $db = __getLicencaPBX($dbcon); if (!$db) { diff --git a/include/util/util.php b/include/util/util.php index 56177082..42d1d52b 100755 --- a/include/util/util.php +++ b/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) diff --git a/login.php b/login.php index d59fc120..23e586ef 100755 --- a/login.php +++ b/login.php @@ -16,10 +16,12 @@ if (isset($_POST['btLogin'])) { if (($validaTentativa == false) && ($_POST["loginUser"] != 'admin')) { echo ""; echo ""; - } else if (!validarLicenca($dbcon) && ($_POST["loginUser"] != 'admin')) { - echo ""; - echo ""; - } + } + +// else if (!validarLicenca($dbcon) && ($_POST["loginUser"] != 'admin')) { +// echo ""; +// echo ""; +// } $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']; diff --git a/projeto/base/sql/versao-1.9.0.sql b/projeto/base/sql/versao-1.9.0.sql index c2a3e151..ac7e56a6 100644 --- a/projeto/base/sql/versao-1.9.0.sql +++ b/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); \ No newline at end of file +-- 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); \ No newline at end of file diff --git a/seguranca/trocaSenha.php b/seguranca/trocaSenha.php index b4fc24db..961328af 100644 --- a/seguranca/trocaSenha.php +++ b/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 */