use maj::{
gemini as gemtext,
Response as GeminiResponse,
server::{
Request as GeminiRequest,
},
};
pub trait RequestExt {
fn cert_hash(&self) -> Option<String>;
}
fn cert_hash(certificate: &rustls::Certificate) -> String {
use sha2::Digest;
format!("{:x}", sha2::Sha256::digest(certificate.as_ref()))
}
impl RequestExt for GeminiRequest {
fn cert_hash(&self) -> Option<String> {
match &self.certs {
Some(cert) => Some(cert_hash(&cert[0])),
None => None,
}
}
}
pub fn strip_html(html: &str) -> Vec<gemtext::Node> {
crate::html2gemtext::parse_html(html)
}
pub fn temp_redirect<I: Into<String>>(dest: I) -> GeminiResponse {
let mut redirect = GeminiResponse::perm_redirect(dest.into());
redirect.status = maj::StatusCode::TemporaryRedirect;
redirect
}
pub fn apply_global_template(nodes: Vec<gemtext::Node>) -> Vec<gemtext::Node> {
let mut result = vec![
];
result.extend(nodes);
let footer = gemtext::Builder::new()
.link("/", Some("timeline".to_string()))
.link("/logout", Some("logout".to_string()))
.link("/about", Some(format!("about gemifedi v{}", env!("CARGO_PKG_VERSION"))))
.build();
result.extend(footer);
result
}