# -*- mode: python; python-indent-offset: 4; tab-width: 0; encoding: utf-8-unix -*- # This should be execed in config.py """This intercepts cloudflare redirects and redirects to web.archive.org - useful if you run over Tor. It will open a new tab and close the old one. """ import re import sys try: import qutebrowser.api from qutebrowser.api import interceptor from qutebrowser.extensions.interceptors import Request from qutebrowser.qt.core import QUrl from qutebrowser.utils import debug, log except ImportError: sys.stderr.write('qutebrowser not imported\n') else: # redirect on cloudflare def filter_cf(thereq: Request) -> None: """Block given request if necessary Called by a signal""" from qutebrowser.utils import objreg from qutebrowser.mainwindow import mainwindow url = thereq.request_url if url.query().startswith('ray='): log.network.debug(f"filter_cf thereq.first_party_url={thereq.first_party_url} {repr(thereq)}") if thereq.is_blocked is False and ( url.query().startswith('__cf_chl_rt_tk=') or \ url.host() == 'challenges.cloudflare.com' or \ url.path().startswith('/cdn-cgi/challenge-platform/h/')): # b/turnstile/if/ov2/av0/rcv0/0/33izj/ # g/orchestrate/chl_page/v1 url.setPath('/web' + '/*/' +thereq.first_party_url.host() +thereq.first_party_url.path()) url.setHost('web.archive.org') # "__cf_chl_rt_tk="[A-Za-z0-9.-]*" url.setQuery(None) log.network.info(f"config.filter_cf REDIRECTING to {url}") thereq.request_url = url thereq._redirected = True thereq.is_blocked = True if False: # doesn't work at least on PyQt5 linux thereq.redirect(url) elif True: # thereq.block() from qutebrowser.config import config # expanded open_desktopservices_url target = objreg.last_opened_window() #? target = config.val.new_instance_open_target window = mainwindow.get_window(via_ipc=False, target=target) tab = window.tabbed_browser._current_tab() window.tabbed_browser.tabopen(url, background=False, related=True) # NO window.maybe_raise() # crimeflare tabs keep refreshing infinitely window.tabbed_browser.close_tab(tab) interceptor.register(filter_cf) log.init.debug(f"loaded filter_cf interceptor")