mirror of
https://github.com/manualdousuario/marreta.git
synced 2025-09-05 04:00:34 +00:00
simplifica o sistema de regras globais e por dominio
This commit is contained in:
parent
a51e309196
commit
0ba05af969
3 changed files with 106 additions and 107 deletions
|
@ -6,90 +6,61 @@
|
||||||
* Este arquivo define regras que são aplicadas por padrão a todos os sites,
|
* Este arquivo define regras que são aplicadas por padrão a todos os sites,
|
||||||
* organizadas em categorias para melhor manutenção e compreensão.
|
* organizadas em categorias para melhor manutenção e compreensão.
|
||||||
*
|
*
|
||||||
* Estrutura das regras globais:
|
|
||||||
*
|
|
||||||
* classElementRemove: Classes HTML que devem ser removidas, agrupadas por categoria
|
|
||||||
* - paywall: Classes relacionadas a paywalls e conteúdo premium
|
|
||||||
* - social: Classes de elementos de compartilhamento social
|
|
||||||
* - newsletter: Classes de popups e formulários de newsletter
|
|
||||||
*
|
|
||||||
* scriptTagRemove: Scripts que devem ser removidos, agrupados por categoria
|
|
||||||
* - tracking: Scripts de analytics e rastreamento
|
|
||||||
* - paywall: Scripts relacionados a paywalls e conteúdo premium
|
|
||||||
* - cookies: Scripts de gerenciamento de cookies e GDPR/LGPD
|
|
||||||
* - misc: Scripts diversos como push notifications
|
|
||||||
*
|
|
||||||
* Nota: Estas regras podem ser sobrescritas ou desativadas para domínios específicos
|
* Nota: Estas regras podem ser sobrescritas ou desativadas para domínios específicos
|
||||||
* usando a configuração 'excludeGlobalRules' em domain_rules.php
|
* usando a configuração 'excludeGlobalRules' em domain_rules.php
|
||||||
*/
|
*/
|
||||||
return [
|
return [
|
||||||
'classElementRemove' => [
|
'classElementRemove' => [
|
||||||
'paywall' => [
|
'subscription',
|
||||||
'subscription',
|
'subscriber-content',
|
||||||
'subscriber-content',
|
'premium-content',
|
||||||
'premium-content',
|
'signin-wall',
|
||||||
'signin-wall',
|
'register-wall',
|
||||||
'register-wall',
|
'paid-content',
|
||||||
'paid-content',
|
'premium-article',
|
||||||
'premium-article',
|
'subscription-box',
|
||||||
'subscription-box',
|
'piano-offer',
|
||||||
'piano-offer',
|
'piano-inline',
|
||||||
'piano-inline',
|
'piano-modal',
|
||||||
'piano-modal',
|
'paywall-container',
|
||||||
'paywall-container',
|
'paywall-overlay',
|
||||||
'paywall-overlay',
|
'paywall-wrapper',
|
||||||
'paywall-wrapper',
|
'paywall-notification',
|
||||||
'paywall-notification'
|
'leaky_paywall_message_wrap',
|
||||||
],
|
'subscribe-form',
|
||||||
'social' => [
|
'signup-overlay'
|
||||||
'social-share',
|
|
||||||
'social-buttons',
|
|
||||||
'share-container'
|
|
||||||
],
|
|
||||||
'newsletter' => [
|
|
||||||
'newsletter-popup',
|
|
||||||
'subscribe-form',
|
|
||||||
'signup-overlay'
|
|
||||||
]
|
|
||||||
],
|
],
|
||||||
'scriptTagRemove' => [
|
'scriptTagRemove' => [
|
||||||
'tracking' => [
|
'gtm.js',
|
||||||
'gtm.js',
|
'ga.js',
|
||||||
'ga.js',
|
'fbevents.js',
|
||||||
'fbevents.js',
|
'pixel.js',
|
||||||
'pixel.js',
|
'chartbeat',
|
||||||
'chartbeat',
|
'analytics.js',
|
||||||
'analytics.js',
|
'cmp.js',
|
||||||
'cmp.js',
|
'wall.js',
|
||||||
],
|
'paywall.js',
|
||||||
'paywall' => [
|
'subscriber.js',
|
||||||
'wall.js',
|
'piano.js',
|
||||||
'paywall.js',
|
'tiny.js',
|
||||||
'subscriber.js',
|
'pywll.js',
|
||||||
'piano.js',
|
'content-gate.js',
|
||||||
'tiny.js',
|
'signwall.js',
|
||||||
'pywll.js',
|
'pw.js',
|
||||||
'content-gate.js',
|
'pw-',
|
||||||
'signwall.js',
|
'piano-',
|
||||||
'pw.js',
|
'tinypass.js',
|
||||||
'pw-',
|
'tinypass.min.js',
|
||||||
'piano-',
|
'tp.min.js',
|
||||||
'tinypass.js',
|
'premium.js',
|
||||||
'tinypass.min.js',
|
'amp-access-0.1.js',
|
||||||
'tp.min.js',
|
'zephrBarriersScripts',
|
||||||
'premium.js',
|
'leaky-paywall',
|
||||||
'amp-access-0.1.js',
|
'cookie',
|
||||||
'zephrBarriersScripts',
|
'gdpr',
|
||||||
],
|
'lgpd',
|
||||||
'cookies' => [
|
'push',
|
||||||
'cookie',
|
'sw.js',
|
||||||
'gdpr',
|
'stats.js'
|
||||||
'lgpd'
|
|
||||||
],
|
|
||||||
'misc' => [
|
|
||||||
'push',
|
|
||||||
'sw.js',
|
|
||||||
'stats.js'
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
|
@ -15,24 +15,27 @@ class Rules
|
||||||
*
|
*
|
||||||
* Configurações possíveis para cada domínio:
|
* Configurações possíveis para cada domínio:
|
||||||
* @var array
|
* @var array
|
||||||
*
|
|
||||||
* - idElementRemove: IDs de elementos HTML que devem ser removidos
|
|
||||||
* - classElementRemove: Classes de elementos HTML que devem ser removidos
|
|
||||||
* - scriptTagRemove: Scripts que devem ser removidos
|
|
||||||
* - cookies: Cookies que devem ser definidos ou removidos
|
|
||||||
* - classAttrRemove: Classes que devem ser removidas de elementos
|
|
||||||
* - clearStorage: Se deve limpar o storage do navegador
|
|
||||||
* - customCode: Código JavaScript personalizado para execução
|
|
||||||
* - excludeGlobalRules: Array de regras globais a serem excluídas
|
|
||||||
* - userAgent: User Agent personalizado
|
|
||||||
* - headers: Headers HTTP personalizados
|
|
||||||
* - fixRelativeUrls: Habilita correção de URLs relativas
|
|
||||||
*/
|
*/
|
||||||
private $domainRules = DOMAIN_RULES;
|
private $domainRules = DOMAIN_RULES;
|
||||||
|
|
||||||
// Regras globais expandidas
|
// Regras globais expandidas
|
||||||
private $globalRules = GLOBAL_RULES;
|
private $globalRules = GLOBAL_RULES;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lista de tipos de regras suportados
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $supportedRuleTypes = [
|
||||||
|
'userAgent',
|
||||||
|
'headers',
|
||||||
|
'idElementRemove',
|
||||||
|
'classElementRemove',
|
||||||
|
'scriptTagRemove',
|
||||||
|
'cookies',
|
||||||
|
'classAttrRemove',
|
||||||
|
'customCode'
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtém o domínio base removendo o prefixo www
|
* Obtém o domínio base removendo o prefixo www
|
||||||
*
|
*
|
||||||
|
@ -103,32 +106,57 @@ class Rules
|
||||||
private function mergeWithGlobalRules($rules)
|
private function mergeWithGlobalRules($rules)
|
||||||
{
|
{
|
||||||
$globalRules = $this->getGlobalRules();
|
$globalRules = $this->getGlobalRules();
|
||||||
|
$mergedRules = $rules;
|
||||||
|
|
||||||
|
// Processa excludeGlobalRules primeiro
|
||||||
|
$excludedRules = [];
|
||||||
if (isset($rules['excludeGlobalRules']) && is_array($rules['excludeGlobalRules'])) {
|
if (isset($rules['excludeGlobalRules']) && is_array($rules['excludeGlobalRules'])) {
|
||||||
foreach ($rules['excludeGlobalRules'] as $ruleType => $categories) {
|
foreach ($rules['excludeGlobalRules'] as $ruleType => $excluded) {
|
||||||
if (isset($globalRules[$ruleType])) {
|
if (isset($excluded) && is_array($excluded)) {
|
||||||
foreach ($categories as $category => $itemsToExclude) {
|
foreach ($excluded as $category => $items) {
|
||||||
if (isset($globalRules[$ruleType][$category])) {
|
$excludedRules[$ruleType] = array_merge(
|
||||||
$globalRules[$ruleType][$category] = array_diff(
|
$excludedRules[$ruleType] ?? [],
|
||||||
$globalRules[$ruleType][$category],
|
(array)$items
|
||||||
$itemsToExclude
|
);
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($globalRules as $ruleType => $categories) {
|
// Mescla cada tipo de regra suportado
|
||||||
if (!isset($rules[$ruleType])) {
|
foreach ($this->supportedRuleTypes as $ruleType) {
|
||||||
$rules[$ruleType] = [];
|
if (isset($globalRules[$ruleType])) {
|
||||||
}
|
if (!isset($mergedRules[$ruleType])) {
|
||||||
foreach ($categories as $category => $items) {
|
$mergedRules[$ruleType] = [];
|
||||||
$rules[$ruleType] = array_merge($rules[$ruleType], $items);
|
}
|
||||||
|
|
||||||
|
// Garante que estamos trabalhando com arrays
|
||||||
|
$domainTypeRules = (array)$mergedRules[$ruleType];
|
||||||
|
$globalTypeRules = (array)$globalRules[$ruleType];
|
||||||
|
|
||||||
|
// Aplica exclusões se existirem para este tipo
|
||||||
|
if (isset($excludedRules[$ruleType])) {
|
||||||
|
$globalTypeRules = array_diff($globalTypeRules, $excludedRules[$ruleType]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mescla as regras
|
||||||
|
if (in_array($ruleType, ['cookies', 'headers'])) {
|
||||||
|
// Para cookies e headers, preserva as chaves
|
||||||
|
$mergedRules[$ruleType] = array_merge($globalTypeRules, $domainTypeRules);
|
||||||
|
} else {
|
||||||
|
// Para outros tipos, mescla como arrays simples
|
||||||
|
$mergedRules[$ruleType] = array_values(array_unique(array_merge(
|
||||||
|
$domainTypeRules,
|
||||||
|
$globalTypeRules
|
||||||
|
)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $rules;
|
// Remove excludeGlobalRules do resultado final
|
||||||
|
unset($mergedRules['excludeGlobalRules']);
|
||||||
|
|
||||||
|
return $mergedRules;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -804,7 +804,7 @@ class URLAnalyzer
|
||||||
foreach ($elements as $element) {
|
foreach ($elements as $element) {
|
||||||
if ($element instanceof DOMElement) {
|
if ($element instanceof DOMElement) {
|
||||||
$style = $element->getAttribute('style');
|
$style = $element->getAttribute('style');
|
||||||
$style = preg_replace('/(max-height|height|overflow|position|display)\s*:\s*[^;]+;?/', '', $style);
|
$style = preg_replace('/(max-height|height|overflow|position|display|visibility)\s*:\s*[^;]+;?/', '', $style);
|
||||||
$element->setAttribute('style', $style);
|
$element->setAttribute('style', $style);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue