use rocket::request::{FromRequest, Outcome, Request};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum CsrfCheckProof {
PassedCsrfChecks,
}
impl Default for CsrfCheckProof {
fn default() -> Self {
Self::PassedCsrfChecks
}
}
#[async_trait::async_trait]
impl<'r> FromRequest<'r> for CsrfCheckProof {
type Error = std::convert::Infallible;
async fn from_request(request: &'r Request<'_>) -> Outcome<Self, Self::Error> {
let cached: &Option<Self> = request.local_cache(|| None);
cached
.as_ref()
.cloned()
.map(Outcome::Success)
.unwrap_or_else(|| Outcome::Forward(rocket::http::Status::InternalServerError))
}
}