From 1440578af127e137cbb679a442b2786760523e50 Mon Sep 17 00:00:00 2001 From: Mirna Gama Date: Thu, 11 Jan 2024 21:25:07 -0300 Subject: [PATCH] [R9] Create auth controller with login method --- .../auth/AuthenticationController.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/main/java/com/mirna/hospitalmanagementapi/application/controllers/auth/AuthenticationController.java diff --git a/src/main/java/com/mirna/hospitalmanagementapi/application/controllers/auth/AuthenticationController.java b/src/main/java/com/mirna/hospitalmanagementapi/application/controllers/auth/AuthenticationController.java new file mode 100644 index 0000000..4810a8c --- /dev/null +++ b/src/main/java/com/mirna/hospitalmanagementapi/application/controllers/auth/AuthenticationController.java @@ -0,0 +1,54 @@ +package com.mirna.hospitalmanagementapi.application.controllers.auth; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.mirna.hospitalmanagementapi.domain.dtos.auth.UserLoginDTO; +import com.mirna.hospitalmanagementapi.domain.entities.auth.User; +import com.mirna.hospitalmanagementapi.domain.services.auth.AuthService; +import com.mirna.hospitalmanagementapi.domain.services.auth.jwt.TokenService; + +import jakarta.validation.Valid; + +/** + * A Spring REST controller for managing authentication and user information. + * + * @author Mirna Gama + * @version 1.0 + */ +@RestController +@RequestMapping("/api/auth") +public class AuthenticationController { + + @Autowired + private AuthService authService; + + @Autowired + private TokenService tokenService; + + /** + * Performs the user login + * + * @param userLoginDTO A data transfer object containing the user data to perform the login + * + * @return The authorization token if successful, or an unauthorized status if there is an error. + */ + @PostMapping + public ResponseEntity login(@RequestBody @Valid UserLoginDTO userLoginDTO) { + + Authentication auth = authService.login(userLoginDTO); + + User authenticatedUser = (User) auth.getPrincipal(); + + String token = tokenService.generateToken(authenticatedUser); + + return ResponseEntity.ok(token); + } +}