diff options
Diffstat (limited to 'src/auth.rs')
-rw-r--r-- | src/auth.rs | 55 |
1 files changed, 36 insertions, 19 deletions
diff --git a/src/auth.rs b/src/auth.rs index 9c6f978..0635910 100644 --- a/src/auth.rs +++ b/src/auth.rs @@ -4,11 +4,13 @@ use actix_web::{delete, post, web, HttpResponse, Scope}; use chrono::{Duration, Utc}; use jsonwebtoken::{encode, EncodingKey, Header}; use serde::{Deserialize, Serialize}; +pub use crate::api::Response; +use utoipa::ToSchema; /* Set up scope */ pub fn auth_scope() -> Scope { web::scope("/auth") - .service(register) + //.service(register) .service(login) .service(delete_user) } @@ -19,28 +21,23 @@ pub struct Claims { pub exp: usize, } -#[derive(Serialize, Deserialize)] -struct Response { - message: String, -} - -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, ToSchema)] struct EncodeResponse { + #[schema(example = "response")] message: String, + #[schema(example = "4f4bf0b9ef653818a56df74cffb024bd")] token: String, } -#[derive(Serialize, Deserialize)] -struct DecodeResponse { - message: String, - id: usize, -} - -#[derive(Serialize, Deserialize)] -struct DecodeBody { - token: String, -} - +#[utoipa::path( + request_body = UserForm, + context_path = "/auth", + description = "Creates a new user with the specified values.", + responses( + (status = 200, description = "Create new user", body = Response), + (status = 400, description = "Errors found, unfulfilled request"), + ), +)] #[post("/register")] pub async fn register( app_state: web::Data<AppState>, @@ -57,6 +54,16 @@ pub async fn register( } } +#[utoipa::path( + request_body = UserForm, + context_path = "/auth", + description = "Attempts to log in user. If successful, it returns an encoded token that grants access to protected routes in the api.", + responses( + (status = 200, description = "Returns encoded token", body = EncodeResponse), + (status = 400, description = "Errors found, unfulfilled request"), + (status = 401, description = "Unauthorized"), + ), +)] #[post("/login")] pub async fn login( app_state: web::Data<AppState>, @@ -67,7 +74,7 @@ pub async fn login( let result = match query { Ok(res) => res, Err(e) => { - return HttpResponse::BadRequest().json(Response { + return HttpResponse::Unauthorized().json(Response { message: format!("There was an issue in the request: {}", e).to_owned(), }) } @@ -113,6 +120,16 @@ async fn encode_token(id: usize, secret: &String) -> Result<String, HttpResponse }; } +#[utoipa::path( + request_body = UserForm, + context_path = "/auth", + description = "Attempts to delete user. Both username and password are required.", + responses( + (status = 200, description = "Delete user", body = Response), + (status = 400, description = "Errors found, unfulfilled request"), + (status = 401, description = "Unauthorized"), + ), +)] #[delete("/user")] pub async fn delete_user( app_state: web::Data<AppState>, |