Skip to main content

middleware/
middleware.rs

1use flyer::{
2    request::Request,
3    response::{HTTP_UNAUTHORIZED, Response},
4    router::next::Next,
5    server
6};
7use serde::{Deserialize, Serialize};
8
9#[derive(Serialize, Deserialize)]
10pub struct User {
11    id: u64,
12    email:  String
13}
14
15#[derive(Serialize, Deserialize)]
16pub struct JsonMessage {
17    message: String
18}
19
20pub async fn auth<'a>(req: &'a mut Request, res: &'a mut Response, next: &mut Next) -> &'a mut Response {
21    if req.header("authorization") != "ey.jwt.token" {
22        return res.status_code(HTTP_UNAUTHORIZED).json(&JsonMessage{
23            message: "Unauthorized Access".to_owned()
24        })
25    }
26    
27    return next.handle(res);
28}
29
30pub async fn verified<'a>(_req: &'a mut Request, res: &'a mut Response, next: &mut Next) -> &'a mut Response {
31    // Some logic to check user in database
32    return next.handle(res);
33}
34
35fn main() {
36    let server = server("127.0.0.1", 9999);
37
38    server.router().group("api", |router| {
39        router.group("users", |router| {
40            router.group("{user}", |router| {
41                router.get("/", async |req, res| {
42                    return res.json(&User{
43                        id: req.parameter("user").parse().unwrap(),
44                        email: "joe@deo.com".to_owned()
45                    });
46                }).middleware(verified);
47            });
48        });
49    }).middleware(auth);
50
51    print!("\r\n\r\nRunning server: {}\r\n\r\n", server.address());
52
53    server.listen();
54}