summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOmar Roth <omarroth@protonmail.com>2019-06-07 12:42:07 -0500
committerOmar Roth <omarroth@protonmail.com>2019-06-07 21:13:50 -0500
commitf065a21542fd9d7587b89c426327c3c83a24c2bc (patch)
treed264b18956647fb9e29512452d9afb5f87676566 /src
parent27e032d10dce0bd657e7b705d3dc8b24f1b55178 (diff)
downloadinvidious-f065a21542fd9d7587b89c426327c3c83a24c2bc.tar.gz
invidious-f065a21542fd9d7587b89c426327c3c83a24c2bc.tar.bz2
invidious-f065a21542fd9d7587b89c426327c3c83a24c2bc.zip
Fix 404 handling for endpoints matching short URLs
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr79
1 files 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"]))