summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamantaz Fox <coding@samantaz.fr>2022-01-25 19:34:43 +0100
committerGitHub <noreply@github.com>2022-01-25 19:34:43 +0100
commit2ae074a9a45c26533a35640b1b7c3f0e4e1d3ca3 (patch)
tree6777667663907f6baba1705e1f1be7f41dafa5b4
parent5ece07a8077ab1d4369afc029f7e78bde2a0a4d5 (diff)
parentc5967ad572191ad7b99dec08111974b04dffc6d0 (diff)
downloadinvidious-2ae074a9a45c26533a35640b1b7c3f0e4e1d3ca3.tar.gz
invidious-2ae074a9a45c26533a35640b1b7c3f0e4e1d3ca3.tar.bz2
invidious-2ae074a9a45c26533a35640b1b7c3f0e4e1d3ca3.zip
Merge pull request #2821 from matthewmcgarvey/channel-search
Handle invalid channel id in channel: search
-rw-r--r--src/invidious/routes/search.cr2
-rw-r--r--src/invidious/search.cr11
2 files changed, 11 insertions, 2 deletions
diff --git a/src/invidious/routes/search.cr b/src/invidious/routes/search.cr
index c256d156..5e606adf 100644
--- a/src/invidious/routes/search.cr
+++ b/src/invidious/routes/search.cr
@@ -55,6 +55,8 @@ module Invidious::Routes::Search
begin
search_query, count, videos, operators = process_search_query(query, page, user, region: region)
+ rescue ex : ChannelSearchException
+ return error_template(404, "Unable to find channel with id of '#{HTML.escape(ex.channel)}'. Are you sure that's an actual channel id? It should look like 'UC4QobU6STFB0P71PMvOGN5A'.")
rescue ex
return error_template(500, ex)
end
diff --git a/src/invidious/search.cr b/src/invidious/search.cr
index 2095721c..0f6dc6eb 100644
--- a/src/invidious/search.cr
+++ b/src/invidious/search.cr
@@ -1,3 +1,10 @@
+class ChannelSearchException < InfoException
+ getter channel : String
+
+ def initialize(@channel)
+ end
+end
+
def channel_search(query, page, channel)
response = YT_POOL.client &.get("/channel/#{channel}")
@@ -5,8 +12,8 @@ def channel_search(query, page, channel)
response = YT_POOL.client &.get("/user/#{channel}")
response = YT_POOL.client &.get("/c/#{channel}") if response.status_code == 404
initial_data = extract_initial_data(response.body)
- ucid = initial_data["header"]["c4TabbedHeaderRenderer"]?.try &.["channelId"].as_s?
- raise InfoException.new("Impossible to extract channel ID from page") if !ucid
+ ucid = initial_data.dig?("header", "c4TabbedHeaderRenderer", "channelId").try(&.as_s?)
+ raise ChannelSearchException.new(channel) if !ucid
else
ucid = channel
end