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.
 
 
 
 
 
 

40 lines
1.1 KiB

use hastic::services::user_service;
use warp::filters::method::post;
use warp::http::HeaderValue;
use warp::hyper::{Body, StatusCode};
use warp::{http::Response, Filter};
use warp::{Rejection, Reply};
use serde::Serialize;
use crate::api::{self, API};
use parking_lot::RwLock;
use std::sync::Arc;
#[derive(Serialize)]
struct SigninResp {
token: user_service::AccessToken,
}
pub fn get_route(
user_service: Arc<RwLock<user_service::UserService>>,
) -> impl Filter<Extract = impl Reply, Error = Rejection> + Clone {
return warp::path!("api" / "auth" / "signin")
.and(post())
.and(warp::body::json())
.map(move |user: user_service::User| {
let us = user_service.write().login(&user);
if let Some(token) = us {
return api::API::json(&SigninResp { token });
} else {
return api::API::json_with_code(
&api::Message {
message: "wrong login or password".to_owned(),
},
StatusCode::UNAUTHORIZED,
);
}
});
}