diff options
| author | Fuwn <[email protected]> | 2022-06-14 08:45:09 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2022-06-14 08:45:09 +0000 |
| commit | b5703a59c59bfe95143cf8dc6cc54f20f67fb4fd (patch) | |
| tree | 44022e3944119c39df5b9082aaac3a77841c8c10 /src/request | |
| parent | fix(ast): list ast construction (diff) | |
| download | germ-b5703a59c59bfe95143cf8dc6cc54f20f67fb4fd.tar.xz germ-b5703a59c59bfe95143cf8dc6cc54f20f67fb4fd.zip | |
feat(macros): general utility macros
Diffstat (limited to 'src/request')
| -rw-r--r-- | src/request/response.rs | 71 | ||||
| -rw-r--r-- | src/request/status.rs | 110 | ||||
| -rw-r--r-- | src/request/verifier.rs | 39 |
3 files changed, 0 insertions, 220 deletions
diff --git a/src/request/response.rs b/src/request/response.rs deleted file mode 100644 index 5e1f436..0000000 --- a/src/request/response.rs +++ /dev/null @@ -1,71 +0,0 @@ -// This file is part of Germ <https://github.com/gemrest/germ>. -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// SPDX-License-Identifier: GPL-3.0-only - -use rustls::SupportedCipherSuite; - -use crate::request::Status; - -#[derive(Debug)] -pub struct Response { - status: Status, - meta: String, - content: Option<String>, - size: usize, - suite: Option<SupportedCipherSuite>, -} -impl Response { - pub(super) fn new(data: &[u8], suite: Option<SupportedCipherSuite>) -> Self { - let string_form = String::from_utf8_lossy(data).to_string(); - let mut content = None; - let header; - - if string_form.ends_with("\r\n") { - header = string_form; - } else { - let mut string_split = string_form.split("\r\n"); - - header = string_split.next().unwrap_or("").to_string(); - content = Some(string_split.collect()); - } - - let header_split = header.split_at(2); - - Self { - status: Status::from(header_split.0.parse::<i32>().unwrap_or(0)), - meta: header_split.1.trim_start().to_string(), - content, - size: data.len(), - suite, - } - } - - #[must_use] - pub const fn status(&self) -> &Status { &self.status } - - #[must_use] - pub fn meta(&self) -> &str { &self.meta } - - #[must_use] - pub const fn content(&self) -> &Option<String> { &self.content } - - #[must_use] - pub const fn size(&self) -> &usize { &self.size } - - #[must_use] - pub const fn suite(&self) -> &Option<SupportedCipherSuite> { &self.suite } -} diff --git a/src/request/status.rs b/src/request/status.rs deleted file mode 100644 index f46059a..0000000 --- a/src/request/status.rs +++ /dev/null @@ -1,110 +0,0 @@ -// This file is part of Germ <https://github.com/gemrest/germ>. -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// SPDX-License-Identifier: GPL-3.0-only - -use std::{fmt, fmt::Formatter}; - -/// Simple Gemini status reporting -/// -/// # Examples -/// -/// ```rust -/// use germ::request::Status; -/// -/// assert_eq!(Status::from(10), Status::Input); -/// assert_eq!(i32::from(Status::Input), 10); -/// ``` -#[derive(Debug, PartialEq)] -pub enum Status { - Input, - SensitiveInput, - Success, - TemporaryRedirect, - PermanentRedirect, - TemporaryFailure, - ServerUnavailable, - CGIError, - ProxyError, - SlowDown, - PermanentFailure, - NotFound, - Gone, - ProxyRefused, - BadRequest, - ClientCertificateRequired, - CertificateNotAuthorised, - CertificateNotValid, - Unsupported, -} -impl Default for Status { - fn default() -> Self { Self::Success } -} -impl From<Status> for i32 { - fn from(n: Status) -> Self { - match n { - Status::Input => 10, - Status::SensitiveInput => 11, - Status::Success => 20, - Status::TemporaryRedirect => 30, - Status::PermanentRedirect => 31, - Status::TemporaryFailure => 40, - Status::ServerUnavailable => 41, - Status::CGIError => 42, - Status::ProxyError => 43, - Status::SlowDown => 44, - Status::PermanentFailure => 50, - Status::NotFound => 51, - Status::Gone => 52, - Status::ProxyRefused => 53, - Status::BadRequest => 59, - Status::ClientCertificateRequired => 60, - Status::CertificateNotAuthorised => 61, - Status::CertificateNotValid => 62, - Status::Unsupported => 0, - } - } -} -impl From<i32> for Status { - fn from(n: i32) -> Self { - match n { - 10 => Self::Input, - 11 => Self::SensitiveInput, - 20 => Self::Success, - 30 => Self::TemporaryRedirect, - 31 => Self::PermanentRedirect, - 40 => Self::TemporaryFailure, - 41 => Self::ServerUnavailable, - 42 => Self::CGIError, - 43 => Self::ProxyError, - 44 => Self::SlowDown, - 50 => Self::PermanentFailure, - 51 => Self::NotFound, - 52 => Self::Gone, - 53 => Self::ProxyRefused, - 59 => Self::BadRequest, - 60 => Self::ClientCertificateRequired, - 61 => Self::CertificateNotAuthorised, - 62 => Self::CertificateNotValid, - _ => Self::Unsupported, - } - } -} -impl fmt::Display for Status { - fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { - write!(f, "{:?}", self) - } -} diff --git a/src/request/verifier.rs b/src/request/verifier.rs deleted file mode 100644 index d6511c3..0000000 --- a/src/request/verifier.rs +++ /dev/null @@ -1,39 +0,0 @@ -// This file is part of Germ <https://github.com/gemrest/germ>. -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 3. -// -// This program is distributed in the hope that it will be useful, but -// WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -// Copyright (C) 2022-2022 Fuwn <[email protected]> -// SPDX-License-Identifier: GPL-3.0-only - -use std::time::SystemTime; - -use rustls::{client, client::ServerCertVerified, Certificate}; - -pub(super) struct GermVerifier; -impl GermVerifier { - pub const fn new() -> Self { Self {} } -} -impl client::ServerCertVerifier for GermVerifier { - fn verify_server_cert( - &self, - _end_entity: &Certificate, - _intermediates: &[Certificate], - _server_name: &client::ServerName, - _scts: &mut dyn Iterator<Item = &[u8]>, - _ocsp_response: &[u8], - _now: SystemTime, - ) -> Result<ServerCertVerified, rustls::Error> { - Ok(ServerCertVerified::assertion()) - } -} |