mirror of
https://gitea.invidious.io/iv-org/invidious.git
synced 2024-08-15 00:53:41 +00:00
Replace signature function with generic catchall
This commit is contained in:
parent
225625a0fb
commit
13ef4440d0
2 changed files with 19 additions and 70 deletions
|
@ -175,54 +175,24 @@ def search(query, client)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def swap(a, b)
|
def splice(a, b)
|
||||||
c = a[0]
|
c = a[0]
|
||||||
a[0] = a[b % a.size]
|
a[0] = a[b % a.size]
|
||||||
a[b % a.size] = c
|
a[b % a.size] = c
|
||||||
return a
|
return a
|
||||||
end
|
end
|
||||||
|
|
||||||
def decrypt_signature(a, base)
|
def decrypt_signature(a)
|
||||||
a = a.split("")
|
a = a.split("")
|
||||||
|
|
||||||
case base
|
a.delete_at(0..1)
|
||||||
when "vflG9lb96"
|
a = splice(a, 2)
|
||||||
a = swap(a, 26)
|
a = splice(a, 51)
|
||||||
a.reverse!
|
a = splice(a, 9)
|
||||||
a = swap(a, 8)
|
|
||||||
a = swap(a, 61)
|
|
||||||
when "vflxuxnEY"
|
|
||||||
a.delete_at(0..2)
|
|
||||||
a.reverse!
|
|
||||||
c = a[0]
|
|
||||||
a[0] = a[49 % a.size]
|
|
||||||
a[49] = c
|
|
||||||
when "vflAXQwEj"
|
|
||||||
a = swap(a, 26)
|
|
||||||
a.reverse!
|
|
||||||
a = swap(a, 8)
|
|
||||||
a = swap(a, 61)
|
|
||||||
when "vflNpPGQq"
|
|
||||||
a = swap(a, 26)
|
|
||||||
a.reverse!
|
|
||||||
a = swap(a, 8)
|
|
||||||
a = swap(a, 61)
|
|
||||||
when "vflCCoUi2"
|
|
||||||
a = swap(a, 26)
|
|
||||||
a.reverse!
|
|
||||||
a = swap(a, 8)
|
|
||||||
a = swap(a, 61)
|
|
||||||
when "vflg4IfMn"
|
|
||||||
a = swap(a, 6)
|
|
||||||
a = swap(a, 64)
|
|
||||||
a = swap(a, 25)
|
|
||||||
a = swap(a, 53)
|
|
||||||
a.delete_at(0..1)
|
a.delete_at(0..1)
|
||||||
a.reverse!
|
a.reverse!
|
||||||
|
a = splice(a, 15)
|
||||||
a.delete_at(0..2)
|
a.delete_at(0..2)
|
||||||
else
|
|
||||||
raise "Could not decrypt signature for player #{base}"
|
|
||||||
end
|
|
||||||
|
|
||||||
return a.join("")
|
return a.join("")
|
||||||
end
|
end
|
||||||
|
|
|
@ -177,34 +177,9 @@ get "/watch" do |env|
|
||||||
fmt_stream << HTTP::Params.parse(string)
|
fmt_stream << HTTP::Params.parse(string)
|
||||||
end
|
end
|
||||||
|
|
||||||
base = nil
|
signature = false
|
||||||
if fmt_stream[0]? && fmt_stream[0]["s"]?
|
if fmt_stream[0]? && fmt_stream[0]["s"]?
|
||||||
base = video.html.xpath_node(%q(//script[@name="player/base"]))
|
signature = true
|
||||||
|
|
||||||
if !base
|
|
||||||
base = video.html.xpath_node(%q(//script[@name="player_ias/base"]))
|
|
||||||
end
|
|
||||||
|
|
||||||
if !base
|
|
||||||
error_message = "Could not find signature for #{video.id}"
|
|
||||||
next templated "error"
|
|
||||||
end
|
|
||||||
|
|
||||||
base = base["src"]
|
|
||||||
base = base.split("/")[3].split("-")[1]
|
|
||||||
|
|
||||||
begin
|
|
||||||
decrypt_signature(fmt_stream[0]["s"], base)
|
|
||||||
rescue ex
|
|
||||||
error_message = ex.message
|
|
||||||
next templated "error"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
fmt_stream.each do |fmt|
|
|
||||||
if base
|
|
||||||
fmt["url"] += "&signature=" + decrypt_signature(fmt["s"], base)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# We want lowest quality first
|
# We want lowest quality first
|
||||||
|
@ -217,9 +192,13 @@ get "/watch" do |env|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if signature
|
||||||
adaptive_fmts.each do |fmt|
|
adaptive_fmts.each do |fmt|
|
||||||
if base
|
fmt["url"] += "&signature=" + decrypt_signature(fmt["s"])
|
||||||
fmt["url"] += "&signature=" + decrypt_signature(fmt["s"], base)
|
end
|
||||||
|
|
||||||
|
fmt_stream.each do |fmt|
|
||||||
|
fmt["url"] += "&signature=" + decrypt_signature(fmt["s"])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue