forked from cadey/maj
cleanup http rendering
This commit is contained in:
parent
c6f15577bb
commit
0a3c6fb23f
|
@ -1,10 +1,10 @@
|
||||||
use crate::templates::{self, Html, RenderRucte, ToHtml, statics::StaticFile};
|
use crate::templates::{self, statics::StaticFile, Html, RenderRucte, ToHtml};
|
||||||
use maj::server::Handler;
|
use maj::server::Handler;
|
||||||
use maj::{gemini, server::Request as GemRequest, StatusCode};
|
use maj::{gemini, server::Request as GemRequest, StatusCode};
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
use warp::{filters::path::FullPath, http::Response, Filter, Rejection, Reply,path};
|
use warp::{filters::path::FullPath, http::Response, path, Filter, Rejection, Reply};
|
||||||
|
|
||||||
const HOST: &'static str = "cetacean.club"; // XXX(cadey): HACK
|
const HOST: &'static str = "cetacean.club"; // XXX(cadey): HACK
|
||||||
const APPLICATION_NAME: &str = concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION"));
|
const APPLICATION_NAME: &str = concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION"));
|
||||||
|
@ -34,6 +34,21 @@ async fn route(args: (FullPath, Arc<crate::server::Handler>)) -> Result<impl Rep
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StatusCode::PermanentRedirect => {
|
||||||
|
let uu = Url::parse(&resp.meta).expect("url parsing to work");
|
||||||
|
log::info!("uu: {}", uu.to_string());
|
||||||
|
Response::builder()
|
||||||
|
.status(warp::http::StatusCode::PERMANENT_REDIRECT)
|
||||||
|
.header("Location", uu.path())
|
||||||
|
.html(|o| {
|
||||||
|
templates::error_html(
|
||||||
|
o,
|
||||||
|
u.to_string(),
|
||||||
|
format!("forwarding you to {}", uu.path()),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
_ => Response::builder()
|
_ => Response::builder()
|
||||||
.status(warp::http::StatusCode::INTERNAL_SERVER_ERROR)
|
.status(warp::http::StatusCode::INTERNAL_SERVER_ERROR)
|
||||||
.html(|o| templates::error_html(o, u.to_string(), resp.meta)),
|
.html(|o| templates::error_html(o, u.to_string(), resp.meta)),
|
||||||
|
@ -59,7 +74,7 @@ fn gemtext_to_html(inp: Vec<u8>) -> (String, impl ToHtml) {
|
||||||
Text(body) => write!(buf, "{}\n<br />", body).unwrap(),
|
Text(body) => write!(buf, "{}\n<br />", body).unwrap(),
|
||||||
Link { to, name } => write!(
|
Link { to, name } => write!(
|
||||||
buf,
|
buf,
|
||||||
r#"<a href="{}">{}</a>"#,
|
r#"<a href="{}">{}</a><br />"#,
|
||||||
to,
|
to,
|
||||||
name.as_ref().or(Some(&to.to_string())).unwrap()
|
name.as_ref().or(Some(&to.to_string())).unwrap()
|
||||||
)
|
)
|
||||||
|
@ -77,10 +92,10 @@ pub fn run(h: Arc<crate::server::Handler>, port: u16) {
|
||||||
smol::run(async {
|
smol::run(async {
|
||||||
let h = h.clone();
|
let h = h.clone();
|
||||||
let handler = warp::path::full()
|
let handler = warp::path::full()
|
||||||
.map(move |path: FullPath| (path, h.clone())).and_then(route);
|
.map(move |path: FullPath| (path, h.clone()))
|
||||||
|
.and_then(route);
|
||||||
let statics = path("static").and(path::param()).and_then(static_file);
|
let statics = path("static").and(path::param()).and_then(static_file);
|
||||||
let site = statics.or(handler)
|
let site = statics.or(handler).with(warp::log(APPLICATION_NAME));
|
||||||
.with(warp::log(APPLICATION_NAME));
|
|
||||||
warp::serve(site).run(([0, 0, 0, 0], port)).await;
|
warp::serve(site).run(([0, 0, 0, 0], port)).await;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -91,10 +106,10 @@ pub fn run(h: Arc<crate::server::Handler>, port: u16) {
|
||||||
async fn static_file(name: String) -> Result<impl Reply, Rejection> {
|
async fn static_file(name: String) -> Result<impl Reply, Rejection> {
|
||||||
if let Some(data) = StaticFile::get(&name) {
|
if let Some(data) = StaticFile::get(&name) {
|
||||||
Ok(Response::builder()
|
Ok(Response::builder()
|
||||||
.status(warp::http::StatusCode::OK)
|
.status(warp::http::StatusCode::OK)
|
||||||
.header("content-type", data.mime.as_ref())
|
.header("content-type", data.mime.as_ref())
|
||||||
// TODO .header("expires", _far_expires)
|
// TODO .header("expires", _far_expires)
|
||||||
.body(data.content))
|
.body(data.content))
|
||||||
} else {
|
} else {
|
||||||
println!("Static file {} not found", name);
|
println!("Static file {} not found", name);
|
||||||
Err(warp::reject::not_found())
|
Err(warp::reject::not_found())
|
||||||
|
|
Loading…
Reference in New Issue