aboutsummaryrefslogtreecommitdiffstats
path: root/modules/by-name/qu/qutebrowser/include
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/qu/qutebrowser/include')
-rw-r--r--modules/by-name/qu/qutebrowser/include/redirects.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/modules/by-name/qu/qutebrowser/include/redirects.py b/modules/by-name/qu/qutebrowser/include/redirects.py
new file mode 100644
index 00000000..23456a25
--- /dev/null
+++ b/modules/by-name/qu/qutebrowser/include/redirects.py
@@ -0,0 +1,64 @@
+# Based on the redirect scripts from here:
+# - https://github.com/Phantop/dotfiles/blob/9f6256820dbb99cdf5afd373b74d93fe8b8972d7/qutebrowser/include/redirects.py
+# - https://gitlab.com/jgkamat/dotfiles/-/blob/0e5f05d347079a9839cb2c7878fd81d9850928ce/qutebrowser/.config/qutebrowser/pyconfig/redirectors.py
+
+from qutebrowser.api import interceptor, message
+
+import operator
+import typing
+
+from PyQt6.QtCore import QUrl
+
+
+def get_host(url: QUrl, base: bool = False) -> str:
+ host = url.host()
+ if base:
+ # www.someSite.com -> someSite.com
+ return ".".join(host.split(".")[-2:])
+ else:
+ return host
+
+
+def partial(func, *part_args):
+ def wrapper(*extra_args):
+ return func(*part_args, *extra_args)
+
+ return wrapper
+
+
+def farside_redir(target: str, url: QUrl) -> bool:
+ url.setHost("farside.link")
+ url.setPath("/" + target + url.path())
+ return True
+
+
+# Any return value other than a literal 'False' means we redirect
+REDIRECT_MAP: typing.Dict[str, typing.Callable[..., typing.Optional[bool]]] = {
+ "reddit.com": operator.methodcaller("setHost", "redlib.vhack.eu"),
+ # Source: https://libredirect.github.io/
+ "medium.com": partial(farside_redir, "scribe"),
+ "stackoverflow.com": partial(farside_redir, "anonymousoverflow"),
+ "goodreads.com": partial(farside_redir, "biblioreads"),
+}
+
+
+def rewrite(info: interceptor.Request):
+ if (
+ info.resource_type != interceptor.ResourceType.main_frame
+ or info.request_url.scheme() in {"data", "blob"}
+ ):
+ return
+
+ url = info.request_url
+
+ redir = REDIRECT_MAP.get(get_host(url, base=False))
+ if redir is None:
+ # Try again, but now only with the base host.
+ redir = REDIRECT_MAP.get(get_host(url, base=True))
+
+ if redir is not None and redir(url) is not False:
+ message.info("Redirecting to " + url.toString())
+ info.redirect(url)
+
+
+interceptor.register(rewrite)