| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import strutils, strformat, sequtils, uri, tables
- import nimcrypto, regex
- const
- key = "supersecretkey"
- twitterDomains = @[
- "twitter.com",
- "twimg.com",
- "abs.twimg.com",
- "pbs.twimg.com",
- "video.twimg.com"
- ]
- proc mimetype*(filename: string): string =
- if ".png" in filename:
- "image/" & "png"
- elif ".jpg" in filename or ".jpeg" in filename or "1500x500" in filename:
- "image/" & "jpg"
- elif ".mp4" in filename:
- "video/" & "mp4"
- else:
- "text/plain"
- proc getHmac*(data: string): string =
- ($hmac(sha256, key, data))[0 .. 12]
- proc getVidUrl*(link: string): string =
- let
- sig = getHmac(link)
- url = encodeUrl(link)
- &"/video/{sig}/{url}"
- proc getGifUrl*(link: string): string =
- &"/gif/{encodeUrl(link)}"
- proc getPicUrl*(link: string): string =
- &"/pic/{encodeUrl(link)}"
- proc cleanFilename*(filename: string): string =
- const reg = re"[^A-Za-z0-9._-]"
- filename.replace(reg, "_")
- proc filterParams*(params: Table): seq[(string, string)] =
- let filter = ["name", "id"]
- toSeq(params.pairs()).filterIt(it[0] notin filter)
- proc isTwitterUrl*(url: string): bool =
- parseUri(url).hostname in twitterDomains
|