Revert "Feat: User supplied po_token and visitor_data"
Some checks failed
Invidious CI / build (push) Failing after 14s
Some checks failed
Invidious CI / build (push) Failing after 14s
This reverts commit b3a8866022
.
This commit is contained in:
parent
7689251158
commit
8a3fd5751a
8 changed files with 21 additions and 63 deletions
|
@ -45,8 +45,6 @@ struct ConfigPreferences
|
|||
property vr_mode : Bool = true
|
||||
property show_nick : Bool = true
|
||||
property save_player_pos : Bool = false
|
||||
property po_token : String = ""
|
||||
property visitor_data : String = ""
|
||||
|
||||
def to_tuple
|
||||
{% begin %}
|
||||
|
@ -89,8 +87,6 @@ class Config
|
|||
|
||||
# Used to tell Invidious it is behind a proxy, so links to resources should be https://
|
||||
property https_only : Bool?
|
||||
# Enable or disable CSP
|
||||
property csp : Bool? = true
|
||||
# HMAC signing key for CSRF tokens and verifying pubsub subscriptions
|
||||
property hmac_key : String = ""
|
||||
# Domain to be used for links to resources on the site where an absolute URL is required
|
||||
|
|
|
@ -86,12 +86,6 @@ module Invidious::Routes::PreferencesRoute
|
|||
show_nick ||= "off"
|
||||
show_nick = show_nick == "on"
|
||||
|
||||
po_token = env.params.body["po_token"]?.try &.as(String)
|
||||
po_token ||= CONFIG.default_user_preferences.po_token
|
||||
|
||||
visitor_data = env.params.body["visitor_data"]?.try &.as(String)
|
||||
visitor_data ||= CONFIG.default_user_preferences.visitor_data
|
||||
|
||||
comments = [] of String
|
||||
2.times do |i|
|
||||
comments << (env.params.body["comments[#{i}]"]?.try &.as(String) || CONFIG.default_user_preferences.comments[i])
|
||||
|
@ -186,8 +180,6 @@ module Invidious::Routes::PreferencesRoute
|
|||
vr_mode: vr_mode,
|
||||
show_nick: show_nick,
|
||||
save_player_pos: save_player_pos,
|
||||
po_token: po_token,
|
||||
visitor_data: visitor_data,
|
||||
}.to_json)
|
||||
|
||||
if user = env.get? "user"
|
||||
|
|
|
@ -3,9 +3,6 @@
|
|||
module Invidious::Routes::Watch
|
||||
def self.handle(env)
|
||||
locale = env.get("preferences").as(Preferences).locale
|
||||
user_po_token = env.get("preferences").as(Preferences).po_token
|
||||
user_visitor_data = env.get("preferences").as(Preferences).visitor_data
|
||||
|
||||
region = env.params.query["region"]?
|
||||
|
||||
if env.params.query.to_s.includes?("%20") || env.params.query.to_s.includes?("+")
|
||||
|
@ -55,7 +52,7 @@ module Invidious::Routes::Watch
|
|||
env.params.query.delete_all("listen")
|
||||
|
||||
begin
|
||||
video = get_video(id, region: params.region, po_token: user_po_token, visitor_data: user_visitor_data)
|
||||
video = get_video(id, region: params.region)
|
||||
rescue ex : NotFoundException
|
||||
LOGGER.error("get_video not found: #{id} : #{ex.message}")
|
||||
return error_template(404, ex)
|
||||
|
|
|
@ -57,10 +57,6 @@ struct Preferences
|
|||
property volume : Int32 = CONFIG.default_user_preferences.volume
|
||||
property save_player_pos : Bool = CONFIG.default_user_preferences.save_player_pos
|
||||
|
||||
@[YAML::Field(converter: Preferences::ProcessString)]
|
||||
property po_token : String = ""
|
||||
property visitor_data : String = ""
|
||||
|
||||
module BoolToString
|
||||
def self.to_json(value : String, json : JSON::Builder)
|
||||
json.string value
|
||||
|
|
|
@ -294,7 +294,7 @@ struct Video
|
|||
predicate_bool upcoming, isUpcoming
|
||||
end
|
||||
|
||||
def get_video(id, refresh = true, region = nil, force_refresh = false, po_token = "", visitor_data = nil)
|
||||
def get_video(id, refresh = true, region = nil, force_refresh = false)
|
||||
if (video = Invidious::Database::Videos.select(id)) && !region
|
||||
# If record was last updated over 10 minutes ago, or video has since premiered,
|
||||
# refresh (expire param in response lasts for 6 hours)
|
||||
|
@ -304,7 +304,7 @@ def get_video(id, refresh = true, region = nil, force_refresh = false, po_token
|
|||
force_refresh ||
|
||||
video.schema_version != Video::SCHEMA_VERSION # cache control
|
||||
begin
|
||||
video = fetch_video(id, region, po_token, visitor_data)
|
||||
video = fetch_video(id, region)
|
||||
Invidious::Database::Videos.insert(video)
|
||||
rescue ex
|
||||
Invidious::Database::Videos.delete(id)
|
||||
|
@ -312,7 +312,7 @@ def get_video(id, refresh = true, region = nil, force_refresh = false, po_token
|
|||
end
|
||||
end
|
||||
else
|
||||
video = fetch_video(id, region, po_token, visitor_data)
|
||||
video = fetch_video(id, region)
|
||||
Invidious::Database::Videos.insert(video) if !region
|
||||
end
|
||||
|
||||
|
@ -320,11 +320,11 @@ def get_video(id, refresh = true, region = nil, force_refresh = false, po_token
|
|||
rescue DB::Error
|
||||
# Avoid common `DB::PoolRetryAttemptsExceeded` error and friends
|
||||
# Note: All DB errors inherit from `DB::Error`
|
||||
return fetch_video(id, region, po_token, visitor_data)
|
||||
return fetch_video(id, region)
|
||||
end
|
||||
|
||||
def fetch_video(id, region, po_token, visitor_data)
|
||||
info = extract_video_info(video_id: id, po_token: po_token, visitor_data: visitor_data)
|
||||
def fetch_video(id, region)
|
||||
info = extract_video_info(video_id: id)
|
||||
|
||||
if reason = info["reason"]?
|
||||
if reason == "Video unavailable"
|
||||
|
|
|
@ -50,12 +50,12 @@ def parse_related_video(related : JSON::Any) : Hash(String, JSON::Any)?
|
|||
}
|
||||
end
|
||||
|
||||
def extract_video_info(video_id : String, po_token, visitor_data)
|
||||
def extract_video_info(video_id : String)
|
||||
# Init client config for the API
|
||||
client_config = YoutubeAPI::ClientConfig.new
|
||||
|
||||
# Fetch data from the player endpoint
|
||||
player_response = YoutubeAPI.player(video_id: video_id, params: "2AMB", client_config: client_config, po_token: po_token, visitor_data: visitor_data)
|
||||
player_response = YoutubeAPI.player(video_id: video_id, params: "2AMB", client_config: client_config)
|
||||
|
||||
playability_status = player_response.dig?("playabilityStatus", "status").try &.as_s
|
||||
|
||||
|
@ -110,7 +110,7 @@ def extract_video_info(video_id : String, po_token, visitor_data)
|
|||
# following issue for an explanation about decrypted URLs:
|
||||
# https://github.com/TeamNewPipe/NewPipeExtractor/issues/562
|
||||
client_config.client_type = YoutubeAPI::ClientType::AndroidTestSuite
|
||||
new_player_response = try_fetch_streaming_data(video_id, client_config, po_token, visitor_data)
|
||||
new_player_response = try_fetch_streaming_data(video_id, client_config)
|
||||
end
|
||||
|
||||
# Last hope
|
||||
|
@ -119,7 +119,7 @@ def extract_video_info(video_id : String, po_token, visitor_data)
|
|||
# if the IP address is not blocked.
|
||||
if CONFIG.po_token && reason || CONFIG.po_token.nil? && new_player_response.nil?
|
||||
client_config.client_type = YoutubeAPI::ClientType::TvHtml5ScreenEmbed
|
||||
new_player_response = try_fetch_streaming_data(video_id, client_config, po_token, visitor_data)
|
||||
new_player_response = try_fetch_streaming_data(video_id, client_config)
|
||||
end
|
||||
|
||||
# Replace player response and reset reason
|
||||
|
@ -140,7 +140,7 @@ def extract_video_info(video_id : String, po_token, visitor_data)
|
|||
if streaming_data = player_response["streamingData"]?
|
||||
%w[formats adaptiveFormats].each do |key|
|
||||
streaming_data.as_h[key]?.try &.as_a.each do |format|
|
||||
format.as_h["url"] = JSON::Any.new(convert_url(format, po_token))
|
||||
format.as_h["url"] = JSON::Any.new(convert_url(format))
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -153,9 +153,9 @@ def extract_video_info(video_id : String, po_token, visitor_data)
|
|||
return params
|
||||
end
|
||||
|
||||
def try_fetch_streaming_data(id : String, client_config : YoutubeAPI::ClientConfig, po_token, visitor_data) : Hash(String, JSON::Any)?
|
||||
def try_fetch_streaming_data(id : String, client_config : YoutubeAPI::ClientConfig) : Hash(String, JSON::Any)?
|
||||
LOGGER.debug("try_fetch_streaming_data: [#{id}] Using #{client_config.client_type} client.")
|
||||
response = YoutubeAPI.player(video_id: id, params: "2AMB", client_config: client_config, po_token: po_token, visitor_data: visitor_data)
|
||||
response = YoutubeAPI.player(video_id: id, params: "2AMB", client_config: client_config)
|
||||
|
||||
playability_status = response["playabilityStatus"]["status"]
|
||||
LOGGER.debug("try_fetch_streaming_data: [#{id}] Got playabilityStatus == #{playability_status}.")
|
||||
|
@ -455,7 +455,7 @@ def parse_video_info(video_id : String, player_response : Hash(String, JSON::Any
|
|||
return params
|
||||
end
|
||||
|
||||
private def convert_url(fmt, po_token)
|
||||
private def convert_url(fmt)
|
||||
if cfr = fmt["signatureCipher"]?.try { |json| HTTP::Params.parse(json.as_s) }
|
||||
sp = cfr["sp"]
|
||||
url = URI.parse(cfr["url"])
|
||||
|
@ -473,9 +473,7 @@ private def convert_url(fmt, po_token)
|
|||
n = DECRYPT_FUNCTION.try &.decrypt_nsig(params["n"])
|
||||
params["n"] = n if n
|
||||
|
||||
if !po_token.empty?
|
||||
params["pot"] = po_token
|
||||
elsif token = CONFIG.po_token
|
||||
if token = CONFIG.po_token
|
||||
params["pot"] = token
|
||||
end
|
||||
|
||||
|
|
|
@ -126,16 +126,6 @@
|
|||
<input name="save_player_pos" id="save_player_pos" type="checkbox" <% if preferences.save_player_pos %>checked<% end %>>
|
||||
</div>
|
||||
|
||||
<div class="pure-control-group">
|
||||
<label for="po_token"><%= translate(locale, "preferences_po_token") %></label>
|
||||
<input name="po_token" id="po_token" type="text" value="<%= preferences.po_token %>">
|
||||
</div>
|
||||
|
||||
<div class="pure-control-group">
|
||||
<label for="visitor_data"><%= translate(locale, "preferences_visitor_data") %></label>
|
||||
<input name="visitor_data" id="visitor_data" type="text" value="<%= preferences.visitor_data %>">
|
||||
</div>
|
||||
|
||||
<legend><%= translate(locale, "preferences_category_visual") %></legend>
|
||||
|
||||
<div class="pure-control-group">
|
||||
|
|
|
@ -198,8 +198,6 @@ module YoutubeAPI
|
|||
# (this is passed as the `gl` parameter).
|
||||
property region : String | Nil
|
||||
|
||||
@@visitor_data : String | Nil
|
||||
|
||||
# Initialization function
|
||||
def initialize(
|
||||
*,
|
||||
|
@ -322,9 +320,7 @@ module YoutubeAPI
|
|||
client_context["client"]["platform"] = platform
|
||||
end
|
||||
|
||||
if !@@visitor_data.not_nil!.empty?
|
||||
client_context["client"]["visitorData"] = @@visitor_data.not_nil!
|
||||
elsif CONFIG.visitor_data.is_a?(String)
|
||||
if CONFIG.visitor_data.is_a?(String)
|
||||
client_context["client"]["visitorData"] = CONFIG.visitor_data.as(String)
|
||||
end
|
||||
|
||||
|
@ -459,13 +455,8 @@ module YoutubeAPI
|
|||
video_id : String,
|
||||
*, # Force the following parameters to be passed by name
|
||||
params : String,
|
||||
client_config : ClientConfig | Nil = nil,
|
||||
po_token : String,
|
||||
visitor_data : String | Nil
|
||||
client_config : ClientConfig | Nil = nil
|
||||
)
|
||||
if visitor_data
|
||||
@@visitor_data = visitor_data
|
||||
end
|
||||
# Playback context, separate because it can be different between clients
|
||||
playback_ctx = {
|
||||
"html5Preference" => "HTML5_PREF_WANTS",
|
||||
|
@ -491,7 +482,7 @@ module YoutubeAPI
|
|||
"contentPlaybackContext" => playback_ctx,
|
||||
},
|
||||
"serviceIntegrityDimensions" => {
|
||||
"poToken" => po_token || CONFIG.po_token,
|
||||
"poToken" => CONFIG.po_token,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -605,7 +596,7 @@ module YoutubeAPI
|
|||
def _post_json(
|
||||
endpoint : String,
|
||||
data : Hash,
|
||||
client_config : ClientConfig | Nil,
|
||||
client_config : ClientConfig | Nil
|
||||
) : Hash(String, JSON::Any)
|
||||
# Use the default client config if nil is passed
|
||||
client_config ||= DEFAULT_CLIENT_CONFIG
|
||||
|
@ -625,9 +616,7 @@ module YoutubeAPI
|
|||
headers["User-Agent"] = user_agent
|
||||
end
|
||||
|
||||
if !@@visitor_data.not_nil!.empty?
|
||||
headers["X-Goog-Visitor-Id"] = @@visitor_data.not_nil!
|
||||
elsif CONFIG.visitor_data.is_a?(String)
|
||||
if CONFIG.visitor_data.is_a?(String)
|
||||
headers["X-Goog-Visitor-Id"] = CONFIG.visitor_data.as(String)
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue