diff --git a/.travis.yml b/.travis.yml index 733e262..cc6a6da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,13 +26,6 @@ deploy: - dist/chromium/burlesco-chromium.zip - dist/firefox/burlesco-firefox.xpi - dist/firefox/burlesco-firefox.zip - - dist/burlesco.user.js - on: - branch: master - tags: true - - provider: script - skip_cleanup: true - script: scripts/deploy.sh on: branch: master tags: true diff --git a/Makefile b/Makefile index af08315..2887f57 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ clean: rm -rf "$(DIST_DIR)" lint: find . -name '*.json' -exec python -c 'import json; json.load(open("{}"))' \; - npx eslint webext userscript + npx eslint webext pre-build: clean set -e ; \ for i in $(BROWSERS) ; do \ @@ -23,7 +23,6 @@ pre-build: clean webext/manifest.json > "$$SRC_DIR/manifest.json" ; \ fi ; \ done - python3 userscript/build.py userscript/burlesco.user.js > "$(DIST_DIR)/burlesco.user.js" build: pre-build set -e ; \ for i in $(BROWSERS) ; do \ diff --git a/scripts/deploy.sh b/scripts/deploy.sh deleted file mode 100755 index c60c142..0000000 --- a/scripts/deploy.sh +++ /dev/null @@ -1,5 +0,0 @@ -curl -X PATCH "https://api.cloudflare.com/client/v4/zones/$cloudflare_zone/pagerules/$cloudflare_pagerule" \ - -H "X-Auth-Email: $cloudflare_email" \ - -H "X-Auth-Key: $cloudflare_token" \ - -H "Content-Type: application/json" \ - --data '{"targets":[{"target":"url","constraint":{"operator":"matches","value":"burles.co\/userscript\/burlesco.user.js*"}}],"actions":[{"id":"forwarding_url","value":{"url":"https:\/\/github.com\/burlesco\/burlesco\/releases\/download\/'"$TRAVIS_TAG"'\/burlesco.user.js","status_code":302}}],"priority":1,"status":"active"}' diff --git a/userscript/LICENSE.txt b/userscript/LICENSE.txt deleted file mode 100644 index 90492b3..0000000 --- a/userscript/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016-present, rodorgas - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/userscript/README.md b/userscript/README.md deleted file mode 100644 index e7eb877..0000000 --- a/userscript/README.md +++ /dev/null @@ -1,7 +0,0 @@ -O script `build.py` é um pré-processador de userscript. - -@webRequestItem -=============== -O Tampermonkey [não suporta múltiplas entradas para a tag @webRequest](https://github.com/Tampermonkey/tampermonkey/issues/397), então teríamos que escrever todos os filtros de URL em uma linha. Porém isso prejudicaria os diffs e deixaria o código pouco legível. - -Com a tag `@webRequestItem`, podemos especificar um elemento do array de `@webRequest` separadamente. O pré-processador `build.py` então converte essas entradas em um único `@webRequest`. diff --git a/userscript/build.py b/userscript/build.py deleted file mode 100644 index 9e666eb..0000000 --- a/userscript/build.py +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/python3 -import sys -import re - -code = open(sys.argv[1]).read() - -webrequest_re = '// @webRequestItem (.+)\n' -matches = re.findall(webrequest_re, code, re.M) -webrequests = '// @webRequest [{}]\n'.format(','.join(matches)) - -count = len(matches) - 1 -code = re.sub(webrequest_re, '', code, count, re.M) -code = re.sub(webrequest_re, webrequests, code) - -print(code) diff --git a/userscript/burlesco.user.js b/userscript/burlesco.user.js deleted file mode 100644 index 40748fa..0000000 --- a/userscript/burlesco.user.js +++ /dev/null @@ -1,423 +0,0 @@ -// ==UserScript== -// @name Burlesco -// @namespace https://burles.co/ -// @version 11.15 -// @description Leia notícias sem ser assinante, burle o paywall -// @author rodorgas & AugustoResende -// @supportURL https://burles.co -// @icon64 https://burles.co/userscript/icon.png -// Atenção: Caso algum site não funcione logo após a instalação, limpe o cache do navegador. -// @grant GM_webRequest -// @grant GM_xmlhttpRequest -// @connect gauchazh.clicrbs.com.br -// @connect static.infoglobo.com.br -// @connect cdn.tinypass.com -// @match *://www.bloomberg.com/* -// @match *://correio.rac.com.br/* -// @match *://*.nsctotal.com.br/* -// @match *://www.economist.com/* -// @match *://*.estadao.com.br/* -// @match *://foreignpolicy.com/* -// @match *://blockv2.fivewall.com.br/* -// @match *://*.folha.uol.com.br/* -// @match *://*.folha.com.br/* -// @match *://gauchazh.clicrbs.com.br/* -// @match *://*.zh.clicrbs.com.br/* -// @match *://api.clicrbs.com.br/* -// @match *://*.gazetadopovo.com.br/* -// @match *://ogjs.infoglobo.com.br/* -// @match *://*.jota.info/* -// @match *://www.jornalnh.com.br/* -// @match *://*.nexojornal.com.br/* -// @match *://www.netdeal.com.br/* -// @match *://*.nytimes.com/* -// @match *://*.nyt.com/* -// @match *://*.oglobo.globo.com/* -// @match *://www.rbsonline.com.br/* -// @match *://api.tinypass.com/* -// @match *://cdn.tinypass.com/* -// @match *://dashboard.tinypass.com/* -// @match *://*.washingtonpost.com/* -// @match *://*.exame.abril.com.br/* -// @match *://www.eltiempo.com/* -// @match *://super.abril.com.br/* -// @match *://veja.abril.com.br/* -// @match *://quatrorodas.abril.com.br/* -// @match *://*.uol.com.br/* -// @match *://www.uol/* -// @match *://*.wsj.com/* -// @match *://*.ft.com/* -// @match *://*.gramophone.co.uk/* -// @match *://*.folhadelondrina.com.br/* -// @match *://*.wired.com/* -// @match *://www.jornalvs.com.br/* -// @match *://*.br18.com.br/* -// @match *://*.diariopopular.com.br/* -// @match *://*.haaretz.com/* -// @match *://*.haaretz.co.il/* -// @match *://*.diarinho.com.br/* -// @match *://*.diariodaregiao.com.br/* -// @webRequestItem {"selector":{"include":"*://paywall.folha.uol.com.br/*","exclude":"*://paywall.folha.uol.com.br/status.php"} ,"action":"cancel"} -// @webRequestItem {"selector":"*://static.folha.uol.com.br/paywall/*","action":"cancel"} -// @webRequestItem {"selector":"*://ogjs.infoglobo.com.br/*/js/controla-acesso-aux.js","action":"cancel"} -// @webRequestItem {"selector":"*://static.infoglobo.com.br/paywall/register-piano/*/scripts/nova-tela-register.js","action":"cancel"} -// @webRequestItem {"selector":"*://www.netdeal.com.br/*","action":"cancel"} -// @webRequestItem {"selector":"*://correio.rac.com.br/includes/js/novo_cp/fivewall.js*","action":"cancel"} -// @webRequestItem {"selector":"*://dashboard.tinypass.com/xbuilder/experience/load*","action":"cancel"} -// @webRequestItem {"selector":"*://*.jornalnh.com.br/includes/js/paywall.js*","action":"cancel"} -// @webRequestItem {"selector":"*://blockv2.fivewall.com.br/*","action":"cancel"} -// @webRequestItem {"selector":"*://www.rbsonline.com.br/cdn/scripts/SLoader.js","action":"cancel"} -// @webRequestItem {"selector":"*://*.nytimes.com/js/mtr.js","action":"cancel"} -// @webRequestItem {"selector":"*://*.washingtonpost.com/wp-stat/pwapi/*","action":"cancel"} -// @webRequestItem {"selector":"*://cdn.tinypass.com/api/tinypass.min.js","action":"cancel"} -// @webRequestItem {"selector":"*://api.tinypass.com/tpl/*","action":"cancel"} -// @webRequestItem {"selector":"*://tm.jsuol.com.br/modules/content-gate.js","action":"cancel"} -// @webRequestItem {"selector":"*://gauchazh.clicrbs.com.br/static/main*","action":"cancel"} -// @webRequestItem {"selector":"*://www.rbsonline.com.br/cdn/scripts/special-paywall.min.js*","action":"cancel"} -// @webRequestItem {"selector":"https://paywall.nsctotal.com.br/behaviors","action":"cancel"} -// @webRequestItem {"selector":"*://*.estadao.com.br/paywall/*","action":"cancel"} -// @webRequestItem {"selector":"*://www.folhadelondrina.com.br/*/fivewall.js*","action":"cancel"} -// @webRequestItem {"selector":"*://www.jornalvs.com.br/includes/js/paywall.js*","action":"cancel"} -// @webRequestItem {"selector":"https://www.eltiempo.com/js/desktopArticle.js*","action":"cancel"} -// @webRequestItem {"selector":"*://*.haaretz.co.il/*/inter.js","action":"cancel"} -// @webRequestItem {"selector":"*://*.themarker.com/*/inter.js","action":"cancel"} -// @webRequestItem {"selector":"*://*.diarinho.com.br/wp-admin/admin-ajax.php","action":"cancel"} -// @webRequestItem {"selector":"*://diarinho.com.br/wp-admin/admin-ajax.php","action":"cancel"} -// @run-at document-start -// @noframes -// ==/UserScript== - -// run_at: document_start -if (/gauchazh\.clicrbs\.com\.br/.test(document.location.host)) { - document.addEventListener('DOMContentLoaded', function() { - function patchJs(jsurl) { - GM_xmlhttpRequest({ - method: 'GET', - url: jsurl, - onload: function(response) { - var injectme = response.responseText; - injectme = injectme.replace(/[a-z].showLoginPaywall,/g, 'false,'); - injectme = injectme.replace(/[a-z].showPaywall,/g, 'false,'); - injectme = injectme.replace(/[a-z].requestCPF\|\|!1,/g, 'false,'); - injectme = injectme.replace( - /![a-z].showLoginPaywall&&![a-z].showPaywall\|\|!1/g, 'true'); - var script = document.createElement('script'); - script.type = 'text/javascript'; - var textNode = document.createTextNode(injectme); - script.appendChild(textNode); - document.head.appendChild(script); - } - }); - } - - var scripts = Array.from(document.getElementsByTagName('script')); - var script = scripts.find((el) => { return el.src.includes('static/main'); }); - if (script) - patchJs(script.src); - }); - - window.onload = function() { - function check(){ - if(document.getElementsByClassName('wrapper-paid-content')[0]){ - document.getElementsByClassName('wrapper-paid-content')[0].innerHTML = '

Por favor aperte Ctrl-F5 para carregar o restante da notícia!

'; - } - setTimeout(function(){ check(); }, 1000); - } - check(); - }; -} - -else if (/oglobo\.globo\.com/.test(document.location.host)) { - - // Insere Tinypass, necessário para a biblioteca piano - - GM_xmlhttpRequest({ - method: 'GET', - url: 'https://cdn.tinypass.com/api/tinypass.min.js', - anonymous: true, - onload: function(response) { - var script = document.createElement('script'); - script.type = 'text/javascript'; - var textNode = document.createTextNode(response.responseText); - script.appendChild(textNode); - document.head.appendChild(script); - } - }); - - document.addEventListener('DOMContentLoaded', function() { - function patchJs(jsurl) { - GM_xmlhttpRequest({ - method: 'GET', - url: jsurl, - onload: function(response) { - var injectme = response.responseText; - injectme = injectme.replace('window.hasPaywall||!1;window.dataLayer=window.dataLayer||[]', 'false'); - injectme = injectme.replace('window.conteudoExclusivo?!0:!1', 'false'); - injectme = injectme.replace('Piano.activePaywall=!0', 'Piano.activePaywall=false'); - injectme = injectme.replace('Piano.checkPaywall()', ''); - var script = document.createElement('script'); - script.type = 'text/javascript'; - var textNode = document.createTextNode(injectme); - script.appendChild(textNode); - document.head.appendChild(script); - } - }); - } - - var scripts = Array.from(document.getElementsByTagName('script')); - var script = scripts.find((el) => { return el.src.includes('js/tiny.js'); }); - if (script) - patchJs(script.src); - }); -} - -else if (/jota\.info/.test(document.location.host)) { - var page_url = window.location.href; - if (page_url.search('paywall') >= 0) { // Só ativa em urls com paywall - var new_page_url = window.location.href.replace('www.jota.info/paywall?redirect_to=//', ''); - GM_xmlhttpRequest({ - method: 'GET', - url: new_page_url, - headers: { - 'User-Agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' - }, - anonymous: true, - onload: function(response) { - var parser = new DOMParser(); - var newDocument = parser.parseFromString(response.responseText,'text/html'); - newDocument.getElementsByClassName('jota-paywall')[0].remove(); // Já remove o anúncio do paywall antes de inserir - if (newDocument) { - document.open(); - history.pushState({urlPath: new_page_url}, '', new_page_url); // Atualiza a url sem fazer um novo refresh - document.write(newDocument.getElementsByTagName('html')[0].innerHTML); - document.close(); - } - } - }); - } -} - - -// run_at: document_idle -document.addEventListener('DOMContentLoaded', function() { - var code = null; - - if (/www\.economist\.com/.test(document.location.host)) - code = 'document.cookie = "ec_limit=allow";'; - - else if (/ft\.com/.test(document.location.host) - && document.querySelector('.barrier')) { - - eraseAllCookies(); - - document.cookie = ''; - localStorage.clear(); - sessionStorage.clear(); - indexedDB.deleteDatabase('next-flags'); - indexedDB.deleteDatabase('next:ads'); - - GM_xmlhttpRequest({ - method: 'GET', - url: window.location.href, - headers: { - 'Referer': 'https://www.google.com.br/' - }, - anonymous: true, - onload: function(response) { - var parser = new DOMParser(); - var newDocument = parser.parseFromString(response.responseText,'text/html'); - if (newDocument.getElementsByClassName('article__content')[0]) { - document.open(); - document.write(newDocument.getElementsByTagName('html')[0].innerHTML); - document.close(); - } - } - }); - } - - else if (/foreignpolicy\.com/.test(document.location.host)) { - code = ` - document.getElementById("paywall_bg").remove(); - document.body.classList.remove("overlay-no-scroll"); - document.body.style.overflow = "visible"; - document.documentElement.classList.remove("overlay-no-scroll"); - `; - } - - else if (/folha\.uol\.com\.br/.test(document.location.host)) { - code = ` - omtrClickUOL = function(){};function showText() { - $("#bt-read-more-content").next().show(); - $("#bt-read-more-content").next().show().prev().remove(); - } - setTimeout(showText, 100); - `; - } - - else if (/nexojornal\.com\.br/.test(document.location.host)) { - code = ` - style = document.createElement('style'); - style.type = 'text/css'; - css='#aviso-metered-access {display: none !important}'; - style.appendChild(document.createTextNode(css)); - document.head.appendChild(style); - paywallContainer = document.getElementsByClassName('new-paywall-container')[0]; - paywallContent = paywallContainer.getAttribute('data-paywall-content'); - nexoApiURL = paywallContainer.getAttribute('data-paywall-check'); - xmlhttp = new XMLHttpRequest(); - xmlhttp.onreadystatechange = function() { - if (this.readyState == 4 && (this.status == 200 || this.status == 201 || this.status == 401)) { - access_token = JSON.parse(this.responseText)['access_token']; - paywallContainer.className = 'wf-placeholder'; - paywallContainer.setAttribute('data-loadURL', paywallContent.replace('{access_token}', access_token)); - paywallContainer.setAttribute('data-skip-profiles', ''); - WFLazyLoader.loadFragment() - } - }; - xmlhttp.open('GET', nexoApiURL, true); - xmlhttp.send();`; - } - - else if (/abril\.com\.br/.test(document.location.host)) - code = ` - document.queryselectorall('.callpaywall') - .foreach(x => x.remove()); - document.queryselectorall('.content-blocked') - .foreach(x => x.classlist.remove('content-blocked')) - `; - - else if (/nytimes\.com/.test(document.location.host)) - eraseAllCookies(); - - else if (/wsj\.com/.test(document.location.host) - && document.querySelector('.wsj-snippet-login')) { - - eraseAllCookies(); - - document.cookie = ''; - localStorage.clear(); - sessionStorage.clear(); - - GM_xmlhttpRequest({ - method: 'GET', - url: window.location.href, - headers: { - 'Referer': 'https://www.facebook.com/' - }, - anonymous: true, - onload: function(response) { - var parser = new DOMParser(); - var newDocument = parser.parseFromString(response.responseText,'text/html'); - if (newDocument.querySelector('article')) { - document.body = newDocument.body; - } - } - }); - } - - else if (/bloomberg\.com/.test(document.location.host)) { - localStorage.clear(); - sessionStorage.clear(); - } - - else if (/diariodaregiao\.com\.br/.test(document.location.host)) - { - document.getElementsByClassName('noticia-texto')[0].style.display = 'block'; - document.querySelector('.conteudo > .row').style.display = 'none'; - } - - else if (/diariopopular\.com\.br/.test(document.location.host)) { - eraseAllCookies(); - } - - else if (/wired\.com/.test(document.location.host)) { - code = ` - window.onload = function() { - style = document.createElement('style'); - style.type = 'text/css'; - css='.paywall-container-component {display: none !important}'; - style.appendChild(document.createTextNode(css)); - document.head.appendChild(style); - } - document.cookie = ""; - localStorage.clear(); - sessionStorage.clear(); - `; - eraseAllCookies(); - } - - else if (/haaretz\.com/.test(document.location.host) || - (/haaretz\.co\.il/.test(document.location.host))) { - - GM_xmlhttpRequest({ - method: 'GET', - url: window.location.href, - headers: { - 'User-Agent': 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)' - }, - anonymous: true, - onload: function(response) { - var parser = new DOMParser(); - var newDocument = parser.parseFromString(response.responseText,'text/html'); - if (newDocument) { - document.open(); - document.write(newDocument.getElementsByTagName('html')[0].innerHTML); - document.close(); - } - } - }); - } - - if (code !== null) { - var script = document.createElement('script'); - script.textContent = code; - (document.head||document.documentElement).appendChild(script); - script.parentNode.removeChild(script); - } -}); - -function eraseAllCookies() { - var cookieList = document.cookie.split (/;\s*/); - for (var J = cookieList.length - 1; J >= 0; --J) { - var cookieName = cookieList[J].replace (/\s*(\w+)=.+$/, '$1'); - eraseCookie (cookieName); - } -} - -function eraseCookie (cookieName) { - // https://stackoverflow.com/a/28081337/1840019 - //--- ONE-TIME INITS: - //--- Set possible domains. Omits some rare edge cases.?. - var domain = document.domain; - var domain2 = document.domain.replace (/^www\./, ''); - var domain3 = document.domain.replace (/^(\w+\.)+?(\w+\.\w+)$/, '$2'); - - //--- Get possible paths for the current page: - var pathNodes = location.pathname.split ('/').map ( function (pathWord) { - return '/' + pathWord; - } ); - var cookPaths = [''].concat (pathNodes.map ( function (pathNode) { - if (this.pathStr) { - this.pathStr += pathNode; - } - else { - this.pathStr = '; path='; - return (this.pathStr + pathNode); - } - return (this.pathStr); - } ) ); - - // eslint-disable-next-line no-func-assign - ( eraseCookie = function (cookieName) { - //--- For each path, attempt to delete the cookie. - cookPaths.forEach ( function (pathStr) { - //--- To delete a cookie, set its expiration date to a past value. - var diagStr = cookieName + '=' + pathStr + '; expires=Thu, 01-Jan-1970 00:00:01 GMT;'; - document.cookie = diagStr; - - document.cookie = cookieName + '=' + pathStr + '; domain=' + domain + '; expires=Thu, 01-Jan-1970 00:00:01 GMT;'; - document.cookie = cookieName + '=' + pathStr + '; domain=' + domain2 + '; expires=Thu, 01-Jan-1970 00:00:01 GMT;'; - document.cookie = cookieName + '=' + pathStr + '; domain=' + domain3 + '; expires=Thu, 01-Jan-1970 00:00:01 GMT;'; - } ); - } ) (cookieName); -} diff --git a/userscript/icon.png b/userscript/icon.png deleted file mode 100644 index 58de514..0000000 Binary files a/userscript/icon.png and /dev/null differ