Create a web server to begin the Visions VTT application #110
|
@ -5,7 +5,7 @@ dist
|
||||||
result
|
result
|
||||||
*.tgz
|
*.tgz
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
file-service/*.sqlite
|
*.sqlite
|
||||||
file-service/*.sqlite-shm
|
*.sqlite-shm
|
||||||
file-service/*.sqlite-wal
|
*.sqlite-wal
|
||||||
file-service/var
|
file-service/var
|
||||||
|
|
|
@ -4545,6 +4545,8 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
name = "visions"
|
name = "visions"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"authdb",
|
||||||
|
"tokio",
|
||||||
"warp",
|
"warp",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -6,4 +6,6 @@ edition = "2021"
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
warp = "0.3.6"
|
authdb = { path = "../../authdb/" }
|
||||||
|
tokio = { version = "1", features = [ "full" ] }
|
||||||
|
warp = { version = "0.3" }
|
||||||
|
|
|
@ -1,3 +1,49 @@
|
||||||
fn main() {
|
use authdb::{AuthDB, Username};
|
||||||
println!("Hello, world!");
|
use std::{
|
||||||
|
net::{IpAddr, Ipv4Addr, SocketAddr},
|
||||||
|
path::PathBuf,
|
||||||
|
sync::{Arc, RwLock},
|
||||||
|
};
|
||||||
|
use warp::{header, Filter};
|
||||||
|
|
||||||
|
fn with_authentication(
|
||||||
|
auth_ctx: Arc<RwLock<AuthDB>>,
|
||||||
|
) -> impl Filter<Extract = (Username,), Error = warp::Rejection> + Clone {
|
||||||
|
header("authentication").map(|value: String| {
|
||||||
|
println!("value: {:?}", value);
|
||||||
|
Username::from("savanni")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
pub async fn main() {
|
||||||
|
let auth_db = AuthDB::new(PathBuf::from("./auth_db.sqlite"))
|
||||||
|
.await
|
||||||
|
.expect("AuthDB should initialize");
|
||||||
|
let auth_ctx: Arc<RwLock<AuthDB>> = Arc::new(RwLock::new(auth_db));
|
||||||
|
|
||||||
|
let echo_unauthenticated = warp::path!("api" / "v1" / "echo" / String).map(|param: String| {
|
||||||
|
println!("param: {}", param);
|
||||||
|
warp::reply::json(&vec!["unauthenticated", param.as_str()])
|
||||||
|
});
|
||||||
|
|
||||||
|
let authenticate = warp::path!("api" / "v1" / "auth" / String).map(|param: String| {
|
||||||
|
println!("param: {}", param);
|
||||||
|
warp::reply::json(¶m)
|
||||||
|
});
|
||||||
|
|
||||||
|
let echo_authenticated = warp::path!("api" / "v1" / "echo" / String)
|
||||||
|
.and(with_authentication(auth_ctx.clone()))
|
||||||
|
.map(|param: String, username: Username| {
|
||||||
|
println!("param: {:?}", username);
|
||||||
|
println!("param: {}", param);
|
||||||
|
warp::reply::json(&vec!["authenticated", username.as_str(), param.as_str()])
|
||||||
|
});
|
||||||
|
|
||||||
|
let filter = echo_authenticated.or(authenticate).or(echo_unauthenticated);
|
||||||
|
|
||||||
|
let server = warp::serve(filter);
|
||||||
|
server
|
||||||
|
.run(SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 8001))
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue