utils.nim 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import strutils, strformat, sequtils, uri, tables
  2. import nimcrypto, regex
  3. const
  4. key = "supersecretkey"
  5. twitterDomains = @[
  6. "twitter.com",
  7. "twimg.com",
  8. "abs.twimg.com",
  9. "pbs.twimg.com",
  10. "video.twimg.com"
  11. ]
  12. badExts = @["1500x500", "jpgn", "jpg:", "jpg_"]
  13. proc getHmac*(data: string): string =
  14. ($hmac(sha256, key, data))[0 .. 12]
  15. proc getVidUrl*(link: string): string =
  16. let
  17. sig = getHmac(link)
  18. url = encodeUrl(link)
  19. &"/video/{sig}/{url}"
  20. proc getGifUrl*(link: string): string =
  21. &"/gif/{encodeUrl(link)}"
  22. proc getPicUrl*(link: string): string =
  23. &"/pic/{encodeUrl(link)}"
  24. proc cleanFilename*(filename: string): string =
  25. const reg = re"[^A-Za-z0-9._-]"
  26. result = filename.replace(reg, "_")
  27. if badExts.anyIt(it in result):
  28. result &= ".jpg"
  29. proc filterParams*(params: Table): seq[(string, string)] =
  30. let filter = ["name", "id", "list", "referer"]
  31. toSeq(params.pairs()).filterIt(it[0] notin filter and it[1].len > 0)
  32. proc isTwitterUrl*(url: string): bool =
  33. parseUri(url).hostname in twitterDomains