From 60d4cee0a9d71c7d1a0330fde00f7814d4e1ae17 Mon Sep 17 00:00:00 2001 From: Alex Ling Date: Sat, 23 May 2020 10:42:59 +0000 Subject: [PATCH] Respect base url setting when redirecting --- src/handlers/auth_handler.cr | 2 +- src/routes/admin.cr | 8 ++++---- src/routes/main.cr | 6 +++--- src/routes/reader.cr | 2 +- src/util.cr | 5 +++++ 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/handlers/auth_handler.cr b/src/handlers/auth_handler.cr index 7ec0138..afa17df 100644 --- a/src/handlers/auth_handler.cr +++ b/src/handlers/auth_handler.cr @@ -11,7 +11,7 @@ class AuthHandler < Kemal::Handler cookie = env.request.cookies.find { |c| c.name == "token" } if cookie.nil? || !@storage.verify_token cookie.value - return env.redirect "/login" + return redirect env, "/login" end if request_path_startswith env, ["/admin", "/api/admin", "/download"] diff --git a/src/routes/admin.cr b/src/routes/admin.cr index 343d499..a095adc 100644 --- a/src/routes/admin.cr +++ b/src/routes/admin.cr @@ -48,13 +48,13 @@ class AdminRouter < Router @context.storage.new_user username, password, admin - env.redirect "/admin/user" + redirect env, "/admin/user" rescue e @context.error e redirect_url = URI.new \ path: "/admin/user/edit", query: hash_to_query({"error" => e.message}) - env.redirect redirect_url.to_s + redirect env, redirect_url.to_s end post "/admin/user/edit/:original_username" do |env| @@ -85,14 +85,14 @@ class AdminRouter < Router @context.storage.update_user \ original_username, username, password, admin - env.redirect "/admin/user" + redirect env, "/admin/user" rescue e @context.error e redirect_url = URI.new \ path: "/admin/user/edit", query: hash_to_query({"username" => original_username, \ "admin" => admin, "error" => e.message}) - env.redirect redirect_url.to_s + redirect env, redirect_url.to_s end get "/admin/downloads" do |env| diff --git a/src/routes/main.cr b/src/routes/main.cr index f8db978..c4a0f0b 100644 --- a/src/routes/main.cr +++ b/src/routes/main.cr @@ -13,7 +13,7 @@ class MainRouter < Router rescue e @context.error "Error when attempting to log out: #{e}" ensure - env.redirect "/login" + redirect env, "/login" end end @@ -26,9 +26,9 @@ class MainRouter < Router cookie = HTTP::Cookie.new "token", token cookie.expires = Time.local.shift years: 1 env.response.cookies << cookie - env.redirect "/" + redirect env, "/" rescue - env.redirect "/login" + redirect env, "/login" end end diff --git a/src/routes/reader.cr b/src/routes/reader.cr index c949e34..c5ec819 100644 --- a/src/routes/reader.cr +++ b/src/routes/reader.cr @@ -15,7 +15,7 @@ class ReaderRouter < Router # might not have actually read them page = [page - 2 * IMGS_PER_PAGE, 1].max - env.redirect "/reader/#{title.id}/#{entry.id}/#{page}" + redirect env, "/reader/#{title.id}/#{entry.id}/#{page}" rescue e @context.error e env.response.status_code = 404 diff --git a/src/util.cr b/src/util.cr index bc97887..4f02f56 100644 --- a/src/util.cr +++ b/src/util.cr @@ -99,3 +99,8 @@ end def random_str UUID.random.to_s.gsub "-", "" end + +def redirect(env, path) + base = Config.current.base_url + env.redirect File.join base, path +end