mirror of
https://github.com/iv-org/invidious.git
synced 2025-04-20 23:46:26 -04:00
cherry picked commits for dev-token-updater
This commit is contained in:
parent
70e4eb7f5d
commit
4fa7aa65bd
@ -67,6 +67,9 @@
|
||||
|
||||
## Features
|
||||
|
||||
**Patches**
|
||||
- token updater patch (mooleshacat)
|
||||
|
||||
**User features**
|
||||
- Lightweight
|
||||
- No ads
|
||||
|
@ -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
|
||||
|
17
src/invidious/jobs/token_monitor.cr
Normal file
17
src/invidious/jobs/token_monitor.cr
Normal 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
|
83
src/invidious/reloadpotoken.cr
Normal file
83
src/invidious/reloadpotoken.cr
Normal 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
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user