From b036cddd86c615390cfe1811726073032fe68bf1 Mon Sep 17 00:00:00 2001 From: CaioWzy Date: Sat, 22 Jun 2019 22:21:30 -0300 Subject: [PATCH] =?UTF-8?q?Remove=20userscript=20do=20reposit=C3=B3rio=20(?= =?UTF-8?q?Removido=20para=20reposit=C3=B3rio=20pr=C3=B3prio)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 7 - Makefile | 3 +- scripts/deploy.sh | 5 - userscript/LICENSE.txt | 21 -- userscript/README.md | 7 - userscript/build.py | 15 -- userscript/burlesco.user.js | 423 ------------------------------------ userscript/icon.png | Bin 4837 -> 0 bytes 8 files changed, 1 insertion(+), 480 deletions(-) delete mode 100755 scripts/deploy.sh delete mode 100644 userscript/LICENSE.txt delete mode 100644 userscript/README.md delete mode 100644 userscript/build.py delete mode 100644 userscript/burlesco.user.js delete mode 100644 userscript/icon.png 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 58de5147de86d7d81876bd6b61983cf8a9fb9f74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4837 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 LNkvXXu0mjf>*HY>