utils.nim 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. proc mimetype*(filename: string): string =
  13. if ".png" in filename:
  14. "image/" & "png"
  15. elif ".jpg" in filename or ".jpeg" in filename or "1500x500" in filename:
  16. "image/" & "jpg"
  17. elif ".mp4" in filename:
  18. "video/" & "mp4"
  19. else:
  20. "text/plain"
  21. proc getHmac*(data: string): string =
  22. ($hmac(sha256, key, data))[0 .. 12]
  23. proc getVidUrl*(link: string): string =
  24. let
  25. sig = getHmac(link)
  26. url = encodeUrl(link)
  27. &"/video/{sig}/{url}"
  28. proc getGifUrl*(link: string): string =
  29. &"/gif/{encodeUrl(link)}"
  30. proc getPicUrl*(link: string): string =
  31. &"/pic/{encodeUrl(link)}"
  32. proc cleanFilename*(filename: string): string =
  33. const reg = re"[^A-Za-z0-9._-]"
  34. filename.replace(reg, "_")
  35. proc filterParams*(params: Table): seq[(string, string)] =
  36. let filter = ["name", "id"]
  37. toSeq(params.pairs()).filterIt(it[0] notin filter)
  38. proc isTwitterUrl*(url: string): bool =
  39. parseUri(url).hostname in twitterDomains