summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Busby <contact@benbusby.com>2024-01-08 12:37:17 -0700
committerBen Busby <contact@benbusby.com>2024-01-08 12:37:17 -0700
commit247114d32819076e6063e7777402ed5a92e5f3a2 (patch)
tree1c859f0466482e286f3c920a23378015842761e6
parent85510edc5422dae53fd8626e03157607cf51c11d (diff)
parent99b13b3aa6277f331e85e20cac7aed43a3c284fb (diff)
downloadfarside-247114d32819076e6063e7777402ed5a92e5f3a2.tar.gz
Update reddit + ig frontends, update rate limiting
Farside ratelimiting has been updated to return a 429 when a user exceeds 1 request/sec. This should help eliminate a lot of scraping type behavior that instance maintainers have been dealing with from Farside lately. Service changes: - Teddit removed (not maintained) - Bibliogram replaced by Proxigram - Libreddit merged with redlib
-rw-r--r--.github/workflows/update-instances.yml33
-rw-r--r--lib/farside.ex21
-rw-r--r--lib/farside/router.ex28
-rw-r--r--services-full.json45
-rw-r--r--services.json48
5 files changed, 101 insertions, 74 deletions
diff --git a/.github/workflows/update-instances.yml b/.github/workflows/update-instances.yml
index e0c4899..0ee818c 100644
--- a/.github/workflows/update-instances.yml
+++ b/.github/workflows/update-instances.yml
@@ -166,19 +166,19 @@ jobs:
# ==============================================================
# teddit update
+ # Note: no longer maintained
# ==============================================================
- curl -s https://codeberg.org/teddit/teddit/raw/branch/main/instances.json | \
- jq '[
- .[] |
- select(.url != null) |
- select(.url | contains("https")) |
- .url ] |
- sort' > teddit-tmp.json
- jq --slurpfile teddit teddit-tmp.json \
- '( .[] | select(.type == "teddit") )
- .instances |= $teddit[0]' services-full.json > services-tmp.json
+ #curl -s https://codeberg.org/teddit/teddit/raw/branch/main/instances.json | \
+ #jq '[
+ #.[] |
+ #select(.url | contains("https")) |
+ #.url ] |
+ #sort' > teddit-tmp.json
+ #jq --slurpfile teddit teddit-tmp.json \
+ #'( .[] | select(.type == "teddit") )
+ #.instances |= $teddit[0]' services-full.json > services-tmp.json
- apply_update
+ #apply_update
# ==============================================================
# Wikiless update
@@ -197,18 +197,25 @@ jobs:
#apply_update
# ==============================================================
- # libreddit update
+ # libreddit + redlib update
# ==============================================================
- curl -s https://raw.githubusercontent.com/libreddit/libreddit-instances/master/instances.json | \
+ curl -s https://raw.githubusercontent.com/redlib-org/redlib-instances/main/instances.json | \
jq '[
.instances[] |
select(.url) |
.url ] |
sort' > libreddit-tmp.json
+
jq --slurpfile libreddit libreddit-tmp.json \
'( .[] | select(.type == "libreddit") )
.instances |= $libreddit[0]' services-full.json > services-tmp.json
+ mv services-tmp.json services-full.json
+
+ jq --slurpfile redlib libreddit-tmp.json \
+ '( .[] | select(.type == "redlib") )
+ .instances |= $redlib[0]' services-full.json > services-tmp.json
+
apply_update
# ==============================================================
diff --git a/lib/farside.ex b/lib/farside.ex
index 7b7809b..348f77c 100644
--- a/lib/farside.ex
+++ b/lib/farside.ex
@@ -1,4 +1,4 @@
-defmodule Farside do
+ defmodule Farside do
@service_prefix Application.compile_env!(:farside, :service_prefix)
@fallback_suffix Application.compile_env!(:farside, :fallback_suffix)
@previous_suffix Application.compile_env!(:farside, :previous_suffix)
@@ -7,9 +7,9 @@ defmodule Farside do
# This enables Farside to redirect with links such as:
# farside.link/https://www.youtube.com/watch?v=dQw4w9WgXcQ
@youtube_regex ~r/youtu(.be|be.com)|invidious|piped/
- @reddit_regex ~r/reddit.com|libreddit|teddit/
- @instagram_regex ~r/instagram.com|bibliogram/
@twitter_regex ~r/twitter.com|x.com|nitter/
+ @reddit_regex ~r/reddit.com|libreddit|redlib/
+ @instagram_regex ~r/instagram.com|proxigram/
@wikipedia_regex ~r/wikipedia.org|wikiless/
@medium_regex ~r/medium.com|scribe/
@odysee_regex ~r/odysee.com|librarian/
@@ -25,8 +25,8 @@ defmodule Farside do
@parent_services %{
@youtube_regex => ["invidious", "piped"],
- @reddit_regex => ["libreddit", "teddit"],
- @instagram_regex => ["bibliogram"],
+ @reddit_regex => ["libreddit", "redlib"],
+ @instagram_regex => ["proxigram"],
@twitter_regex => ["nitter"],
@wikipedia_regex => ["wikiless"],
@medium_regex => ["scribe"],
@@ -122,17 +122,6 @@ defmodule Farside do
def amend_instance(instance, service, path) do
cond do
- String.match?(service, @instagram_regex) ->
- # Bibliogram doesn't have a 1:1 matching to Instagram URLs for users,
- # so a "/u" is appended if the requested path doesn't explicitly include
- # "/p" for a post or an empty path for the home page.
- if String.length(path) > 0 and
- !String.starts_with?(path, "p/") and
- !String.starts_with?(path, "u/") do
- "#{instance}/u"
- else
- instance
- end
String.match?(service, @fandom_regex) ->
# Fandom links require the subdomain to be preserved, otherwise the
# requested path won't work.
diff --git a/lib/farside/router.ex b/lib/farside/router.ex
index ce0eb0a..00d98e2 100644
--- a/lib/farside/router.ex
+++ b/lib/farside/router.ex
@@ -56,23 +56,21 @@ defmodule Farside.Router do
Enum.join(glob, "/")
end
- instance = cond do
+ cond do
conn.assigns[:throttle] != nil ->
- Farside.get_service(service_name)
- |> Farside.last_instance
- |> Farside.amend_instance(service_name, path)
+ send_resp(conn, :too_many_requests, "Too many requests - max request rate is 1 per second")
true ->
- Farside.get_service(service_name)
- |> Farside.pick_instance
- |> Farside.amend_instance(service_name, path)
- end
+ instance = Farside.get_service(service_name)
+ |> Farside.pick_instance
+ |> Farside.amend_instance(service_name, path)
- # Redirect to the available instance
- conn
- |> Plug.Conn.resp(:found, "")
- |> Plug.Conn.put_resp_header(
- "location",
- "#{instance}/#{path}#{get_query_params(conn)}"
- )
+ # Redirect to the available instance
+ conn
+ |> Plug.Conn.resp(:found, "")
+ |> Plug.Conn.put_resp_header(
+ "location",
+ "#{instance}/#{path}#{get_query_params(conn)}"
+ )
+ end
end
end
diff --git a/services-full.json b/services-full.json
index 89c2cb0..ee0d5de 100644
--- a/services-full.json
+++ b/services-full.json
@@ -2,19 +2,31 @@
{
"type": "libreddit",
"test_url": "/r/popular",
- "fallback": "https://libreddit.spike.codes",
+ "fallback": "https://redlib.freedit.eu",
"instances": [
"https://l.opnxng.com",
- "https://libreddit.freedit.eu",
- "https://libreddit.kylrth.com",
- "https://libreddit.lunar.icu",
- "https://libreddit.northboot.xyz",
- "https://libreddit.privacydev.net",
+ "https://libreddit.bus-hit.me",
"https://libreddit.projectsegfau.lt",
- "https://libreddit.strongthany.cc",
- "https://lr.artemislena.eu",
+ "https://reddit.idevicehacked.com",
"https://reddit.invak.id",
- "https://reddit.simo.sh"
+ "https://redlib.catsarch.com",
+ "https://redlib.freedit.eu",
+ "https://redlib.matthew.science"
+ ]
+ },
+ {
+ "type": "redlib",
+ "test_url": "/r/popular",
+ "fallback": "https://redlib.freedit.eu",
+ "instances": [
+ "https://l.opnxng.com",
+ "https://libreddit.bus-hit.me",
+ "https://libreddit.projectsegfau.lt",
+ "https://reddit.idevicehacked.com",
+ "https://reddit.invak.id",
+ "https://redlib.catsarch.com",
+ "https://redlib.freedit.eu",
+ "https://redlib.matthew.science"
]
},
{
@@ -53,14 +65,17 @@
]
},
{
- "type": "bibliogram",
+ "type": "proxigram",
"test_url": "/p/Ch2WRmiLMjj",
- "fallback": "https://bibliogram.1d4.us",
+ "fallback": "https://ig.opnxng.com",
"instances": [
- "https://bibliogram.1d4.us",
- "https://bibliogram.froth.zone",
- "https://bibliogram.priv.pw",
- "https://ig.femboy.hu"
+ "https://ig.opnxng.com",
+ "https://proxigram.lunar.icu",
+ "https://gram.whatever.social",
+ "https://ig.snine.nl",
+ "https://ig.floppa.one",
+ "https://proxigram.kyun.li",
+ "https://proxigram.ducks.party"
]
},
{
diff --git a/services.json b/services.json
index e6ff3d2..17ac6a4 100644
--- a/services.json
+++ b/services.json
@@ -2,18 +2,29 @@
{
"type": "libreddit",
"test_url": "/r/popular",
- "fallback": "https://libreddit.spike.codes",
+ "fallback": "https://redlib.freedit.eu",
"instances": [
"https://l.opnxng.com",
- "https://libreddit.kylrth.com",
- "https://libreddit.lunar.icu",
- "https://libreddit.northboot.xyz",
- "https://libreddit.privacydev.net",
+ "https://libreddit.bus-hit.me",
"https://libreddit.projectsegfau.lt",
- "https://libreddit.strongthany.cc",
- "https://lr.artemislena.eu",
+ "https://reddit.idevicehacked.com",
"https://reddit.invak.id",
- "https://reddit.simo.sh"
+ "https://redlib.catsarch.com",
+ "https://redlib.matthew.science"
+ ]
+ },
+ {
+ "type": "redlib",
+ "test_url": "/r/popular",
+ "fallback": "https://redlib.freedit.eu",
+ "instances": [
+ "https://l.opnxng.com",
+ "https://libreddit.bus-hit.me",
+ "https://libreddit.projectsegfau.lt",
+ "https://reddit.idevicehacked.com",
+ "https://reddit.invak.id",
+ "https://redlib.catsarch.com",
+ "https://redlib.matthew.science"
]
},
{
@@ -47,14 +58,17 @@
]
},
{
- "type": "bibliogram",
+ "type": "proxigram",
"test_url": "/p/Ch2WRmiLMjj",
- "fallback": "https://bibliogram.1d4.us",
+ "fallback": "https://ig.opnxng.com",
"instances": [
- "https://bibliogram.1d4.us",
- "https://bibliogram.froth.zone",
- "https://bibliogram.priv.pw",
- "https://ig.femboy.hu"
+ "https://ig.opnxng.com",
+ "https://proxigram.lunar.icu",
+ "https://gram.whatever.social",
+ "https://ig.snine.nl",
+ "https://ig.floppa.one",
+ "https://proxigram.kyun.li",
+ "https://proxigram.ducks.party"
]
},
{
@@ -125,6 +139,9 @@
"https://nitter.io.lol",
"https://nitter.ktachibana.party",
"https://nitter.kylrth.com",
+ "https://nitter.kavin.rocks",
+ "https://nitter.unixfox.eu",
+ "https://n.actionsack.com",
"https://nitter.moomoo.me",
"https://nitter.net",
"https://nitter.no-logs.com",
@@ -188,7 +205,8 @@
"https://translate.dr460nf1r3.org",
"https://translate.whateveritworks.org",
"https://translate.sapti.me",
- "https://translate.colinslegacy.com"
+ "https://translate.colinslegacy.com",
+ "https://translate.igna.rocks"
]
},
{