mirror of
https://github.com/zedeus/nitter.git
synced 2026-03-05 13:30:19 -05:00
@@ -22,7 +22,12 @@ redisMaxConnections = 30
|
|||||||
[Config]
|
[Config]
|
||||||
hmacKey = "secretkey" # random key for cryptographic signing of video urls
|
hmacKey = "secretkey" # random key for cryptographic signing of video urls
|
||||||
base64Media = false # use base64 encoding for proxied media urls
|
base64Media = false # use base64 encoding for proxied media urls
|
||||||
enableRSS = true # set this to false to disable RSS feeds
|
enableRSS = true # master switch, set to false to disable all RSS feeds
|
||||||
|
enableRSSUserTweets = true # /@user/rss
|
||||||
|
enableRSSUserReplies = true # /@user/with_replies/rss
|
||||||
|
enableRSSUserMedia = true # /@user/media/rss
|
||||||
|
enableRSSSearch = true # /search/rss and /@user/search/rss
|
||||||
|
enableRSSList = true # list RSS feeds
|
||||||
enableDebug = false # enable request logs and debug endpoints (/.sessions)
|
enableDebug = false # enable request logs and debug endpoints (/.sessions)
|
||||||
proxy = "" # http/https url, SOCKS proxies are not supported
|
proxy = "" # http/https url, SOCKS proxies are not supported
|
||||||
proxyAuth = ""
|
proxyAuth = ""
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ proc get*[T](config: parseCfg.Config; section, key: string; default: T): T =
|
|||||||
proc getConfig*(path: string): (Config, parseCfg.Config) =
|
proc getConfig*(path: string): (Config, parseCfg.Config) =
|
||||||
var cfg = loadConfig(path)
|
var cfg = loadConfig(path)
|
||||||
|
|
||||||
|
let masterRss = cfg.get("Config", "enableRSS", true)
|
||||||
|
|
||||||
let conf = Config(
|
let conf = Config(
|
||||||
# Server
|
# Server
|
||||||
address: cfg.get("Server", "address", "0.0.0.0"),
|
address: cfg.get("Server", "address", "0.0.0.0"),
|
||||||
@@ -37,7 +39,11 @@ proc getConfig*(path: string): (Config, parseCfg.Config) =
|
|||||||
hmacKey: cfg.get("Config", "hmacKey", "secretkey"),
|
hmacKey: cfg.get("Config", "hmacKey", "secretkey"),
|
||||||
base64Media: cfg.get("Config", "base64Media", false),
|
base64Media: cfg.get("Config", "base64Media", false),
|
||||||
minTokens: cfg.get("Config", "tokenCount", 10),
|
minTokens: cfg.get("Config", "tokenCount", 10),
|
||||||
enableRss: cfg.get("Config", "enableRSS", true),
|
enableRSSUserTweets: masterRss and cfg.get("Config", "enableRSSUserTweets", true),
|
||||||
|
enableRSSUserReplies: masterRss and cfg.get("Config", "enableRSSUserReplies", true),
|
||||||
|
enableRSSUserMedia: masterRss and cfg.get("Config", "enableRSSUserMedia", true),
|
||||||
|
enableRSSSearch: masterRss and cfg.get("Config", "enableRSSSearch", true),
|
||||||
|
enableRSSList: masterRss and cfg.get("Config", "enableRSSList", true),
|
||||||
enableDebug: cfg.get("Config", "enableDebug", false),
|
enableDebug: cfg.get("Config", "enableDebug", false),
|
||||||
proxy: cfg.get("Config", "proxy", ""),
|
proxy: cfg.get("Config", "proxy", ""),
|
||||||
proxyAuth: cfg.get("Config", "proxyAuth", ""),
|
proxyAuth: cfg.get("Config", "proxyAuth", ""),
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ template respList*(list, timeline, title, vnode: typed) =
|
|||||||
|
|
||||||
let
|
let
|
||||||
html = renderList(vnode, timeline.query, list)
|
html = renderList(vnode, timeline.query, list)
|
||||||
rss = &"""/i/lists/{@"id"}/rss"""
|
rss = if cfg.enableRSSList: &"""/i/lists/{@"id"}/rss""" else: ""
|
||||||
|
|
||||||
resp renderMain(html, request, cfg, prefs, titleText=title, rss=rss, banner=list.banner)
|
resp renderMain(html, request, cfg, prefs, titleText=title, rss=rss, banner=list.banner)
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,8 @@ template respRss*(rss, page) =
|
|||||||
proc createRssRouter*(cfg: Config) =
|
proc createRssRouter*(cfg: Config) =
|
||||||
router rss:
|
router rss:
|
||||||
get "/search/rss":
|
get "/search/rss":
|
||||||
cond cfg.enableRss
|
if not cfg.enableRSSSearch:
|
||||||
|
resp Http403, showError("RSS feed is disabled", cfg)
|
||||||
if @"q".len > 200:
|
if @"q".len > 200:
|
||||||
resp Http400, showError("Search input too long.", cfg)
|
resp Http400, showError("Search input too long.", cfg)
|
||||||
|
|
||||||
@@ -86,8 +87,9 @@ proc createRssRouter*(cfg: Config) =
|
|||||||
respRss(rss, "Search")
|
respRss(rss, "Search")
|
||||||
|
|
||||||
get "/@name/rss":
|
get "/@name/rss":
|
||||||
cond cfg.enableRss
|
|
||||||
cond '.' notin @"name"
|
cond '.' notin @"name"
|
||||||
|
if not cfg.enableRSSUserTweets:
|
||||||
|
resp Http403, showError("RSS feed is disabled", cfg)
|
||||||
let
|
let
|
||||||
prefs = requestPrefs()
|
prefs = requestPrefs()
|
||||||
name = @"name"
|
name = @"name"
|
||||||
@@ -103,9 +105,15 @@ proc createRssRouter*(cfg: Config) =
|
|||||||
respRss(rss, "User")
|
respRss(rss, "User")
|
||||||
|
|
||||||
get "/@name/@tab/rss":
|
get "/@name/@tab/rss":
|
||||||
cond cfg.enableRss
|
|
||||||
cond '.' notin @"name"
|
cond '.' notin @"name"
|
||||||
cond @"tab" in ["with_replies", "media", "search"]
|
cond @"tab" in ["with_replies", "media", "search"]
|
||||||
|
let rssEnabled = case @"tab"
|
||||||
|
of "with_replies": cfg.enableRSSUserReplies
|
||||||
|
of "media": cfg.enableRSSUserMedia
|
||||||
|
of "search": cfg.enableRSSSearch
|
||||||
|
else: false
|
||||||
|
if not rssEnabled:
|
||||||
|
resp Http403, showError("RSS feed is disabled", cfg)
|
||||||
let
|
let
|
||||||
prefs = requestPrefs()
|
prefs = requestPrefs()
|
||||||
name = @"name"
|
name = @"name"
|
||||||
@@ -132,8 +140,9 @@ proc createRssRouter*(cfg: Config) =
|
|||||||
respRss(rss, "User")
|
respRss(rss, "User")
|
||||||
|
|
||||||
get "/@name/lists/@slug/rss":
|
get "/@name/lists/@slug/rss":
|
||||||
cond cfg.enableRss
|
|
||||||
cond @"name" != "i"
|
cond @"name" != "i"
|
||||||
|
if not cfg.enableRSSList:
|
||||||
|
resp Http403, showError("RSS feed is disabled", cfg)
|
||||||
let
|
let
|
||||||
slug = decodeUrl(@"slug")
|
slug = decodeUrl(@"slug")
|
||||||
list = await getCachedList(@"name", slug)
|
list = await getCachedList(@"name", slug)
|
||||||
@@ -149,7 +158,8 @@ proc createRssRouter*(cfg: Config) =
|
|||||||
redirect(url)
|
redirect(url)
|
||||||
|
|
||||||
get "/i/lists/@id/rss":
|
get "/i/lists/@id/rss":
|
||||||
cond cfg.enableRss
|
if not cfg.enableRSSList:
|
||||||
|
resp Http403, showError("RSS feed is disabled", cfg)
|
||||||
let
|
let
|
||||||
prefs = requestPrefs()
|
prefs = requestPrefs()
|
||||||
id = @"id"
|
id = @"id"
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ proc createSearchRouter*(cfg: Config) =
|
|||||||
of tweets:
|
of tweets:
|
||||||
let
|
let
|
||||||
tweets = await getGraphTweetSearch(query, getCursor())
|
tweets = await getGraphTweetSearch(query, getCursor())
|
||||||
rss = "/search/rss?" & genQueryUrl(query)
|
rss = if cfg.enableRSSSearch: "/search/rss?" & genQueryUrl(query) else: ""
|
||||||
resp renderMain(renderTweetSearch(tweets, prefs, getPath()),
|
resp renderMain(renderTweetSearch(tweets, prefs, getPath()),
|
||||||
request, cfg, prefs, title, rss=rss)
|
request, cfg, prefs, title, rss=rss)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -138,8 +138,17 @@ proc createTimelineRouter*(cfg: Config) =
|
|||||||
profile.tweets.beginning = true
|
profile.tweets.beginning = true
|
||||||
resp $renderTimelineTweets(profile.tweets, prefs, getPath())
|
resp $renderTimelineTweets(profile.tweets, prefs, getPath())
|
||||||
|
|
||||||
|
let rssEnabled =
|
||||||
|
if @"tab".len == 0: cfg.enableRSSUserTweets
|
||||||
|
elif @"tab" == "with_replies": cfg.enableRSSUserReplies
|
||||||
|
elif @"tab" == "media": cfg.enableRSSUserMedia
|
||||||
|
elif @"tab" == "search": cfg.enableRSSSearch
|
||||||
|
else: false
|
||||||
|
|
||||||
let rss =
|
let rss =
|
||||||
if @"tab".len == 0:
|
if not rssEnabled:
|
||||||
|
""
|
||||||
|
elif @"tab".len == 0:
|
||||||
"/$1/rss" % @"name"
|
"/$1/rss" % @"name"
|
||||||
elif @"tab" == "search":
|
elif @"tab" == "search":
|
||||||
"/$1/search/rss?$2" % [@"name", genQueryUrl(query)]
|
"/$1/search/rss?$2" % [@"name", genQueryUrl(query)]
|
||||||
|
|||||||
@@ -275,7 +275,11 @@ type
|
|||||||
hmacKey*: string
|
hmacKey*: string
|
||||||
base64Media*: bool
|
base64Media*: bool
|
||||||
minTokens*: int
|
minTokens*: int
|
||||||
enableRss*: bool
|
enableRSSUserTweets*: bool
|
||||||
|
enableRSSUserReplies*: bool
|
||||||
|
enableRSSUserMedia*: bool
|
||||||
|
enableRSSSearch*: bool
|
||||||
|
enableRSSList*: bool
|
||||||
enableDebug*: bool
|
enableDebug*: bool
|
||||||
proxy*: string
|
proxy*: string
|
||||||
proxyAuth*: string
|
proxyAuth*: string
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ proc renderNavbar(cfg: Config; req: Request; rss, canonical: string): VNode =
|
|||||||
|
|
||||||
tdiv(class="nav-item right"):
|
tdiv(class="nav-item right"):
|
||||||
icon "search", title="Search", href="/search"
|
icon "search", title="Search", href="/search"
|
||||||
if cfg.enableRss and rss.len > 0:
|
if rss.len > 0:
|
||||||
icon "rss", title="RSS Feed", href=rss
|
icon "rss", title="RSS Feed", href=rss
|
||||||
icon "bird", title="Open in X", href=canonical
|
icon "bird", title="Open in X", href=canonical
|
||||||
a(href="https://liberapay.com/zedeus"): verbatim lp
|
a(href="https://liberapay.com/zedeus"): verbatim lp
|
||||||
@@ -67,7 +67,7 @@ proc renderHead*(prefs: Prefs; cfg: Config; req: Request; titleText=""; desc="";
|
|||||||
if alternate.len > 0:
|
if alternate.len > 0:
|
||||||
link(rel="alternate", href=alternate, title="View on X")
|
link(rel="alternate", href=alternate, title="View on X")
|
||||||
|
|
||||||
if cfg.enableRss and rss.len > 0:
|
if rss.len > 0:
|
||||||
link(rel="alternate", type="application/rss+xml", href=rss, title="RSS feed")
|
link(rel="alternate", type="application/rss+xml", href=rss, title="RSS feed")
|
||||||
|
|
||||||
if prefs.hlsPlayback:
|
if prefs.hlsPlayback:
|
||||||
|
|||||||
Reference in New Issue
Block a user