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