diff options
| author | Fuwn <[email protected]> | 2024-07-21 02:21:09 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2024-07-21 02:22:07 +0000 |
| commit | 6374a5f62d7de4fb4a90f5b39c5fd15b3f399c53 (patch) | |
| tree | 6f42c02aaf83aa7fe56ae606131c501c2243a74e /src | |
| parent | chore: bump version (diff) | |
| download | september-6374a5f62d7de4fb4a90f5b39c5fd15b3f399c53.tar.xz september-6374a5f62d7de4fb4a90f5b39c5fd15b3f399c53.zip | |
fix(response): handle non-trimmed redirect assumptions
Diffstat (limited to 'src')
| -rw-r--r-- | src/response.rs | 17 |
1 files changed, 14 insertions, 3 deletions
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, |