1// Banner de cookies para visitante anônimo: mostra a polÃtica e registra a 2// aceitação no backend. URLs e token vêm dos data-* que LGPDAnonymousPlugin 3// injeta na tag do script (plus_hidra_looper/plugins/lgpd.py). 4(function() { 5 // A tag de configuração é localizada por TAG + id, nunca só por id. 6 // 7 // `media.js` é renderizado no fim do body e `querySelector('#id')` devolve o 8 // PRIMEIRO nó em ordem de documento â o conteúdo editável vem antes. Como o 9 // `safe_clean` (`plus_base/xpublique/utils/html_security.py`) não remove `id` 10 // nem `data-*` do HTML de editor, um `<span id="..." data-...>` gravado em bloco 11 // de conteúdo era lido NO LUGAR desta tag e passava a escolher o `acceptUrl` 12 // abaixo â que recebe o header `X-CSRFToken`, ou seja, vazamento do token para 13 // host arbitrário. O sanitizador REMOVE `<script>`, então exigir a tag fecha o 14 // vetor (#7174 / #7127). 15 var configScript = document.querySelector("script#plus_hidra_looper_lgpd_anonymous_script"); 16 if (!configScript) { 17 return; 18 } 19 var params_dataset = configScript.dataset; 20 var viewUrl = params_dataset.disclaimerViewUrl; 21 var acceptUrl = params_dataset.disclaimerUserAcceptUrl; 22 var t = params_dataset.disclaimerT; 23 // O botão "Eu concordo" continua no DOM com o listener de click ativo durante 24 // o fade-out do banner, e a lib chama onStatusChange sem comparar o status 25 // anterior. Sem esta trava, cliques repetidos disparam POSTs concorrentes que 26 // gravam aceitações duplicadas. 27 var accepted = false; 28 window.cookieconsent.initialise({ 29 palette: { 30 popup: { background: "rgba(0,0,0,0.80)" }, 31 button: { background: "#fad307", text: "#4d4209 !important" } 32 }, 33 theme: "classic", 34 content: { 35 message: "Para uma melhor experiência, neste site utilizamos cookies de acordo com a nossa polÃtica de privacidade.<br>Ao continuar navegando neste site, você declara estar ciente destas condições e concorda com elas.",
36 dismiss: "Eu concordo", 37 link: "Conheça nossa polÃtica de privacidade", 38 href: viewUrl 39 }, 40 onStatusChange: function(status, chosenBefore) { 41 if (accepted) { 42 return; 43 } 44 accepted = true; 45 $.post({ 46 url: acceptUrl, 47 beforeSend: function(xhr) { 48 xhr.setRequestHeader("X-CSRFToken", t); 49 } 50 }); 51 } 52 }); 53})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.