Crate secure_session [] [src]

Signed, encrypted session cookies for Iron.

A more complete reference implementation can be found on github.

Hello, Secure Session!

extern crate iron;
extern crate secure_session;
extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate typemap;

use iron::AroundMiddleware;
use iron::prelude::*;
use iron::status;

use secure_session::middleware::{SessionMiddleware, SessionConfig};
use secure_session::session::ChaCha20Poly1305SessionManager;

fn main() {
    let key = *b"01234567012345670123456701234567";
    let manager = ChaCha20Poly1305SessionManager::<Session>::from_key(key);
    let config = SessionConfig::default();
    let middleware =
        SessionMiddleware::<Session, SessionKey, ChaCha20Poly1305SessionManager<Session>>::new(
            manager, config);

    let handler = middleware.around(Box::new(index));

    Iron::new(handler); //.http("localhost:8080").unwrap();
}

fn index(request: &mut Request) -> IronResult<Response> {
    let message = request.extensions.get::<SessionKey>()
        .map(|s| s.message.clone())
        .unwrap_or("secure session".to_string());
    Ok(Response::with((status::Ok, format!("Hello, {}!", message))))
}

#[derive(Serialize, Deserialize)]
struct Session {
    message: String,
}

struct SessionKey {}

impl typemap::Key for SessionKey {
    type Value = Session;
}

Modules

error

Error types and utilities

middleware

Iron specific middleware and handlers.

session

Sessions and session management utilities.

Constants

SESSION_COOKIE_NAME

The name of the cookie that stores the session.