use netdb_auth::User;
use netdb_auth::has_scope;
use rocket::http::Status;
use rocket::{launch, routes, Build, Rocket};
#[macro_use] extern crate rocket;
#[has_scope("minesweeper")]
#[get("/")]
fn test1(user: User) -> Result<String, Status> {
Ok(user.username.to_string())
}
#[has_scope("hub")]
#[get("/test2")]
fn test2(user: User) -> Result<String, Status> {
Ok(user.username.to_string())
}
#[has_scope("hub", 1)]
#[get("/test3")]
fn test3(user: User) -> Result<String, Status> {
Ok(user.username.to_string())
}
#[has_scope("hub", 100000000)]
#[get("/test4")]
async fn test4(user: User) -> Result<String, String> {
//wait for 1 second
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
if 1 == 1 {
return Ok(user.username.to_string());
}
Err(user.username.to_string())
}
#[launch]
fn rocket() -> Rocket<Build> {
rocket::build().mount("/", routes![test1, test2, test3, test4])
}
#[cfg(test)]
mod tests {
use std::env;
use super::rocket;
use rocket::local::blocking::Client;
use rocket::http::{Header, Status};
use rocket::uri;
static TOKEN: &str = "eyJhbGciOiJSUzI1NiIsImtpZCI6ImFkbWluIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwczovL2xvZ2luLm5ldGRiLmF0IiwiZXhwIjoxNzUzNTE5NDAwLCJpYXQiOjE3NTM1MTkxMDAsIm5iZiI6MTc1MzUxOTEwMCwic3ViIjoiMSIsInVzZXJuYW1lIjoiQXVlcm5pZyIsImF2YXRhciI6Imh0dHBzOi8vY2RuLm5ldGRiLmF0L2F2YXRhci8xYjZkZGE1ZDI5MDk0Mjc0YTQ0MWVmYTY4ZTkxMjlhZS5wbmciLCJsYW5nIjoiZGUtYXQiLCJzY29wZSI6Im1haWw6MiBmaWxlc2hhcmU6MTg0OSBvZmZsaW5lX2FjY2VzcyBhZG1pbiIsImF1ZCI6Imh0dHBzOi8vbmV0ZGIuYXQvIn0.KwgB_tRwiYcTcDFhStBst_LJprBL29CA7iOxn8kiXtFVrwwVy0iBAJUw0OHYCQdx5FFTmllgGI_T6lD4nt-r0_PQsw2dFsLDKGwoP9ggUgx1QG-hbaLri3LW9-e7XGCK4FKDj75RVqhWw8l7LTkOEGX-MuetxoURyAU1CFOz8LTJSOUUdYpPmZOi12uKg1vvfIuVu1yrm5lNkjMrhBCfBToFP3Q16NNvjTgmLZwIg5G0PtbcC6z5_f0JcA6XrBCRa19NIGKQ4LUDp93AoIwQjevBwuggtfE6ZUEKmpPo6MINWEJVMuBjaSU7853xOtAvr8ZyBFztcPld2Gh7eyfBH_R8BdoXRCsFxLBHi0uUHcRNfKYNPVpNWE1-Vlz9dYokBHQ0sxJ3SNBQqkQGv9yzHgYyk7YtIvOFdnjicjWcj05o35LwRSZTHW-cea2O-O6MZBUQg2sEcXqVazE46N7Qhu1a7hOFOkKx21PhUmc5tpdgRY2vQf6sHOgylRr5bo4ep-90u6oUYXTQYS5vESGQMLKwzL4wlcNbjTEXOgp9KOZ2M5GLqNHijaPXGRQXnu2uDHsFJm2Us45HAlyyE1oDA7ezD5s076asrb9N_ALZfexYroRDahDaqcnO0ubvzIucgc8HXAdGw8zbl7ECVRiPbeitNv4jadm5Gv82V3Wl4ro";
#[test]
fn test_unauth() {
env::set_var("DOMAIN", "netdb.at");
env::set_var("AUDIENCE", "https://netdb.at/");
let client = Client::tracked(rocket()).expect("valid rocket instance");
let response = client.get(uri!(crate::test1)).dispatch();
assert_eq!(response.status(), Status::Unauthorized);
}
#[test]
fn test_auth() {
env::set_var("DOMAIN", "netdb.at");
env::set_var("AUDIENCE", "https://netdb.at/");
let client = Client::tracked(rocket()).expect("valid rocket instance");
let response = client.get(uri!(crate::test1)).header(Header::new("Authorization", "Bearer ".to_owned() + TOKEN)).dispatch();
assert_eq!(response.status(), Status::Forbidden);
}
#[test]
fn test_auth_scope() {
env::set_var("DOMAIN", "netdb.at");
env::set_var("AUDIENCE", "https://netdb.at/");
let client = Client::tracked(rocket()).expect("valid rocket instance");
let response = client.get(uri!(crate::test2)).header(Header::new("Authorization", "Bearer ".to_owned() + TOKEN)).dispatch();
assert_eq!(response.status(), Status::Ok);
}
#[test]
fn test_auth_scope2() {
env::set_var("DOMAIN", "netdb.at");
env::set_var("AUDIENCE", "https://netdb.at/");
let client = Client::tracked(rocket()).expect("valid rocket instance");
let response = client.get(uri!(crate::test3)).header(Header::new("Authorization", "Bearer ".to_owned() + TOKEN)).dispatch();
assert_eq!(response.status(), Status::Ok);
}
#[test]
fn test_auth_scope3() {
env::set_var("DOMAIN", "netdb.at");
env::set_var("AUDIENCE", "https://netdb.at/");
let client = Client::tracked(rocket()).expect("valid rocket instance");
let response = client.get(uri!(crate::test4)).header(Header::new("Authorization", "Bearer ".to_owned() + TOKEN)).dispatch();
assert_eq!(response.status(), Status::Ok);
assert_eq!(response.into_string().unwrap(), "Forbidden".to_string());
}
}