Remove user agents
This commit is contained in:
		
							parent
							
								
									e0b141daf9
								
							
						
					
					
						commit
						43b0bdc08a
					
				| 
						 | 
				
			
			@ -1,70 +0,0 @@
 | 
			
		|||
# SPDX-License-Identifier: AGPL-3.0-only
 | 
			
		||||
import random, strformat, strutils, sequtils
 | 
			
		||||
 | 
			
		||||
randomize()
 | 
			
		||||
 | 
			
		||||
const rvs = [
 | 
			
		||||
  "11.0", "40.0", "42.0", "43.0", "47.0", "50.0", "52.0", "53.0", "54.0",
 | 
			
		||||
  "61.0", "66.0", "67.0", "69.0", "70.0"
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
proc rv(): string =
 | 
			
		||||
  if rand(10) < 1: ""
 | 
			
		||||
  else: "; rv:" & sample(rvs)
 | 
			
		||||
 | 
			
		||||
# OS
 | 
			
		||||
 | 
			
		||||
const enc = ["; U", "; N", "; I", ""]
 | 
			
		||||
 | 
			
		||||
proc linux(): string =
 | 
			
		||||
  const
 | 
			
		||||
    window = ["X11", "Wayland", "Unknown"]
 | 
			
		||||
    arch = ["i686", "x86_64", "arm"]
 | 
			
		||||
    distro = ["", "; Ubuntu/14.10", "; Ubuntu/16.10", "; Ubuntu/19.10",
 | 
			
		||||
              "; Ubuntu", "; Fedora"]
 | 
			
		||||
  sample(window) & sample(enc) & "; Linux " & sample(arch) & sample(distro)
 | 
			
		||||
 | 
			
		||||
proc windows(): string =
 | 
			
		||||
  const
 | 
			
		||||
    nt = ["5.1", "5.2", "6.0", "6.1", "6.2", "6.3", "6.4", "9.0", "10.0"]
 | 
			
		||||
    arch = ["; WOW64", "; Win64; x64", "; ARM", ""]
 | 
			
		||||
    trident = ["", "; Trident/5.0", "; Trident/6.0", "; Trident/7.0"]
 | 
			
		||||
  "Windows " & sample(nt) & sample(enc) & sample(arch) & sample(trident)
 | 
			
		||||
 | 
			
		||||
const macs = toSeq(6..15).mapIt($it) & @["14_4", "10_1", "9_3"]
 | 
			
		||||
 | 
			
		||||
proc mac(): string =
 | 
			
		||||
  "Macintosh; Intel Mac OS X 10_" & sample(macs) & sample(enc)
 | 
			
		||||
 | 
			
		||||
# Browser
 | 
			
		||||
 | 
			
		||||
proc presto(): string =
 | 
			
		||||
  const p = ["2.12.388", "2.12.407", "22.9.168", "2.9.201", "2.8.131", "2.7.62",
 | 
			
		||||
             "2.6.30", "2.5.24"]
 | 
			
		||||
  const v = ["10.0", "11.0", "11.1", "11.5", "11.6", "12.00", "12.14", "12.16"]
 | 
			
		||||
  &"Presto/{sample(p)} Version/{sample(v)}"
 | 
			
		||||
 | 
			
		||||
# Samples
 | 
			
		||||
 | 
			
		||||
proc product(): string =
 | 
			
		||||
  const opera = ["Opera/9.80", "Opera/12.0"]
 | 
			
		||||
  if rand(20) < 1: "Mozilla/5.0"
 | 
			
		||||
  else: sample(opera)
 | 
			
		||||
 | 
			
		||||
proc os(): string =
 | 
			
		||||
  let r = rand(10)
 | 
			
		||||
  let os =
 | 
			
		||||
    if r < 6: windows()
 | 
			
		||||
    elif r < 9: linux()
 | 
			
		||||
    else: mac()
 | 
			
		||||
  &"({os}{rv()})"
 | 
			
		||||
 | 
			
		||||
proc browser(prod: string): string =
 | 
			
		||||
  if "Opera" in prod: presto()
 | 
			
		||||
  else: "like Gecko"
 | 
			
		||||
 | 
			
		||||
# Agent
 | 
			
		||||
 | 
			
		||||
proc getAgent*(): string =
 | 
			
		||||
  let prod = product()
 | 
			
		||||
  &"{prod} {os()} {browser(prod)}"
 | 
			
		||||
| 
						 | 
				
			
			@ -5,7 +5,7 @@ import asynchttpserver, asyncstreams, asyncfile, asyncnet
 | 
			
		|||
import jester
 | 
			
		||||
 | 
			
		||||
import router_utils
 | 
			
		||||
import ".."/[types, formatters, agents, utils]
 | 
			
		||||
import ".."/[types, formatters, utils]
 | 
			
		||||
 | 
			
		||||
export asynchttpserver, asyncstreams, asyncfile, asyncnet
 | 
			
		||||
export httpclient, os, strutils, asyncstreams, base64, re
 | 
			
		||||
| 
						 | 
				
			
			@ -14,10 +14,8 @@ const
 | 
			
		|||
  m3u8Mime* = "application/vnd.apple.mpegurl"
 | 
			
		||||
  maxAge* = "max-age=604800"
 | 
			
		||||
 | 
			
		||||
let mediaAgent* = getAgent()
 | 
			
		||||
 | 
			
		||||
proc safeFetch*(url, agent: string): Future[string] {.async.} =
 | 
			
		||||
  let client = newAsyncHttpClient(userAgent=agent)
 | 
			
		||||
proc safeFetch*(url: string): Future[string] {.async.} =
 | 
			
		||||
  let client = newAsyncHttpClient()
 | 
			
		||||
  try: result = await client.getContent(url)
 | 
			
		||||
  except: discard
 | 
			
		||||
  finally: client.close()
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +32,7 @@ proc proxyMedia*(req: jester.Request; url: string): Future[HttpCode] {.async.} =
 | 
			
		|||
  result = Http200
 | 
			
		||||
  let
 | 
			
		||||
    request = req.getNativeReq()
 | 
			
		||||
    client = newAsyncHttpClient(userAgent=mediaAgent)
 | 
			
		||||
    client = newAsyncHttpClient()
 | 
			
		||||
 | 
			
		||||
  try:
 | 
			
		||||
    let res = await client.get(url)
 | 
			
		||||
| 
						 | 
				
			
			@ -116,14 +114,14 @@ proc createMediaRouter*(cfg: Config) =
 | 
			
		|||
 | 
			
		||||
      var content: string
 | 
			
		||||
      if ".vmap" in url:
 | 
			
		||||
        let m3u8 = getM3u8Url(await safeFetch(url, mediaAgent))
 | 
			
		||||
        let m3u8 = getM3u8Url(await safeFetch(url))
 | 
			
		||||
        if m3u8.len > 0:
 | 
			
		||||
          content = await safeFetch(url, mediaAgent)
 | 
			
		||||
          content = await safeFetch(url)
 | 
			
		||||
        else:
 | 
			
		||||
          resp Http404
 | 
			
		||||
 | 
			
		||||
      if ".m3u8" in url:
 | 
			
		||||
        let vid = await safeFetch(url, mediaAgent)
 | 
			
		||||
        let vid = await safeFetch(url)
 | 
			
		||||
        content = proxifyVideo(vid, cookiePref(proxyVideos))
 | 
			
		||||
 | 
			
		||||
      resp content, m3u8Mime
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
import asyncdispatch, httpclient, times, sequtils, json, random
 | 
			
		||||
import strutils, tables
 | 
			
		||||
import zippy
 | 
			
		||||
import types, agents, consts, http_pool
 | 
			
		||||
import types, consts, http_pool
 | 
			
		||||
 | 
			
		||||
const
 | 
			
		||||
  maxConcurrentReqs = 5  # max requests at a time per token, to avoid race conditions
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +65,6 @@ proc fetchToken(): Future[Token] {.async.} =
 | 
			
		|||
    "accept-encoding": "gzip",
 | 
			
		||||
    "accept-language": "en-US,en;q=0.5",
 | 
			
		||||
    "connection": "keep-alive",
 | 
			
		||||
    "user-agent": getAgent(),
 | 
			
		||||
    "authorization": auth
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue