diff --git a/src/invidious/routes/api/v1/channels.cr b/src/invidious/routes/api/v1/channels.cr index 1c82f983..e3458fa2 100644 --- a/src/invidious/routes/api/v1/channels.cr +++ b/src/invidious/routes/api/v1/channels.cr @@ -424,7 +424,7 @@ module Invidious::Routes::API::V1::Channels locale = env.get("preferences").as(Preferences).locale env.response.content_type = "application/json" - id = env.params.url["id"].to_s + id = URI.encode_www_form(env.params.url["id"].to_s) ucid = env.params.query["ucid"]? thin_mode = env.params.query["thin_mode"]? @@ -436,9 +436,9 @@ module Invidious::Routes::API::V1::Channels if ucid.nil? response = YoutubeAPI.resolve_url("https://www.youtube.com/post/#{id}") return error_json(400, "Invalid post ID") if response["error"]? - ucid = response.dig("endpoint", "browseEndpoint", "browseId").as_s + ucid = URI.encode_www_form(response.dig("endpoint", "browseEndpoint", "browseId").as_s) else - ucid = ucid.to_s + ucid = URI.encode_www_form(ucid.to_s) end begin @@ -453,7 +453,7 @@ module Invidious::Routes::API::V1::Channels env.response.content_type = "application/json" - id = env.params.url["id"] + id = URI.encode_www_form(env.params.url["id"]) thin_mode = env.params.query["thin_mode"]? thin_mode = thin_mode == "true" @@ -467,9 +467,9 @@ module Invidious::Routes::API::V1::Channels if ucid.nil? response = YoutubeAPI.resolve_url("https://www.youtube.com/post/#{id}") return error_json(400, "Invalid post ID") if response["error"]? - ucid = response.dig("endpoint", "browseEndpoint", "browseId").as_s + ucid = URI.encode_www_form(response.dig("endpoint", "browseEndpoint", "browseId").as_s) else - ucid = ucid.to_s + ucid = URI.encode_www_form(ucid.to_s) end case continuation diff --git a/src/invidious/routes/api/v1/videos.cr b/src/invidious/routes/api/v1/videos.cr index 6a3eb8ae..1b25ce89 100644 --- a/src/invidious/routes/api/v1/videos.cr +++ b/src/invidious/routes/api/v1/videos.cr @@ -392,7 +392,7 @@ module Invidious::Routes::API::V1::Videos env.response.content_type = "application/json" - clip_id = env.params.url["id"] + clip_id = URI.encode_www_form(env.params.url["id"]) region = env.params.query["region"]? proxy = {"1", "true"}.any? &.== env.params.query["local"]? diff --git a/src/invidious/routes/channels.cr b/src/invidious/routes/channels.cr index e5560cf3..d988c250 100644 --- a/src/invidious/routes/channels.cr +++ b/src/invidious/routes/channels.cr @@ -261,7 +261,7 @@ module Invidious::Routes::Channels def self.post(env) # /post/{postId} - id = env.params.url["id"] + id = URI.encode_www_form(env.params.url["id"]) ucid = env.params.query["ucid"]? prefs = env.get("preferences").as(Preferences) @@ -277,14 +277,14 @@ module Invidious::Routes::Channels nojs = nojs == "1" if !ucid.nil? - ucid = ucid.to_s + ucid = URI.encode_www_form(ucid.to_s) post_response = fetch_channel_community_post(ucid, id, locale, "json", thin_mode) else # resolve the url to get the author's UCID response = YoutubeAPI.resolve_url("https://www.youtube.com/post/#{id}") return error_template(400, "Invalid post ID") if response["error"]? - ucid = response.dig("endpoint", "browseEndpoint", "browseId").as_s + ucid = URI.encode_www_form(response.dig("endpoint", "browseEndpoint", "browseId").as_s) post_response = fetch_channel_community_post(ucid, id, locale, "json", thin_mode) end diff --git a/src/invidious/routes/watch.cr b/src/invidious/routes/watch.cr index 4a6311d3..7de49d6c 100644 --- a/src/invidious/routes/watch.cr +++ b/src/invidious/routes/watch.cr @@ -345,7 +345,7 @@ module Invidious::Routes::Watch locale = env.get("preferences").as(Preferences).locale region = env.params.query["region"]? - id = env.params.query["id"] + id = URI.encode_www_form(env.params.query["id"]) continuation = env.params.query["continuation"]? source = env.params.query["source"]? || "youtube" @@ -363,9 +363,9 @@ module Invidious::Routes::Watch if ucid.nil? response = YoutubeAPI.resolve_url("https://www.youtube.com/post/#{id}") return error_json(400, "Invalid post ID") if response["error"]? - ucid = response.dig("endpoint", "browseEndpoint", "browseId").as_s + ucid = URI.encode_www_form(response.dig("endpoint", "browseEndpoint", "browseId").as_s) else - ucid = ucid.to_s + ucid = URI.encode_www_form(ucid.to_s) end case continuation when nil, ""