Hastic standalone https://hastic.io
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.6 KiB

3 years ago
use hastic::services::user_service;
3 years ago
use warp::filters::method::post;
3 years ago
use warp::http::HeaderValue;
use warp::hyper::Body;
3 years ago
use warp::{body, Rejection, Reply};
use warp::{http::Response, Filter};
3 years ago
3 years ago
mod auth;
3 years ago
3 years ago
use serde::Serialize;
3 years ago
use parking_lot::RwLock;
use std::sync::Arc;
pub struct API {
user_service: Arc<RwLock<user_service::UserService>>
}
3 years ago
3 years ago
impl API {
pub fn new() -> API {
API {
user_service: Arc::new(RwLock::new(user_service::UserService::new()))
}
3 years ago
}
fn builder<T>(s: T) -> Result<Response<T>, warp::http::Error> {
3 years ago
return Response::builder()
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE")
.header("Access-Control-Allow-Headers", "*")
3 years ago
.body(s);
3 years ago
}
3 years ago
fn json<T: Serialize>(t: &T) -> Response<Body> {
let j = warp::reply::json(t);
let mut rs = j.into_response();
let hs = rs.headers_mut();
hs.insert("Access-Control-Allow-Origin", HeaderValue::from_static("*"));
3 years ago
hs.insert(
"Access-Control-Allow-Methods",
HeaderValue::from_static("POST, GET, OPTIONS, DELETE"),
);
hs.insert(
"Access-Control-Allow-Headers",
HeaderValue::from_static("*"),
);
3 years ago
rs
}
pub async fn serve(&self) {
3 years ago
let lg = warp::any().map(move || API::builder("not found"));
let login = auth::get_route(self.user_service.clone());
3 years ago
println!("Start server on 8000 port");
3 years ago
warp::serve(login.or(lg)).run(([127, 0, 0, 1], 8000)).await;
3 years ago
}
3 years ago
}