aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-07-21 02:21:09 +0000
committerFuwn <[email protected]>2024-07-21 02:22:07 +0000
commitd27a5bb24daf841b18f0025275251bde45cfe064 (patch)
tree6f42c02aaf83aa7fe56ae606131c501c2243a74e
parentchore: bump version (diff)
downloadseptember-0.2.26.tar.xz
september-0.2.26.zip
fix(response): handle non-trimmed redirect assumptionsv0.2.26
-rw-r--r--Cargo.lock2
-rw-r--r--Cargo.toml2
-rw-r--r--src/response.rs17
3 files changed, 16 insertions, 5 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 7edacb6..c6f040d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1839,7 +1839,7 @@ checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
[[package]]
name = "september"
-version = "0.2.25"
+version = "0.2.26"
dependencies = [
"actix-web",
"anyhow",
diff --git a/Cargo.toml b/Cargo.toml
index b2680fd..2958014 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -2,7 +2,7 @@
[package]
name = "september"
-version = "0.2.25"
+version = "0.2.26"
authors = ["Fuwn <[email protected]>"]
edition = "2021"
description = "A simple and efficient Gemini-to-HTTP proxy."
diff --git a/src/response.rs b/src/response.rs
index 07161d5..3986b5a 100644
--- a/src/response.rs
+++ b/src/response.rs
@@ -58,7 +58,10 @@ For example: to proxy "gemini://fuwn.me/uptime", visit "/proxy/fuwn.me/uptime".<
}
};
- if response.content().is_none() {
+ if response.content().is_none()
+ && response.status() != &germ::request::Status::PermanentRedirect
+ && response.status() != &germ::request::Status::TemporaryRedirect
+ {
response = match germ::request::request(&match url_from_path(
req.path().trim_end_matches('/'),
true,
@@ -211,8 +214,16 @@ For example: to proxy "gemini://fuwn.me/uptime", visit "/proxy/fuwn.me/uptime".<
));
let redirect_url = match url_from_path(
- response.meta().trim_end_matches('/'),
- true,
+ &if response.meta().trim_end_matches('/').starts_with('/') {
+ format!(
+ "/proxy/{}{}",
+ url.domain().unwrap_or_default(),
+ response.meta().trim_end_matches('/')
+ )
+ } else {
+ response.meta().trim_end_matches('/').to_string()
+ },
+ false,
&mut is_proxy,
&mut is_raw,
&mut is_nocss,