2020-01-21 07:02:03 +01:00
|
|
|
use crate::template_utils::{IntoContext, Ructe};
|
2021-01-30 13:44:29 +01:00
|
|
|
use plume_models::{db_conn::DbConn, Error, PlumeRocket};
|
2018-12-29 09:36:07 +01:00
|
|
|
use rocket::{
|
2022-01-12 00:58:42 +01:00
|
|
|
http::Status,
|
2018-12-29 09:36:07 +01:00
|
|
|
response::{self, Responder},
|
2019-03-20 17:56:17 +01:00
|
|
|
Request,
|
2018-12-29 09:36:07 +01:00
|
|
|
};
|
2021-01-11 00:38:41 +01:00
|
|
|
use tracing::warn;
|
2018-06-18 17:59:49 +02:00
|
|
|
|
2018-12-29 09:36:07 +01:00
|
|
|
#[derive(Debug)]
|
|
|
|
pub struct ErrorPage(Error);
|
|
|
|
|
|
|
|
impl From<Error> for ErrorPage {
|
|
|
|
fn from(err: Error) -> ErrorPage {
|
|
|
|
ErrorPage(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl<'r> Responder<'r> for ErrorPage {
|
2022-01-12 00:58:42 +01:00
|
|
|
fn respond_to(self, _req: &Request<'_>) -> response::Result<'r> {
|
|
|
|
warn!("{:?}", self.0);
|
2018-12-29 09:36:07 +01:00
|
|
|
|
|
|
|
match self.0 {
|
2022-01-12 00:58:42 +01:00
|
|
|
Error::NotFound => Err(Status::NotFound),
|
|
|
|
Error::Unauthorized => Err(Status::NotFound),
|
|
|
|
_ => Err(Status::InternalServerError),
|
2018-12-29 09:36:07 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-06-18 17:59:49 +02:00
|
|
|
#[catch(404)]
|
2020-01-21 07:02:03 +01:00
|
|
|
pub fn not_found(req: &Request<'_>) -> Ructe {
|
2021-01-30 13:44:29 +01:00
|
|
|
let conn = req.guard::<DbConn>().unwrap();
|
2019-04-30 12:04:25 +02:00
|
|
|
let rockets = req.guard::<PlumeRocket>().unwrap();
|
2021-01-30 13:44:29 +01:00
|
|
|
render!(errors::not_found(&(&conn, &rockets).to_context()))
|
2018-06-18 17:59:49 +02:00
|
|
|
}
|
|
|
|
|
2019-01-27 10:55:22 +01:00
|
|
|
#[catch(422)]
|
2020-01-21 07:02:03 +01:00
|
|
|
pub fn unprocessable_entity(req: &Request<'_>) -> Ructe {
|
2021-01-30 13:44:29 +01:00
|
|
|
let conn = req.guard::<DbConn>().unwrap();
|
2019-04-30 12:04:25 +02:00
|
|
|
let rockets = req.guard::<PlumeRocket>().unwrap();
|
2021-01-30 13:44:29 +01:00
|
|
|
render!(errors::unprocessable_entity(
|
|
|
|
&(&conn, &rockets).to_context()
|
|
|
|
))
|
2019-01-27 10:55:22 +01:00
|
|
|
}
|
|
|
|
|
2018-06-18 17:59:49 +02:00
|
|
|
#[catch(500)]
|
2020-01-21 07:02:03 +01:00
|
|
|
pub fn server_error(req: &Request<'_>) -> Ructe {
|
2021-01-30 13:44:29 +01:00
|
|
|
let conn = req.guard::<DbConn>().unwrap();
|
2019-04-30 12:04:25 +02:00
|
|
|
let rockets = req.guard::<PlumeRocket>().unwrap();
|
2021-01-30 13:44:29 +01:00
|
|
|
render!(errors::server_error(&(&conn, &rockets).to_context()))
|
2018-06-18 17:59:49 +02:00
|
|
|
}
|
2018-06-24 18:58:57 +02:00
|
|
|
|
2018-12-06 18:54:16 +01:00
|
|
|
#[post("/csrf-violation?<target>")]
|
2021-01-30 13:44:29 +01:00
|
|
|
pub fn csrf_violation(target: Option<String>, conn: DbConn, rockets: PlumeRocket) -> Ructe {
|
2018-12-06 18:54:16 +01:00
|
|
|
if let Some(uri) = target {
|
2021-01-05 13:41:14 +01:00
|
|
|
warn!("Csrf violation while accessing \"{}\"", uri)
|
2018-06-24 18:58:57 +02:00
|
|
|
}
|
2021-01-30 13:44:29 +01:00
|
|
|
render!(errors::csrf(&(&conn, &rockets).to_context()))
|
2018-06-24 18:58:57 +02:00
|
|
|
}
|