router_utils.nim 1001 B

12345678910111213141516171819202122232425262728293031
  1. import strutils, sequtils, asyncdispatch, httpclient
  2. from jester import Request
  3. import ../utils, ../prefs
  4. export utils, prefs
  5. template savePref*(pref, value: string; req: Request; expire=false): typed =
  6. if not expire or pref in cookies(req):
  7. setCookie(pref, value, daysForward(when expire: -10 else: 360),
  8. httpOnly=true, secure=cfg.useHttps)
  9. template cookiePrefs*(): untyped {.dirty.} =
  10. getPrefs(cookies(request))
  11. template getPath*(): untyped {.dirty.} =
  12. $(parseUri(request.path) ? filterParams(request.params))
  13. template refPath*(): untyped {.dirty.} =
  14. if @"referer".len > 0: @"referer" else: "/"
  15. proc getNames*(name: string): seq[string] =
  16. name.strip(chars={'/'}).split(",").filterIt(it.len > 0)
  17. proc safeClose*(client: AsyncHttpClient) =
  18. try: client.close()
  19. except: discard
  20. proc safeFetch*(url: string): Future[string] {.async.} =
  21. let client = newAsyncHttpClient()
  22. try: result = await client.getContent(url)
  23. except: discard
  24. finally: client.safeClose()