middleware/
middleware.rs

1use vegemite::{
2    framework::run, routing::Route, sys, systems::Html, Get, MaybeIntoResponse, Resolve,
3    ResolveGuard,
4};
5
6struct Auth {
7    #[allow(unused)]
8    token: String,
9}
10
11impl Resolve for Auth {
12    fn resolve(ctx: &mut vegemite::RequestState) -> ResolveGuard<Self> {
13        match ctx.request.headers().get("Authorization") {
14            Some(v) => ResolveGuard::Value(Auth {
15                token: v.to_str().unwrap().to_string(),
16            }),
17            None => ResolveGuard::Respond(401u16.maybe_response().unwrap()),
18        }
19    }
20}
21
22fn middleware(_auth: Auth) {
23    // We could additionally do some extra work here or just use `Auth` on the endpoints like
24    // `get_page.
25}
26
27fn get_page(_get: Get) -> Html {
28    Html("<h1> This page is for authorized personnel only </h1>".to_string())
29}
30
31fn main() {
32    // ! systems are run from left to right until a response is received from a system
33    let router = Route::new(sys![middleware]).route("page", sys![get_page]);
34
35    println!("Try connecting on a browser at 'http://localhost:8080/page'");
36
37    run("127.0.0.1:5000", router)
38}