diff options
author | Jordan Bracco <href@random.sh> | 2025-06-26 20:51:13 +0200 |
---|---|---|
committer | Jordan Bracco <href@random.sh> | 2025-06-26 20:51:13 +0200 |
commit | 4242698bdc0bb2a5576fbeb7f93831cb5a7e3ec4 (patch) | |
tree | 0cc3ec0be6669032a45d23f5962ff8852aacd0a6 | |
parent | conn: fix tls opts (diff) |
link: improve quirks
-rw-r--r-- | lib/plugins/link/data/quirks_rewrite_host.txt | 25 | ||||
-rw-r--r-- | lib/plugins/link/data/quirks_telegram_bot_user_agent.txt | 30 | ||||
-rw-r--r-- | lib/plugins/link/quirks.ex | 47 | ||||
-rw-r--r-- | lib/util.ex | 13 |
4 files changed, 98 insertions, 17 deletions
diff --git a/lib/plugins/link/data/quirks_rewrite_host.txt b/lib/plugins/link/data/quirks_rewrite_host.txt new file mode 100644 index 0000000..0b80b0d --- /dev/null +++ b/lib/plugins/link/data/quirks_rewrite_host.txt @@ -0,0 +1,25 @@ +# list of host rewrites +# fixups: https://gist.github.com/Lexedia/bbbde4dbbf628b0bfe8476a96a977a8f + +x.com:fxtwitter.com +twitter.com:fxtwitter.com +vxtwitter.com:fxtwitter.com + +bsky.app:xsky.app + +instagram.com:ddinstagram.com + +tumblr.com:tpmblr.com + +# reddit: new reddit don't have titles for pages we don't handle in the reddit module +# fallback to old. which has nice titles +reddit.com:old.reddit.com + +pixiv.net:phixiv.net + +threads.net:fixthreads.net + +tiktok.com:tnktok.com +vm.tiktok.com:vm.tnktok.com + +twitch.tv:fxtwitch.tv diff --git a/lib/plugins/link/data/quirks_telegram_bot_user_agent.txt b/lib/plugins/link/data/quirks_telegram_bot_user_agent.txt new file mode 100644 index 0000000..3008272 --- /dev/null +++ b/lib/plugins/link/data/quirks_telegram_bot_user_agent.txt @@ -0,0 +1,30 @@ +# list of domains which needs a telegram bot user agent +# to return proper og:* meta tags +# www. subdomain is added automatically + +x.com +vxtwitter.com +fxtwitter.com +fixupx.com + +facebook.com + +instagram.com +xnstagram.com +ddinstagram.com + +tpmblr.com + +reddit.com +old.reddit.com + +xsky.app + +phixiv.net + +fixthreads.net + +tnktok.com +vm.tnktok.com + +fxtwitch.tv diff --git a/lib/plugins/link/quirks.ex b/lib/plugins/link/quirks.ex index 5acfdac..6f46f6b 100644 --- a/lib/plugins/link/quirks.ex +++ b/lib/plugins/link/quirks.ex @@ -1,32 +1,45 @@ defmodule Nola.Plugins.Link.Quirks do - # def uri(%URI{host: "x.com"} = uri) do - # %URI{uri | host: "vxtwitter.com"} - # end + @rewrite_hosts "./lib/plugins/link/data/quirks_rewrite_host.txt" + |> Util.read_file_list!() + |> Enum.map(fn line -> + [old, new] = String.split(line, ":") + {old, new} + end) + |> Enum.map(fn {old, new} -> [{old, new}, {"www.#{old}", new}] end) + |> List.flatten() + |> then(fn list -> + IO.puts("Link Quirks: rewrite_hosts: #{inspect(list)}") + list + end) - # reddit: new reddit don't have titles for pages we don't handle in the reddit module - # fallback to old. which has nice titles - def uri(%URI{host: reddit} = uri) when reddit in ["www.reddit.com", "reddit.com"] do - %URI{uri | host: "old.reddit.com"} + for {old, new} <- @rewrite_hosts do + def uri(%URI{host: unquote(old)} = uri) do + %URI{uri | host: unquote(new)} + end end def uri(url) do url end - def user_agent(host) - when host in [ - "x.com", - "vxtwitter.com", - "fxtwitter.com", - "instagram.com", - "facebook.com", - "xnstagram.com", - "ddinstagram.com" - ] do + @telegram_bot_hosts "./lib/plugins/link/data/quirks_telegram_bot_user_agent.txt" + |> Util.read_file_list!() + |> Enum.map(fn h -> [h, "www.#{h}"] end) + |> List.flatten() + |> then(fn list -> + IO.puts("Link Quirks: telegram_bot_hosts: #{inspect(list)}") + list + end) + + def user_agent(host) when host in @telegram_bot_hosts do "TelegramBot (like TwitterBot)" end def user_agent(_host) do "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36" end + + def list() do + [rewrite_hosts: @rewrite_hosts, telegram_bot_hosts: @telegram_bot_hosts] + end end diff --git a/lib/util.ex b/lib/util.ex index 71fddab..dea7834 100644 --- a/lib/util.ex +++ b/lib/util.ex @@ -81,4 +81,17 @@ defmodule Util do do_ets_mutate_each(ets, table, fun, ets.next(table, key)) end + + def read_file_list!(path) do + path + |> File.read!() + |> String.split("\n") + |> Enum.map(fn line -> + if !String.starts_with?(line, "#") do + String.trim(line) + end + end) + |> Enum.filter(& &1) + |> Enum.filter(&(&1 != "")) + end end |