cherry picked commits for dev-token-updater

This commit is contained in:
mooleshacat 2024-10-15 13:32:29 -07:00
parent 70e4eb7f5d
commit 4fa7aa65bd
No known key found for this signature in database
GPG Key ID: D4EF68D12E3F636A
5 changed files with 112 additions and 5 deletions

View File

@ -67,6 +67,9 @@
## Features
**Patches**
- token updater patch (mooleshacat)
**User features**
- Lightweight
- No ads

View File

@ -189,6 +189,10 @@ Invidious::Jobs.register Invidious::Jobs::NotificationJob.new(CONNECTION_CHANNEL
Invidious::Jobs.register Invidious::Jobs::ClearExpiredItemsJob.new
ReloadPOToken.get_tokens #init
Invidious::Jobs.register Invidious::Jobs::MonitorCfgPotokensJob.new()
Invidious::Jobs.register Invidious::Jobs::InstanceListRefreshJob.new
Invidious::Jobs.start_all

View File

@ -0,0 +1,17 @@
class Invidious::Jobs::MonitorCfgPotokensJob < Invidious::Jobs::BaseJob
include Invidious
def begin
loop do
LOGGER.info("jobs: running MonitorCfgPotokens job")
ReloadPOToken.get_tokens
LOGGER.info("jobs: MonitorCfgPotokens: pot: " + ReloadPOToken.pot.as(String))
LOGGER.info("jobs: MonitorCfgPotokens: vdata: " + ReloadPOToken.vdata.as(String))
sleep 15.seconds
end
end
end

View File

@ -0,0 +1,83 @@
class ReloadPOToken
@@instance = new
def self.pot
@@pot
end
def self.vdata
@@vdata
end
def initialize
@@pot = "error"
@@vdata = "error"
end
def self.get_tokens
# Load config from file or YAML string env var
env_config_file = "INVIDIOUS_CONFIG_FILE"
env_config_yaml = "INVIDIOUS_CONFIG"
config_file = ENV.has_key?(env_config_file) ? ENV.fetch(env_config_file) : "config/config.yml"
config_yaml = ENV.has_key?(env_config_yaml) ? ENV.fetch(env_config_yaml) : File.read(config_file)
config = Config.from_yaml(config_yaml)
# Update config from env vars (upcased and prefixed with "INVIDIOUS_")
{% for ivar in Config.instance_vars %}
{% env_id = "INVIDIOUS_#{ivar.id.upcase}" %}
if ENV.has_key?({{env_id}})
env_value = ENV.fetch({{env_id}})
success = false
# Use YAML converter if specified
{% ann = ivar.annotation(::YAML::Field) %}
{% if ann && ann[:converter] %}
config.{{ivar.id}} = {{ann[:converter]}}.from_yaml(YAML::ParseContext.new, YAML::Nodes.parse(ENV.fetch({{env_id}})).nodes[0])
success = true
# Use regular YAML parser otherwise
{% else %}
{% ivar_types = ivar.type.union? ? ivar.type.union_types : [ivar.type] %}
# Sort types to avoid parsing nulls and numbers as strings
{% ivar_types = ivar_types.sort_by { |ivar_type| ivar_type == Nil ? 0 : ivar_type == Int32 ? 1 : 2 } %}
{{ivar_types}}.each do |ivar_type|
if !success
begin
config.{{ivar.id}} = ivar_type.from_yaml(env_value)
success = true
rescue
# nop
end
end
end
{% end %}
# Exit on fail
if !success
puts %(Config.{{ivar.id}} failed to parse #{env_value} as {{ivar.type}})
exit(1)
end
end
{% end %}
@@pot = config.po_token
@@vdata = config.visitor_data
end
def self.get_instance
return @@instance
end
end

View File

@ -330,8 +330,8 @@ module YoutubeAPI
client_context["client"]["platform"] = platform
end
if CONFIG.visitor_data.is_a?(String)
client_context["client"]["visitorData"] = CONFIG.visitor_data.as(String)
if ReloadPOToken.vdata.is_a?(String)
client_context["client"]["visitorData"] = ReloadPOToken.vdata.as(String)
end
return client_context
@ -492,7 +492,7 @@ module YoutubeAPI
"contentPlaybackContext" => playback_ctx,
},
"serviceIntegrityDimensions" => {
"poToken" => CONFIG.po_token,
"poToken" => ReloadPOToken.pot.as(String),
},
}
@ -626,8 +626,8 @@ module YoutubeAPI
headers["User-Agent"] = user_agent
end
if CONFIG.visitor_data.is_a?(String)
headers["X-Goog-Visitor-Id"] = CONFIG.visitor_data.as(String)
if ReloadPOToken.vdata.is_a?(String)
headers["X-Goog-Visitor-Id"] = ReloadPOToken.vdata.as(String)
end
# Logging