forked from Roflin/gamenight
Converted the Api to a Restful api.
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
use crate::models::login::Login;
|
||||
use crate::models::token::Token;
|
||||
use crate::request::authorization::{get_token, AuthUser};
|
||||
use crate::request::error::ApiError;
|
||||
use actix_web::http::header::ContentType;
|
||||
use actix_web::{post, web, HttpResponse, Responder};
|
||||
use gamenight_database::{DbPool, GetConnection};
|
||||
|
||||
impl From<Login> for gamenight_database::user::LoginUser {
|
||||
fn from(val: Login) -> Self {
|
||||
gamenight_database::user::LoginUser {
|
||||
username: val.username,
|
||||
password: val.password,
|
||||
}
|
||||
}
|
||||
}
|
||||
#[post("/token")]
|
||||
pub async fn post_token(
|
||||
pool: web::Data<DbPool>,
|
||||
login_data: web::Json<Login>,
|
||||
) -> Result<impl Responder, ApiError> {
|
||||
let data = login_data.into_inner();
|
||||
|
||||
if let Ok(Some(user)) = web::block(move || {
|
||||
let mut conn = pool.get_conn();
|
||||
gamenight_database::login(&mut conn, data.into())
|
||||
})
|
||||
.await?
|
||||
{
|
||||
let token = get_token(&user)?;
|
||||
let response = Token {
|
||||
jwt_token: Some(token),
|
||||
};
|
||||
Ok(HttpResponse::Ok()
|
||||
.content_type(ContentType::json())
|
||||
.body(serde_json::to_string(&response)?))
|
||||
} else {
|
||||
Err(ApiError {
|
||||
status: 401,
|
||||
message: "User doesn't exist or password doesn't match".to_string(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[post("/refresh_token")]
|
||||
pub async fn post_refresh_token(user: AuthUser) -> Result<impl Responder, ApiError> {
|
||||
let new_token = get_token(&user.0)?;
|
||||
let response = Token {
|
||||
jwt_token: Some(new_token),
|
||||
};
|
||||
Ok(HttpResponse::Ok()
|
||||
.content_type(ContentType::json())
|
||||
.body(serde_json::to_string(&response)?))
|
||||
}
|
||||
Reference in New Issue
Block a user