diff options
| author | Fuwn <[email protected]> | 2022-03-31 03:02:09 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2022-03-31 03:02:09 +0000 |
| commit | 00f1d10de4f6597f22fec086c34265b322dd9ef3 (patch) | |
| tree | ed12a2f9c6dec57193ea38124ce00b3cf36459b0 /src | |
| parent | fix(router): use different certificate file (diff) | |
| download | windmark-00f1d10de4f6597f22fec086c34265b322dd9ef3.tar.xz windmark-00f1d10de4f6597f22fec086c34265b322dd9ef3.zip | |
feat(features): auto-deduce-mime
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib.rs | 11 | ||||
| -rw-r--r-- | src/response.rs | 110 |
2 files changed, 120 insertions, 1 deletions
@@ -310,6 +310,7 @@ impl Router { let mut buffer = [0u8; 1024]; let mut url = Url::parse("gemini://fuwn.me/")?; let mut response_status = 0; + let mut response_mime_type = "".to_string(); let mut footer = String::new(); let mut header = String::new(); let content; @@ -369,6 +370,7 @@ impl Router { &route.params, ),)), &mut response_status, + &mut response_mime_type, ) }; } else { @@ -378,6 +380,7 @@ impl Router { .unwrap() .call_mut((ErrorContext::new(stream.get_ref(), &url),)), &mut response_status, + &mut response_mime_type, ); } @@ -396,7 +399,10 @@ impl Router { " text/gemini; charset={}; lang={}", self.charset, self.language ), + #[cfg(feature = "auto-deduce-mime")] 21 => tree_magic::from_u8(&*content.as_bytes()), + #[cfg(not(feature = "auto-deduce-mime"))] + 21 => response_mime_type, _ => (&*content).to_string(), }, match response_status { @@ -459,7 +465,10 @@ impl Router { /// .set_private_key_file("windmark_private.pem", ssl::SslFiletype::PEM) /// .unwrap(); /// builder - /// .set_certificate_file("windmark_public.pem", openssl::ssl::SslFiletype::PEM) + /// .set_certificate_file( + /// "windmark_public.pem", + /// openssl::ssl::SslFiletype::PEM, + /// ) /// .unwrap(); /// builder.check_private_key().unwrap(); /// diff --git a/src/response.rs b/src/response.rs index b9c5354..0459c06 100644 --- a/src/response.rs +++ b/src/response.rs @@ -23,7 +23,10 @@ pub enum Response<'a> { Input(String), SensitiveInput(String), Success(String), + #[cfg(feature = "auto-deduce-mime")] SuccessFile(&'a [u8]), + #[cfg(not(feature = "auto-deduce-mime"))] + SuccessFile(&'a [u8], String), TemporaryRedirect(String), PermanentRedirect(String), TemporaryFailure(String), @@ -41,6 +44,113 @@ pub enum Response<'a> { CertificateNotValid(String), } +#[cfg(not(feature = "auto-deduce-mime"))] +pub(crate) fn to_value_set_status( + response: Response<'_>, + status: &mut i32, + mime: &mut String, +) -> String { + match response { + Response::Input(value) => { + *status = 10; + + value + } + Response::SensitiveInput(value) => { + *status = 11; + + value + } + Response::Success(value) => { + *status = 20; + + value + } + Response::SuccessFile(value, value_mime) => { + *status = 21; // Internal status code, not real. + *mime = value_mime; + + String::from_utf8(value.to_vec()).unwrap() + } + Response::TemporaryRedirect(value) => { + *status = 30; + + value + } + Response::PermanentRedirect(value) => { + *status = 31; + + value + } + Response::TemporaryFailure(value) => { + *status = 40; + + value + } + Response::ServerUnavailable(value) => { + *status = 41; + + value + } + Response::CGIError(value) => { + *status = 42; + + value + } + Response::ProxyError(value) => { + *status = 43; + + value + } + Response::SlowDown(value) => { + *status = 44; + + value + } + Response::PermanentFailure(value) => { + *status = 50; + + value + } + Response::NotFound(value) => { + *status = 51; + + value + } + Response::Gone(value) => { + *status = 52; + + value + } + Response::ProxyRefused(value) => { + *status = 53; + + value + } + Response::BadRequest(value) => { + *status = 59; + + value + } + Response::ClientCertificateRequired(value) => { + *status = 60; + + value + } + Response::CertificateNotAuthorised(value) => { + *status = 61; + + value + } + Response::CertificateNotValid(value) => { + *status = 62; + + value + } + } +} + +#[cfg(feature = "auto-deduce-mime")] pub(crate) fn to_value_set_status( response: Response<'_>, status: &mut i32, |