package com.ufund.api.ufundapi.controller; import com.ufund.api.ufundapi.model.UserAuth; import com.ufund.api.ufundapi.persistence.UserAuthDAO; import com.ufund.api.ufundapi.persistence.UserDAO; 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 UserDAO userDAO; private final UserAuthDAO userAuthDAO; public AuthController(UserDAO userDAO, UserAuthDAO userAuthDAO) { this.userDAO = userDAO; this.userAuthDAO = userAuthDAO; } /** * Attempts to log in as a user * @param params A map/json object in the format {username: string, password: string} * @return An api key if the auth was successful, null otherwise */ @PostMapping("") public ResponseEntity login(@RequestBody Map params) { String username = params.get("username"); String password = params.get("password"); try { var usr = userDAO.getUser(username); if (usr == null || !usr.verifyPassword(password)) { return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); } var userAuth = UserAuth.generate(username); userAuthDAO.addUserAuth(userAuth); return new ResponseEntity<>(userAuth.getKey(), HttpStatus.OK); } catch (IOException ex) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } /** * TODO * @return */ @DeleteMapping("") public ResponseEntity logout() { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } }