diff --git a/src/server/http_server.rs b/src/server/http_server.rs index 2101035..1713cb2 100644 --- a/src/server/http_server.rs +++ b/src/server/http_server.rs @@ -21,8 +21,8 @@ use crate::database::Database; use crate::server::documentation::RESTDocumentation; use crate::server::messages::{ CreateUserRequest, DeleteRoleResponse, DeleteUserRequest, DeleteUserResponse, ErrorMessage, - FullRoleData, LoginMessage, LogoutConfirmation, LogoutMessage, ModifyRoleRequest, - RefreshMessage, UpdateUserRequest, + FullRoleData, LoginRequest, LoginResponse, LogoutConfirmation, LogoutMessage, + ModifyRoleRequest, RefreshMessage, UpdateUserRequest, }; use crate::utils::error::DBError; use crate::utils::get_user_id_from_token; @@ -181,7 +181,7 @@ impl UserHttpServer { fn build_docs() -> Result { let mut doc = RESTDocumentation::new("/info"); - doc.add_path::( + doc.add_path::( "/login", "POST", "Returns request and refresh tokens", @@ -261,15 +261,25 @@ impl UserHttpServer { /// Handles the login part of the REST api fn login(database: &Database, request: &Request) -> HTTPResult { - let login_request: LoginMessage = + let login_request: LoginRequest = serde_json::from_str(parse_string_body(request)?.as_str()) .map_err(|e| HTTPError::new(e.to_string(), 400))?; let tokens = database .users .create_tokens(&login_request.email, &login_request.password)?; - - Ok(Response::json(&tokens).with_status_code(201)) + let user = database + .users + .get_user(get_user_id_from_token(&tokens.request_token).unwrap())?; + + Ok(Response::json(&LoginResponse { + request_token: tokens.request_token.clone(), + refresh_token: tokens.refresh_token.clone(), + request_ttl: tokens.request_ttl, + refresh_ttl: tokens.refresh_ttl, + user, + }) + .with_status_code(201)) } /// Handles the new token part of the rest api diff --git a/src/server/messages.rs b/src/server/messages.rs index 3bc25c8..4a3ee44 100644 --- a/src/server/messages.rs +++ b/src/server/messages.rs @@ -10,7 +10,7 @@ use serde::export::Formatter; use serde::{Deserialize, Serialize}; use zeroize::Zeroize; -use crate::database::models::{CreatePermissionsEntry, Permission}; +use crate::database::models::{CreatePermissionsEntry, Permission, UserInformation}; use crate::utils::error::DBError; use serde_json::Value; @@ -86,11 +86,20 @@ pub struct CreatePermissionsRequest { #[derive(Deserialize, Zeroize, JsonSchema)] #[zeroize(drop)] -pub struct LoginMessage { +pub struct LoginRequest { pub email: String, pub password: String, } +#[derive(Deserialize, Serialize, JsonSchema)] +pub struct LoginResponse { + pub request_token: String, + pub refresh_token: String, + pub request_ttl: i32, + pub refresh_ttl: i32, + pub user: UserInformation, +} + #[derive(Deserialize, Zeroize, JsonSchema)] #[zeroize(drop)] pub struct RefreshMessage {