index : static-web-server.git

ascending towards madness

author Jose Quintana <joseluisquintana20@gmail.com> 2023-06-03 22:15:00.0 +00:00:00
committer Jose Quintana <joseluisquintana20@gmail.com> 2023-06-03 22:15:00.0 +00:00:00
commit
e183ea32b039c508deee050608d94265f7e2d4e8 [patch]
tree
5d5e96b69a0c37db715989be77e122b849a07a60
parent
91519c98a8dd0e3e541c40080fa8823f65981885
download
e183ea32b039c508deee050608d94265f7e2d4e8.tar.gz

fix: missing base modules when `page-fallback` is enabled

following modules are now used if `page-fallback` is activated:

- cors
- compression
- cache_control_headers
- security_headers
- custom_headers

Diff

 src/handler.rs | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 58 insertions(+), 1 deletion(-)

diff --git a/src/handler.rs b/src/handler.rs
index 0dac15f..86deee5 100644
--- a/src/handler.rs
+++ b/src/handler.rs
@@ -293,7 +293,64 @@ impl RequestHandler {
                        && status == StatusCode::NOT_FOUND
                        && !self.opts.page_fallback.is_empty()
                    {
                        return Ok(fallback_page::fallback_response(&self.opts.page_fallback));
                        // We use all modules as usual when the `page-fallback` feature is enabled
                        let mut resp = fallback_page::fallback_response(&self.opts.page_fallback);

                        // Append CORS headers if they are present
                        if let Some(cors_headers) = cors_headers {
                            if !cors_headers.is_empty() {
                                for (k, v) in cors_headers.iter() {
                                    resp.headers_mut().insert(k, v.to_owned());
                                }
                                resp.headers_mut().remove(http::header::ALLOW);
                            }
                        }

                        // Compression content encoding varies so use a `Vary` header
                        #[cfg(feature = "compression")]
                        if self.opts.compression || compression_static {
                            resp.headers_mut().append(
                                hyper::header::VARY,
                                hyper::header::HeaderValue::from_name(
                                    hyper::header::ACCEPT_ENCODING,
                                ),
                            );
                        }

                        // Auto compression based on the `Accept-Encoding` header
                        #[cfg(feature = "compression")]
                        if self.opts.compression {
                            resp = match compression::auto(method, headers, resp) {
                                Ok(res) => res,
                                Err(err) => {
                                    tracing::error!("error during body compression: {:?}", err);
                                    return error_page::error_response(
                                        uri,
                                        method,
                                        &StatusCode::INTERNAL_SERVER_ERROR,
                                        &self.opts.page404,
                                        &self.opts.page50x,
                                    );
                                }
                            };
                        }

                        // Append `Cache-Control` headers for web assets
                        if self.opts.cache_control_headers {
                            control_headers::append_headers(uri_path, &mut resp);
                        }

                        // Append security headers
                        if self.opts.security_headers {
                            security_headers::append_headers(&mut resp);
                        }

                        // Add/update custom headers
                        if let Some(advanced) = &self.opts.advanced_opts {
                            custom_headers::append_headers(uri_path, &advanced.headers, &mut resp)
                        }

                        return Ok(resp);
                    }

                    // Otherwise return a response error