From c09266cd1765b6410292c3f1fd98ec998b30f41c Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Tue, 15 Apr 2025 14:12:10 -0600 Subject: [PATCH] replace urls in t.co redirect and fix missing X urls in replacer --- src/formatters.nim | 8 ++++---- src/routes/resolver.nim | 18 +++++++++++------- src/views/mastoapi.nim | 3 +-- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/formatters.nim b/src/formatters.nim index 1da24e8..8e5fa47 100644 --- a/src/formatters.nim +++ b/src/formatters.nim @@ -9,8 +9,8 @@ const twitter = parseUri("https://twitter.com") let - twRegex = re"(?<=(?twitter\.com(\S+)""" + twRegex = re"(?<=(?(twitter|x)\.com(\S+)""" ytRegex = re(r"([A-z.]+\.)?youtu(be\.com|\.be)", {reStudy, reIgnoreCase}) @@ -58,12 +58,12 @@ proc replaceUrls*(body: string; prefs: Prefs; absolute=""): string = if prefs.replaceYouTube.len > 0 and "youtu" in result: result = result.replace(ytRegex, prefs.replaceYouTube) - if prefs.replaceTwitter.len > 0 and ("twitter.com" in body or tco in body): + if prefs.replaceTwitter.len > 0 and ("twitter.com" in result or "/x.com" in result or tco in result): result = result.replace(tco, https & prefs.replaceTwitter & "/t.co") result = result.replace(cards, prefs.replaceTwitter & "/cards") result = result.replace(twRegex, prefs.replaceTwitter) result = result.replacef(twLinkRegex, a( - prefs.replaceTwitter & "$2", href = https & prefs.replaceTwitter & "$1")) + prefs.replaceTwitter & "$4", href = https & prefs.replaceTwitter & "$2")) if prefs.replaceReddit.len > 0 and ("reddit.com" in result or "redd.it" in result): result = result.replace(rdShortRegex, prefs.replaceReddit & "/comments/") diff --git a/src/routes/resolver.nim b/src/routes/resolver.nim index 1baf873..429422b 100644 --- a/src/routes/resolver.nim +++ b/src/routes/resolver.nim @@ -4,22 +4,26 @@ import strutils import jester import router_utils -import ".."/[types, api] +import ".."/[types, api, formatters] import ../views/general -template respResolved*(url, kind: string): untyped = +template respResolved*(url, kind: string; prefs: Prefs): untyped = let u = url if u.len == 0: resp showError("Invalid $1 link" % kind, cfg) else: - redirect(u) + redirect(replaceUrls(u, prefs)) proc createResolverRouter*(cfg: Config) = router resolver: get "/cards/@card/@id": - let url = "https://cards.twitter.com/cards/$1/$2" % [@"card", @"id"] - respResolved(await resolve(url, cookiePrefs()), "card") + let + prefs = cookiePrefs() + url = "https://cards.twitter.com/cards/$1/$2" % [@"card", @"id"] + respResolved(await resolve(url, prefs), "card", prefs) get "/t.co/@url": - let url = "https://t.co/" & @"url" - respResolved(await resolve(url, cookiePrefs()), "t.co") + let + prefs = cookiePrefs() + url = "https://t.co/" & @"url" + respResolved(await resolve(url, prefs), "t.co", prefs) diff --git a/src/views/mastoapi.nim b/src/views/mastoapi.nim index e4e0497..9b81896 100644 --- a/src/views/mastoapi.nim +++ b/src/views/mastoapi.nim @@ -3,8 +3,7 @@ import strutils, strformat, options, json, sequtils, times, math import ".."/[types, formatters, utils] proc formatTweetForMastoAPI*(tweet: Tweet, cfg: Config, prefs: Prefs): string = - var content = replaceUrls(tweet.text, prefs) - content = content.replace("href=\"/", &"href=\"{getUrlPrefix(cfg)}/") + var content = replaceUrls(tweet.text, prefs, absolute=getUrlPrefix(cfg)) if tweet.poll.isSome(): let poll = get(tweet.poll)