nitter/src/utils.nim

49 lines
1.2 KiB
Nim
Raw Normal View History

import strutils, strformat, sequtils, uri, tables
import nimcrypto, regex
2019-06-20 14:16:20 +00:00
const
key = "supersecretkey"
twitterDomains = @[
"twitter.com",
"twimg.com",
"abs.twimg.com",
"pbs.twimg.com",
"video.twimg.com"
]
2019-06-20 14:16:20 +00:00
proc mimetype*(filename: string): string =
if ".png" in filename:
2019-06-23 12:34:19 +00:00
"image/" & "png"
elif ".jpg" in filename or ".jpeg" in filename or "1500x500" in filename:
2019-06-23 12:34:19 +00:00
"image/" & "jpg"
2019-06-20 14:16:20 +00:00
elif ".mp4" in filename:
2019-06-23 12:34:19 +00:00
"video/" & "mp4"
2019-06-20 14:16:20 +00:00
else:
2019-06-23 12:34:19 +00:00
"text/plain"
2019-06-20 14:16:20 +00:00
proc getHmac*(data: string): string =
($hmac(sha256, key, data))[0 .. 12]
proc getVidUrl*(link: string): string =
2019-06-20 14:16:20 +00:00
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"]
2019-09-19 23:52:08 +00:00
toSeq(params.pairs()).filterIt(it[0] notin filter and it[1].len > 0)
proc isTwitterUrl*(url: string): bool =
parseUri(url).hostname in twitterDomains