From f065a21542fd9d7587b89c426327c3c83a24c2bc Mon Sep 17 00:00:00 2001 From: Omar Roth Date: Fri, 7 Jun 2019 12:42:07 -0500 Subject: [PATCH] Fix 404 handling for endpoints matching short URLs --- src/invidious.cr | 79 +++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/src/invidious.cr b/src/invidious.cr index 990f0b70..140001be 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -2374,42 +2374,42 @@ get "/feed/subscriptions" do |env| next env.redirect referer end - user = user.as(User) - sid = sid.as(String) - token = user.token + user = user.as(User) + sid = sid.as(String) + token = user.token if user.preferences.unseen_only - env.set "show_watched", true - end + env.set "show_watched", true + end - # Refresh account - headers = HTTP::Headers.new - headers["Cookie"] = env.request.headers["Cookie"] + # Refresh account + headers = HTTP::Headers.new + headers["Cookie"] = env.request.headers["Cookie"] - if !user.password - user, sid = get_user(sid, headers, PG_DB) - end + if !user.password + user, sid = get_user(sid, headers, PG_DB) + end max_results = user.preferences.max_results - max_results ||= env.params.query["max_results"]?.try &.to_i? - max_results ||= 40 + max_results ||= env.params.query["max_results"]?.try &.to_i? + max_results ||= 40 - page = env.params.query["page"]?.try &.to_i? - page ||= 1 + page = env.params.query["page"]?.try &.to_i? + page ||= 1 videos, notifications = get_subscription_feed(PG_DB, user, max_results, page) - # "updated" here is used for delivering new notifications, so if - # we know a user has looked at their feed e.g. in the past 10 minutes, - # they've already seen a video posted 20 minutes ago, and don't need - # to be notified. - PG_DB.exec("UPDATE users SET notifications = $1, updated = $2 WHERE email = $3", [] of String, Time.now, - user.email) - user.notifications = [] of String - env.set "user", user + # "updated" here is used for delivering new notifications, so if + # we know a user has looked at their feed e.g. in the past 10 minutes, + # they've already seen a video posted 20 minutes ago, and don't need + # to be notified. + PG_DB.exec("UPDATE users SET notifications = $1, updated = $2 WHERE email = $3", [] of String, Time.now, + user.email) + user.notifications = [] of String + env.set "user", user - templated "subscriptions" - end + templated "subscriptions" +end get "/feed/history" do |env| locale = LOCALES[env.get("preferences").as(Preferences).locale]? @@ -2424,18 +2424,18 @@ get "/feed/history" do |env| next env.redirect referer end - user = user.as(User) + user = user.as(User) limit = user.preferences.max_results.clamp(0, MAX_ITEMS_PER_PAGE) - if user.watched[(page - 1) * limit]? - watched = user.watched.reverse[(page - 1) * limit, limit] - else - watched = [] of String - end - - templated "history" + if user.watched[(page - 1) * limit]? + watched = user.watched.reverse[(page - 1) * limit, limit] + else + watched = [] of String end + templated "history" +end + get "/feed/channel/:ucid" do |env| locale = LOCALES[env.get("preferences").as(Preferences).locale]? @@ -2505,10 +2505,10 @@ get "/feed/channel/:ucid" do |env| videos.each do |video| video.to_xml(host_url, auto_generated, xml) - end - end - end - end + end + end + end +end get "/feed/private" do |env| locale = LOCALES[env.get("preferences").as(Preferences).locale]? @@ -5058,6 +5058,11 @@ error 404 do |env| response = client.get(response.headers["Location"]) end + if response.body.empty? + env.response.headers["Location"] = "/" + halt env, status_code: 302 + end + html = XML.parse_html(response.body) ucid = html.xpath_node(%q(//meta[@itemprop="channelId"]))