Skip to main content

session/
session.rs

1use std::time::Duration;
2
3use flyer::{
4    request::Request,
5    response::Response,
6    router::next::Next,
7    server,
8    session::cookie::SessionCookieManager
9};
10
11/// Controller
12pub async fn home_view<'a>(req: &'a mut Request, res: &'a mut Response) -> &'a mut Response {
13    return res.html(format!("<h1>Welcome to protected home page user {}</h1>", req.session().get("user_id")).as_str());
14}
15
16/// Controller
17pub async fn login<'a>(req: &'a mut Request, res: &'a mut Response) -> &'a mut Response {
18    req.session().set("user_id", format!("{}", 1).as_str());
19
20    return res.redirect("/");
21}
22
23/// Controller
24pub async fn register<'a>(_req: &'a mut Request, res: &'a mut Response) -> &'a mut Response {
25    return res.html("<h1>Please visit the login page to login</h1>");
26}
27
28/// Controller
29pub async fn logout<'a>(req: &'a mut Request, res: &'a mut Response) -> &'a mut Response {
30    req.session().remove("user_id");
31
32    return res.redirect("register");
33}
34
35/// Controller
36pub async fn page_not_found<'a>(_req: &'a mut Request, res: &'a mut Response) -> &'a mut Response {
37    return res.html("<h1>404 Page Not Found</h1>");
38}
39
40/// Middleware
41pub async fn auth<'a>(req: &'a mut Request, res: &'a mut Response, next: &'a mut Next) -> &'a mut Response {
42    if req.session().get("user_id") == "" {
43        return res.redirect("register");
44    }
45
46    return next.handle(res);
47}
48
49/// Middleware
50pub async fn guest<'a>(req: &'a mut Request, res: &'a mut Response, next: &'a mut Next) -> &'a mut Response {
51    if !req.session().get("user_id").is_empty() {
52        return res.redirect("/");
53    }
54
55    return next.handle(res);
56}
57
58fn main() {
59    let server = server("127.0.0.1", 9999)
60        .session(SessionCookieManager::new(Duration::from_secs((60 * 60) * 2), "session_cookie_key_name", "encryption"));
61
62    server.router().group("/", |router| {
63        router.get("/", home_view).middleware(auth);
64        router.get("register", register).middleware(guest);
65        router.get("login", login).middleware(guest);
66        router.get("logout", logout).middleware(auth);
67    });
68
69    server.router().not_found(page_not_found);
70
71    print!("\r\n\r\nRunning server: {}\r\n\r\n", server.address());
72
73    server.listen();
74}