summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2024-07-03 21:15:13 +0200
committerSamantaz Fox <coding@samantaz.fr>2024-07-25 22:13:08 +0200
commit10e5788c212587b7c929c84580aea3e93b2f28ea (patch)
tree6b7193ee6212a2e9677d4ce1195df14985c8b61e /src
parentb509aa91d5c0955deb4980cd08a93e8d808ee456 (diff)
downloadinvidious-10e5788c212587b7c929c84580aea3e93b2f28ea.tar.gz
invidious-10e5788c212587b7c929c84580aea3e93b2f28ea.tar.bz2
invidious-10e5788c212587b7c929c84580aea3e93b2f28ea.zip
Videos: Send player sts when required
Diffstat (limited to 'src')
-rw-r--r--src/invidious/helpers/signatures.cr9
-rw-r--r--src/invidious/yt_backend/youtube_api.cr24
2 files changed, 27 insertions, 6 deletions
diff --git a/src/invidious/helpers/signatures.cr b/src/invidious/helpers/signatures.cr
index d9aab31c..b58af73f 100644
--- a/src/invidious/helpers/signatures.cr
+++ b/src/invidious/helpers/signatures.cr
@@ -34,4 +34,13 @@ struct Invidious::DecryptFunction
LOGGER.trace(ex.inspect_with_backtrace)
return nil
end
+
+ def get_sts : UInt64?
+ self.check_update
+ return SigHelper::Client.get_sts
+ rescue ex
+ LOGGER.debug(ex.message || "Signature: Unknown error")
+ LOGGER.trace(ex.inspect_with_backtrace)
+ return nil
+ end
end
diff --git a/src/invidious/yt_backend/youtube_api.cr b/src/invidious/yt_backend/youtube_api.cr
index c8b037c8..f4ee35e5 100644
--- a/src/invidious/yt_backend/youtube_api.cr
+++ b/src/invidious/yt_backend/youtube_api.cr
@@ -2,6 +2,8 @@
# This file contains youtube API wrappers
#
+private STS_FETCHER = IV::DecryptFunction.new
+
module YoutubeAPI
extend self
@@ -272,7 +274,7 @@ module YoutubeAPI
# Return, as a Hash, the "context" data required to request the
# youtube API endpoints.
#
- private def make_context(client_config : ClientConfig | Nil) : Hash
+ private def make_context(client_config : ClientConfig | Nil, video_id = "dQw4w9WgXcQ") : Hash
# Use the default client config if nil is passed
client_config ||= DEFAULT_CLIENT_CONFIG
@@ -292,7 +294,7 @@ module YoutubeAPI
if client_config.screen == "EMBED"
client_context["thirdParty"] = {
- "embedUrl" => "https://www.youtube.com/embed/dQw4w9WgXcQ",
+ "embedUrl" => "https://www.youtube.com/embed/#{video_id}",
} of String => String | Int64
end
@@ -453,19 +455,29 @@ module YoutubeAPI
params : String,
client_config : ClientConfig | Nil = nil
)
+ # Playback context, separate because it can be different between clients
+ playback_ctx = {
+ "html5Preference" => "HTML5_PREF_WANTS",
+ "referer" => "https://www.youtube.com/watch?v=#{video_id}",
+ } of String => String | Int64
+
+ if {"WEB", "TVHTML5"}.any? { |s| client_config.name.starts_with? s }
+ if sts = STS_FETCHER.get_sts
+ playback_ctx["signatureTimestamp"] = sts.to_i64
+ end
+ end
+
# JSON Request data, required by the API
data = {
"contentCheckOk" => true,
"videoId" => video_id,
- "context" => self.make_context(client_config),
+ "context" => self.make_context(client_config, video_id),
"racyCheckOk" => true,
"user" => {
"lockedSafetyMode" => false,
},
"playbackContext" => {
- "contentPlaybackContext" => {
- "html5Preference": "HTML5_PREF_WANTS",
- },
+ "contentPlaybackContext" => playback_ctx,
},
}