search.nim 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import strutils, sequtils, uri
  2. import jester
  3. import router_utils
  4. import ".."/[query, types, api, agents]
  5. import ../views/[general, search]
  6. export search
  7. proc createSearchRouter*(cfg: Config) =
  8. router search:
  9. get "/search/?":
  10. if @"q".len > 200:
  11. resp Http400, showError("Search input too long.", cfg.title)
  12. let prefs = cookiePrefs()
  13. let query = initQuery(params(request))
  14. case query.kind
  15. of users:
  16. if "," in @"q":
  17. redirect("/" & @"q")
  18. let users = await getSearch[Profile](query, @"after", getAgent())
  19. resp renderMain(renderUserSearch(users, prefs), request, cfg.title)
  20. of tweets:
  21. let tweets = await getSearch[Tweet](query, @"after", getAgent())
  22. let rss = "/search/rss?" & genQueryUrl(query)
  23. resp renderMain(renderTweetSearch(tweets, prefs, getPath()), request,
  24. cfg.title, rss=rss)
  25. else:
  26. halt Http404, showError("Invalid search", cfg.title)
  27. get "/hashtag/@hash":
  28. redirect("/search?q=" & encodeUrl("#" & @"hash"))