nitter/src/utils.nim

53 lines
1.3 KiB
Nim
Raw Normal View History

import strutils, strformat, sequtils, uri, tables
import nimcrypto, regex
2019-06-20 14:16:20 +00:00
var hmacKey = "secretkey"
const
https* = "https://"
twimg* = "pbs.twimg.com/"
badJpgExts = @["1500x500", "jpgn", "jpg:", "jpg_", "_jpg"]
badPngExts = @["pngn", "png:", "png_", "_png"]
twitterDomains = @[
"twitter.com",
2020-06-01 00:25:39 +00:00
"pic.twitter.com",
"twimg.com",
"abs.twimg.com",
"pbs.twimg.com",
"video.twimg.com"
]
proc setHmacKey*(key: string) =
hmacKey = key
2019-06-20 14:16:20 +00:00
proc getHmac*(data: string): string =
($hmac(sha256, hmacKey, data))[0 .. 12]
2019-06-20 14:16:20 +00:00
proc getVidUrl*(link: string): string =
2020-06-01 19:53:21 +00:00
if link.len == 0: return
2019-06-20 14:16:20 +00:00
let
sig = getHmac(link)
url = encodeUrl(link)
&"/video/{sig}/{url}"
proc getPicUrl*(link: string): string =
&"/pic/{encodeUrl(link)}"
proc cleanFilename*(filename: string): string =
const reg = re"[^A-Za-z0-9._-]"
2019-10-21 05:22:24 +00:00
result = filename.replace(reg, "_")
2019-10-21 06:31:02 +00:00
if badJpgExts.anyIt(it in result):
2019-10-21 05:22:24 +00:00
result &= ".jpg"
2019-10-21 06:31:02 +00:00
elif badPngExts.anyIt(it in result):
result &= ".png"
proc filterParams*(params: Table): seq[(string, string)] =
2020-01-07 02:00:16 +00:00
let filter = ["name", "id", "list", "referer", "scroll"]
2019-09-19 23:52:08 +00:00
toSeq(params.pairs()).filterIt(it[0] notin filter and it[1].len > 0)
proc isTwitterUrl*(uri: Uri): bool =
uri.hostname in twitterDomains
proc isTwitterUrl*(url: string): bool =
parseUri(url).hostname in twitterDomains