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
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, |
|
); |
|
} |
|
}); |
|
}
|
|
|