From 51b54852dcf617c6131376a469c537ab6b8326e3 Mon Sep 17 00:00:00 2001 From: Zed Date: Sat, 6 Dec 2025 05:15:01 +0100 Subject: [PATCH] Add preliminary support for nitter-proxy --- nitter.example.conf | 1 + src/apiutils.nim | 13 ++++++++++++- src/config.nim | 1 + src/nitter.nim | 1 + src/types.nim | 1 + 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/nitter.example.conf b/nitter.example.conf index dfdaf50..7e4c846 100644 --- a/nitter.example.conf +++ b/nitter.example.conf @@ -26,6 +26,7 @@ enableRSS = true # set this to false to disable RSS feeds enableDebug = false # enable request logs and debug endpoints (/.sessions) proxy = "" # http/https url, SOCKS proxies are not supported proxyAuth = "" +apiProxy = "" # nitter-proxy host, e.g. localhost:7000 disableTid = false # enable this if cookie-based auth is failing # Change default preferences here, see src/prefs_impl.nim for a complete list diff --git a/src/apiutils.nim b/src/apiutils.nim index 7a49e3e..ddb5027 100644 --- a/src/apiutils.nim +++ b/src/apiutils.nim @@ -13,10 +13,17 @@ const var pool: HttpPool disableTid: bool + apiProxy: string proc setDisableTid*(disable: bool) = disableTid = disable +proc setApiProxy*(url: string) = + if url.len > 0: + apiProxy = url.strip(chars={'/'}) & "/" + if "http" notin apiProxy: + apiProxy = "http://" & apiProxy + proc toUrl(req: ApiReq; sessionKind: SessionKind): Uri = case sessionKind of oauth: @@ -99,7 +106,11 @@ template fetchImpl(result, fetchBody) {.dirty.} = var resp: AsyncResponse pool.use(await genHeaders(session, url)): template getContent = - resp = await c.get($url) + # TODO: this is a temporary simple implementation + if apiProxy.len > 0: + resp = await c.get(($url).replace("https://", apiProxy)) + else: + resp = await c.get($url) result = await resp.body getContent() diff --git a/src/config.nim b/src/config.nim index 571508b..2b38d86 100644 --- a/src/config.nim +++ b/src/config.nim @@ -41,6 +41,7 @@ proc getConfig*(path: string): (Config, parseCfg.Config) = enableDebug: cfg.get("Config", "enableDebug", false), proxy: cfg.get("Config", "proxy", ""), proxyAuth: cfg.get("Config", "proxyAuth", ""), + apiProxy: cfg.get("Config", "apiProxy", ""), disableTid: cfg.get("Config", "disableTid", false) ) diff --git a/src/nitter.nim b/src/nitter.nim index e6d66ab..91a3a9f 100644 --- a/src/nitter.nim +++ b/src/nitter.nim @@ -37,6 +37,7 @@ setHmacKey(cfg.hmacKey) setProxyEncoding(cfg.base64Media) setMaxHttpConns(cfg.httpMaxConns) setHttpProxy(cfg.proxy, cfg.proxyAuth) +setApiProxy(cfg.apiProxy) setDisableTid(cfg.disableTid) initAboutPage(cfg.staticDir) diff --git a/src/types.nim b/src/types.nim index 815e223..c994148 100644 --- a/src/types.nim +++ b/src/types.nim @@ -275,6 +275,7 @@ type enableDebug*: bool proxy*: string proxyAuth*: string + apiProxy*: string disableTid*: bool rssCacheTime*: int