nitter.nim 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import asyncdispatch, strformat
  2. from net import Port
  3. import jester
  4. import types, config, prefs, formatters, redis_cache, http_pool, tokens
  5. import views/[general, about]
  6. import routes/[
  7. preferences, timeline, status, media, search, rss, list,
  8. unsupported, embed, resolver, router_utils]
  9. const configPath {.strdefine.} = "./nitter.conf"
  10. let (cfg, fullCfg) = getConfig(configPath)
  11. when defined(release):
  12. import logging
  13. # Silence Jester's query warning
  14. addHandler(newConsoleLogger())
  15. setLogFilter(lvlError)
  16. let http = if cfg.useHttps: "https" else: "http"
  17. stdout.write &"Starting Nitter at {http}://{cfg.hostname}\n"
  18. stdout.flushFile
  19. updateDefaultPrefs(fullCfg)
  20. setCacheTimes(cfg)
  21. setHmacKey(cfg.hmacKey)
  22. setProxyEncoding(cfg.base64Media)
  23. setMaxHttpConns(100)
  24. waitFor initRedisPool(cfg)
  25. stdout.write &"Connected to Redis at {cfg.redisHost}:{cfg.redisPort}\n"
  26. stdout.flushFile
  27. asyncCheck initTokenPool(cfg)
  28. createUnsupportedRouter(cfg)
  29. createResolverRouter(cfg)
  30. createPrefRouter(cfg)
  31. createTimelineRouter(cfg)
  32. createListRouter(cfg)
  33. createStatusRouter(cfg)
  34. createSearchRouter(cfg)
  35. createMediaRouter(cfg)
  36. createEmbedRouter(cfg)
  37. createRssRouter(cfg)
  38. settings:
  39. port = Port(cfg.port)
  40. staticDir = cfg.staticDir
  41. bindAddr = cfg.address
  42. routes:
  43. get "/":
  44. resp renderMain(renderSearch(), request, cfg, themePrefs())
  45. get "/about":
  46. resp renderMain(renderAbout(), request, cfg, themePrefs())
  47. get "/explore":
  48. redirect("/about")
  49. get "/help":
  50. redirect("/about")
  51. get "/i/redirect":
  52. let url = decodeUrl(@"url")
  53. if url.len == 0: resp Http404
  54. redirect(replaceUrl(url, cookiePrefs()))
  55. error Http404:
  56. resp Http404, showError("Page not found", cfg)
  57. extend unsupported, ""
  58. extend preferences, ""
  59. extend resolver, ""
  60. extend rss, ""
  61. extend search, ""
  62. extend timeline, ""
  63. extend list, ""
  64. extend status, ""
  65. extend media, ""
  66. extend embed, ""