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
11pub 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
16pub 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
23pub 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
28pub 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
35pub 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
40pub 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
49pub 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}