Update for the rocket 0.5 release candidate

This commit is contained in:
Fenhl 2022-03-23 00:03:32 +00:00
parent 0004bd2992
commit 610f27297c
6 changed files with 32 additions and 41 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "rocket_csrf"
version = "0.3.0"
version = "0.4.0-rc.1"
authors = ["Alex Kotov <kotovalexarian@gmail.com>"]
edition = "2018"
description = "CSRF (Cross-Site Request Forgery) protection for Rocket web framework"
@ -16,5 +16,5 @@ publish = true
base64 = { version = "0.13.0" }
bcrypt = { version = "0.9" }
rand = { version = "0.8.3" }
rocket = { version = "0.4.5", features = ["private-cookies"] }
time = { version = "0.1.38" }
rocket = { version = "0.5.0-rc.1", features = ["secrets"] }
time = { version = "0.2.25" }

View File

@ -1,13 +1,14 @@
use bcrypt::{hash, verify};
use rand::{distributions::Standard, Rng};
use rocket::{
fairing::{Fairing as RocketFairing, Info, Kind},
async_trait,
fairing::{self, Fairing as RocketFairing, Info, Kind},
http::{Cookie, Status},
request::{FromRequest, Outcome},
Data, Request, Rocket, State,
};
use std::borrow::Cow;
use time::Duration;
use time::{Duration, OffsetDateTime};
const BCRYPT_COST: u32 = 8;
@ -94,20 +95,21 @@ impl CsrfToken {
}
}
#[async_trait]
impl RocketFairing for Fairing {
fn info(&self) -> Info {
Info {
name: "CSRF",
kind: Kind::Attach | Kind::Request,
kind: Kind::Ignite | Kind::Request,
}
}
fn on_attach(&self, rocket: Rocket) -> std::result::Result<Rocket, Rocket> {
async fn on_ignite(&self, rocket: Rocket<rocket::Build>) -> fairing::Result {
Ok(rocket.manage(self.config.clone()))
}
fn on_request(&self, request: &mut Request, _: &Data) {
let config = request.guard::<State<CsrfConfig>>().unwrap();
async fn on_request(&self, request: &mut Request<'_>, _: &mut Data<'_>) {
let config = request.guard::<&State<CsrfConfig>>().await.unwrap();
if let Some(_) = request.valid_csrf_token_from_session(&config) {
return;
@ -120,7 +122,7 @@ impl RocketFairing for Fairing {
let encoded = base64::encode(&values[..]);
let expires = time::now_utc() + config.lifespan;
let expires = OffsetDateTime::now_utc() + config.lifespan;
request.cookies().add_private(
Cookie::build(config.cookie_name.clone(), encoded)
@ -130,11 +132,12 @@ impl RocketFairing for Fairing {
}
}
impl<'a, 'r> FromRequest<'a, 'r> for CsrfToken {
#[async_trait]
impl<'r> FromRequest<'r> for CsrfToken {
type Error = ();
fn from_request(request: &'a Request<'r>) -> Outcome<Self, Self::Error> {
let config = request.guard::<State<CsrfConfig>>().unwrap();
async fn from_request(request: &'r Request<'_>) -> Outcome<Self, Self::Error> {
let config = request.guard::<&State<CsrfConfig>>().await.unwrap();
match request.valid_csrf_token_from_session(&config) {
None => Outcome::Failure((Status::Forbidden, ())),

View File

@ -1,17 +1,15 @@
#![feature(decl_macro)]
#[macro_use]
extern crate rocket;
const COOKIE_NAME: &str = "foobar";
const COOKIE_LEN: usize = 64;
fn client() -> rocket::local::Client {
rocket::local::Client::new(rocket()).unwrap()
fn client() -> rocket::local::blocking::Client {
rocket::local::blocking::Client::tracked(rocket()).unwrap()
}
fn rocket() -> rocket::Rocket {
rocket::ignite()
fn rocket() -> rocket::Rocket<rocket::Build> {
rocket::build()
.attach(rocket_csrf::Fairing::new(
rocket_csrf::CsrfConfig::default()
.with_cookie_name(COOKIE_NAME)

View File

@ -1,14 +1,12 @@
#![feature(decl_macro)]
#[macro_use]
extern crate rocket;
fn client() -> rocket::local::Client {
rocket::local::Client::new(rocket()).unwrap()
fn client() -> rocket::local::blocking::Client {
rocket::local::blocking::Client::tracked(rocket()).unwrap()
}
fn rocket() -> rocket::Rocket {
rocket::ignite()
fn rocket() -> rocket::Rocket<rocket::Build> {
rocket::build()
.attach(rocket_csrf::Fairing::default())
.mount("/", routes![index])
}

View File

@ -1,5 +1,3 @@
#![feature(decl_macro)]
#[macro_use]
extern crate rocket;
@ -11,12 +9,12 @@ use rocket_csrf::CsrfToken;
const COOKIE_NAME: &str = "foobar";
const COOKIE_LEN: usize = 64;
fn client() -> rocket::local::Client {
rocket::local::Client::new(rocket()).unwrap()
fn client() -> rocket::local::blocking::Client {
rocket::local::blocking::Client::tracked(rocket()).unwrap()
}
fn rocket() -> rocket::Rocket {
rocket::ignite()
fn rocket() -> rocket::Rocket<rocket::Build> {
rocket::build()
.attach(rocket_csrf::Fairing::new(
rocket_csrf::CsrfConfig::default()
.with_cookie_name(COOKIE_NAME)
@ -42,8 +40,6 @@ fn respond_with_valid_authenticity_token() {
.get("/")
.private_cookie(Cookie::new(COOKIE_NAME, encoded.to_string()))
.dispatch()
.body()
.unwrap()
.into_string()
.unwrap();

View File

@ -1,5 +1,3 @@
#![feature(decl_macro)]
#[macro_use]
extern crate rocket;
@ -8,12 +6,12 @@ use rand::RngCore;
use rocket::http::Cookie;
use rocket_csrf::CsrfToken;
fn client() -> rocket::local::Client {
rocket::local::Client::new(rocket()).unwrap()
fn client() -> rocket::local::blocking::Client {
rocket::local::blocking::Client::tracked(rocket()).unwrap()
}
fn rocket() -> rocket::Rocket {
rocket::ignite()
fn rocket() -> rocket::Rocket<rocket::Build> {
rocket::build()
.attach(rocket_csrf::Fairing::default())
.mount("/", routes![index])
}
@ -34,8 +32,6 @@ fn respond_with_valid_authenticity_token() {
.get("/")
.private_cookie(Cookie::new("csrf_token", encoded.to_string()))
.dispatch()
.body()
.unwrap()
.into_string()
.unwrap();