Have you actually tried it? The most recent app I've been working on using warp
has something similar:
let app_name = warp::path("app_name");
let app_root = app_name.and(warp::path::end()).and(warp::fs::file("path/to/my/file.html");
let login = app_name.and(warp::path("login")).and(map || /* calling my handlebars template for logging in */);
let callback = app_name.and(.and(warp::path("callback"))
.and(warp::filters::query::raw())
.map(|code: String| AccessCode::from_query_str(&code))
.map(|accesscode: AccessCode| {
println!("{}", accesscode.to_string());
OauthToken::from_access_code(accesscode)
})
.map(|resp: Result<reqwest::Response>| {
let mut unwrapped = resp.unwrap();
println!("{:?}", unwrapped);
unwrapped.json::<OauthToken>()
})
.map(|token: Result<OauthToken>| {
println!("token: {:?}", token);
let id_token = &token.unwrap().id_token;
println!("{:?}", alcoholic_jwt::token_kid(id_token));
id_token.to_string()
})
.map(|token: String| {
alcoholic_jwt::validate(&token,
&jwk_by_kid(auth0_jwks(),
&alcoholic_jwt::token_kid(&token)
.unwrap()
.unwrap()),
vec![])
.unwrap()
})
.map(|valid_jwt: ValidJWT| format!("jwt claims: {:?}", valid_jwt.claims));
let routes = app_root.or(login).or(callback);