forked from Roflin/gamenight
54 lines
1.6 KiB
Rust
54 lines
1.6 KiB
Rust
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)?))
|
|
} |