Verificar se item (link) está autorizado a ser utilizado
Olá pessoal!
Tenho uma situação onde preciso adicionar um FLAG se o usuário estiver incluindo um link em sua mensagem para que eu possa filtra-la ou não.
Se estiver incluindo um link, preciso checar se esse link está autorizado. Se sim, adiciono um FLAG false, se não, true.
Com links absolutos, isso é simples de ser feito e já tenho feito:
<?php
$regex = "(((https?|ftp):\/\/)?(bit)?([a-z0-9+!*(),;?&=.-]+(:[a-z0-9+!*(),;?&=.-]+)?@)?([a-z0-9\-\.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3})))(:[0-9]{2,5})?(\/([a-z0-9+%-]\.?)+)*\/?(\?[a-z+&$_.-][a-z0-9;:@&%=+/.-]*)?(#[a-z_.-][a-z0-9+$%_.-]*)?)";
$linksAutorizados = ['bit.ly/123'];
$mensagem = [ 'usuario' => 'teste', 'texto' => 'seja bem vindo ao meu site bit.ly/123' ];
$temLink = preg_match ($regex, $mensagem['texto'], $links);
/**
* $links retorna o seguinte array
* 0: "bit.ly/123"
* 3: "bit"
* 7: "ly"
* 8: "ly"
* 13: "/123"
* 14: "3"
*/
if ($temLink) {
/*
* Checo se link da mensagem é igual ao link da lista de linksAutorizados.
* Se o link da mensagem for igual ao link da lista a mensagem não precisa ser filtrada
* Se o link da mensagem for diferente ao link da lista, a mensagem precisa ser filtrada
*/
if ($links[0] == $linksAutorizados[0]) {
$mensagem += [ 'filtrar' => false ];
} else {
$mensagem += [ 'filtrar' => true ];
}
} else {
/*
* Se não encontrar link na mensagem, ela não precisa ser filtrada
*/
$mensagem += [ 'filtrar' => false ];
}
*Obs: O acesso aos arrays foi em hardcoded para uma exemplificação mais clara.*
**O meu problema é:**
E se eu quiser liberar links variáveis, ou seja, não importa o subdomínio ou demais parâmetros de querystring, checar somente o dominio
**Por exemplo**
*.meusite.com.br
meusite.com.br/*
subdominio.meusite.com.br/*
**Exemplo de array com links (que podem ser variaveis) autorizados para o usuario:**
$linksAutorizados = ['bit.ly/123', 'goo.gl/*', 'meusite.com.br/*' ];
Onde estão os asteriscos seriam os pontos que eu ignoro da verificação para filtro.
Passei o dia fazendo alguns testes e pesquisando material no Stack mas não encontrei nada.
Desde já muito obrigado por qualquer luz =)Discussão (2)
Carregando comentários...