package com.ufund.api.ufundapi.controller; import com.ufund.api.ufundapi.service.AuthService; import com.ufund.api.ufundapi.service.UserService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.Map; @RestController @RequestMapping("auth") public class AuthController { private final AuthService authService; public AuthController(AuthService authService) { this.authService = authService; } /** * Attempts to log in as a user * * @param params A json object in the format {username: string, password: string} * @return An api key and status OK if the authentication was successful, * Status UNAUTHORIZED if the authentication failed and INTERNAL SERVER ERROR otherwise. */ @PostMapping("") public ResponseEntity login(@RequestBody Map params) { String username = params.get("username"); String password = params.get("password"); try { String key = authService.login(username, password); return new ResponseEntity<>(key, HttpStatus.OK); } catch (IllegalAccessException e) { return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); } catch (IOException ex) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } /** * Logs out the current user * * @param key The API sent by the client in the header * @return OK if the user was successfully logged out, INTERNAL_SERVER_ERROR otherwise. */ @DeleteMapping("") public ResponseEntity logout(@RequestHeader("jelly-api-key") String key) { try { authService.logout(key); return new ResponseEntity<>(HttpStatus.OK); } catch (IOException e) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } }