Add video proxy support

This commit is contained in:
Zed 2019-08-19 20:53:47 +02:00
parent f5fef0ff3a
commit ce6dace1d7
4 changed files with 20 additions and 6 deletions

View file

@ -1,7 +1,7 @@
import strutils, strformat, htmlgen, xmltree, times
import regex
import types
import types, utils
from unicode import Rune, `$`
@ -74,6 +74,12 @@ proc stripTwitterUrls*(text: string): string =
result = result.replace(picRegex, "")
result = result.replace(ellipsisRegex, "")
proc proxifyVideo*(manifest: string; proxy: bool): string =
proc cb(m: RegexMatch; s: string): string =
result = "https://video.twimg.com" & s[m.group(0)[0]]
if proxy: result = result.getSigUrl("video")
result = manifest.replace(re"(.+(.ts|.m3u8|.vmap))", cb)
proc getUserpic*(userpic: string; style=""): string =
let pic = userpic.replace(re"_(normal|bigger|mini|200x200|400x400)(\.[A-z]+)$", "$2")
pic.replace(re"(\.[A-z]+)$", style & "$1")

View file

@ -182,16 +182,19 @@ routes:
get "/video/@sig/@url":
cond "http" in @"url"
cond "video.twimg" in @"url"
let url = decodeUrl(@"url")
var url = decodeUrl(@"url")
let prefs = cookiePrefs()
if getHmac(url) != @"sig":
resp showError("Failed to verify signature", cfg.title)
let client = newAsyncHttpClient()
let video = await client.getContent(url)
client.close()
var content = await client.getContent(url)
resp video, mimetype(url)
if ".m3u8" in url:
content = proxifyVideo(content, prefs.proxyVideos)
client.close()
resp content, mimetype(url)
runForever()

View file

@ -40,6 +40,10 @@ const prefList*: Table[string, seq[Pref]] = {
label: "Enable hls video streaming (requires JavaScript)",
defaultState: false),
Pref(kind: checkbox, name: "proxyVideos",
label: "Proxy video streaming through the server (might be slow)",
defaultState: false),
Pref(kind: checkbox, name: "muteVideos",
label: "Mute videos by default",
defaultState: false),

View file

@ -53,6 +53,7 @@ db("cache.db", "", "", ""):
Prefs* = object
hlsPlayback*: bool
mp4Playback*: bool
proxyVideos*: bool
muteVideos*: bool
autoplayGifs*: bool
hideTweetStats*: bool