#[macro_use] extern crate nickel;
extern crate nickel_jwt_session;
extern crate cookie;
extern crate hyper;
extern crate env_logger;
use nickel::{HttpRouter, Nickel, Request, Response, MiddlewareResult};
use nickel::status::StatusCode;
use nickel_jwt_session::{SessionMiddleware, SessionRequestExtensions, SessionResponseExtensions};
use std::collections::HashMap;
use nickel::extensions::Redirect;
fn main() {
env_logger::init().unwrap();
let mut server = Nickel::new();
server.utilize(SessionMiddleware::new("My very secret key")
.expiration_time(5));
server.get("/", public);
server.get("/login", login);
server.get("/logout", logout);
server.get("/private", private);
server.listen("127.0.0.1:6767");
}
fn public<'mw>(req: &mut Request, res: Response<'mw>)
-> MiddlewareResult<'mw> {
let mut data = HashMap::new();
data.insert("who", req.authorized_user().unwrap_or("world".to_owned()));
return res.render("examples/templates/public.tpl", &data);
}
fn login<'mw>(_req: &mut Request, mut res: Response<'mw>)
-> MiddlewareResult<'mw> {
res.set_jwt_user("carl");
res.redirect("/")
}
fn logout<'mw>(_req: &mut Request, mut res: Response<'mw>)
-> MiddlewareResult<'mw> {
res.clear_jwt_user();
res.redirect("/")
}
fn private<'mw>(req: &mut Request, res: Response<'mw>)
-> MiddlewareResult<'mw> {
if let Some(user) = req.authorized_user() {
let mut data = HashMap::new();
data.insert("who", user);
return res.render("examples/templates/private.tpl", &data);
}
res.error(StatusCode::Forbidden, "Permission denied")
}