summaryrefslogtreecommitdiffstats
path: root/src/invidious.cr
diff options
context:
space:
mode:
Diffstat (limited to 'src/invidious.cr')
-rw-r--r--src/invidious.cr17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 2daec20a..7a2fea10 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -1557,6 +1557,23 @@ end
# Channels
+# YouTube appears to let users set a "brand" URL that
+# is different from their username, so we convert that here
+get "/c/:user" do |env|
+ client = make_client(YT_URL)
+ user = env.params.url["user"]
+
+ response = client.get("/c/#{user}")
+ document = XML.parse_html(response.body)
+
+ anchor = document.xpath_node(%q(//a[contains(@class,"branded-page-header-title-link")]))
+ if !anchor
+ next env.redirect "/"
+ end
+
+ env.redirect anchor["href"]
+end
+
get "/user/:user" do |env|
user = env.params.url["user"]
env.redirect "/channel/#{user}"