Basic router skeleton for freechat's new auth/dispatch model
This commit is contained in:
parent
c98d6dc503
commit
b3289ca9bd
@ -1,66 +1,60 @@
|
|||||||
// This client code really just serves as the url router for the main website where we describe what the project is about
|
|
||||||
#![feature(proc_macro_hygiene, decl_macro, plugin)]
|
|
||||||
#[macro_use] extern crate serde_derive;
|
|
||||||
#[macro_use] extern crate rocket;
|
|
||||||
#[macro_use] extern crate rocket_contrib;
|
|
||||||
#[macro_use] extern crate diesel;
|
|
||||||
extern crate chrono;
|
extern crate chrono;
|
||||||
extern crate dotenv;
|
extern crate dotenv;
|
||||||
extern crate serde;
|
|
||||||
extern crate serde_json;
|
|
||||||
extern crate rand;
|
|
||||||
extern crate getrandom;
|
extern crate getrandom;
|
||||||
extern crate base64;
|
extern crate base64;
|
||||||
|
|
||||||
|
use std::net::SocketAddr;
|
||||||
use rocket_contrib::templates::Template;
|
use std::convert::Infallible; // our main dispatcher basically never fails hence why we use this
|
||||||
use dotenv::dotenv;
|
|
||||||
use std::env::var;
|
use std::env::var;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use tokio;
|
||||||
|
use hyper::{
|
||||||
|
self,
|
||||||
|
Server,
|
||||||
|
Response, Request, Body,
|
||||||
|
Method,
|
||||||
|
service::{make_service_fn, service_fn}
|
||||||
|
};
|
||||||
|
use dotenv::dotenv;
|
||||||
|
|
||||||
mod schema;
|
|
||||||
mod models;
|
|
||||||
mod invites;
|
|
||||||
mod payload;
|
|
||||||
mod users;
|
|
||||||
mod channels;
|
|
||||||
mod err;
|
|
||||||
mod auth;
|
mod auth;
|
||||||
mod utils;
|
|
||||||
|
|
||||||
use invites::*;
|
fn map_qs(string: Option<&str>) -> HashMap<&str, Option<&str>> {
|
||||||
use channels::*;
|
// if we can't find anything in the map then we no there is nothing
|
||||||
use users::*;
|
unimplemented!()
|
||||||
|
|
||||||
#[database("freechat")]
|
|
||||||
pub struct DBConn(diesel::MysqlConnection);
|
|
||||||
|
|
||||||
pub fn rocket() -> rocket::Rocket {
|
|
||||||
rocket::ignite()
|
|
||||||
.mount("/invite", routes![
|
|
||||||
generate_invite, use_invite
|
|
||||||
])
|
|
||||||
.mount("/channels", routes![
|
|
||||||
get_voice_channels, insert_new_channel, get_text_chanels
|
|
||||||
])
|
|
||||||
.mount("/users", routes![
|
|
||||||
remove_user, get_user_list
|
|
||||||
])
|
|
||||||
.mount("/auth", routes![
|
|
||||||
auth::leave, auth::login
|
|
||||||
])
|
|
||||||
.attach(Template::fairing())
|
|
||||||
.attach(DBConn::fairing())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<(), i32> {
|
async fn route_dispatcher(resp: &Response<Body>, meth: &Method, &path: &str, params: &HashMap<&str, Option<&str>>) {
|
||||||
match dotenv() {
|
// we do have to handle some general hyper errors
|
||||||
Ok(_d) => {
|
unimplemented!()
|
||||||
println!("Got .env: {:?}", var("DATABASE_URL").unwrap());
|
|
||||||
rocket().launch();
|
|
||||||
},
|
|
||||||
Err(e) => {
|
|
||||||
panic!("`.env` Could not be loaded err: {:?}", e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn main_responder(request: Request<Body>) -> Result<Response<Body>, hyper::Error>{
|
||||||
|
let mut response = Response::new(Body::empty());
|
||||||
|
let method = request.method();
|
||||||
|
let path = request.uri().path();
|
||||||
|
let params = map_qs(request.uri().query());
|
||||||
|
|
||||||
|
// go through our auth wall first
|
||||||
|
if auth::wall_entry(¶ms).await {
|
||||||
|
route_dispatcher(&response, &method, path, ¶ms);
|
||||||
}
|
}
|
||||||
Ok(())
|
else {
|
||||||
|
auth::wall_failure(&response);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(response)
|
||||||
|
}
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
dotenv().ok();
|
||||||
|
println!("Servering on localhost:8888");
|
||||||
|
let addr = SocketAddr::from(([127,0,0,1], 8888));
|
||||||
|
|
||||||
|
let service = make_service_fn(|_conn| async {
|
||||||
|
Ok::<_, Infallible>(service_fn(main_responder))
|
||||||
|
});
|
||||||
|
|
||||||
|
let server = Server::bind(&addr).serve(service);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user