use rocket::{ Request, http::Status, outcome::Outcome, request::FromRequest, response::status::BadRequest, }; use serde_json::json; pub mod flow; pub mod item; pub type ApiError = BadRequest; type FallibleApiResponse = Result; pub fn api_error(msg: &str) -> ApiError { BadRequest(json!({ "error": msg })) } pub struct Token(pub String); #[macro_export] macro_rules! check_auth { ($t:ident, $c:ident) => { if !$c.allowed_tokens.contains(&$t.0) { return Err(api_error("Unauthorized")); } }; } #[rocket::async_trait] impl<'r> FromRequest<'r> for Token { type Error = (); async fn from_request(request: &'r Request<'_>) -> rocket::request::Outcome { match request.headers().get_one("Token") { Some(key) => Outcome::Success(Token(key.to_string())), None => Outcome::Error((Status::Unauthorized, ())), } } }