package ovh.herisson.Clyde.EndPoints; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ovh.herisson.Clyde.Repositories.CurriculumRepository; import ovh.herisson.Clyde.Responses.UnauthorizedResponse; import ovh.herisson.Clyde.Services.AuthenticatorService; import ovh.herisson.Clyde.Services.ProtectionService; import ovh.herisson.Clyde.Tables.Curriculum; import ovh.herisson.Clyde.Tables.Inscription.InscriptionRequest; import ovh.herisson.Clyde.Tables.RequestState; import java.util.Date; import java.util.Map; @RestController @CrossOrigin(originPatterns = "*", allowCredentials = "true") public class LoginController { private final AuthenticatorService authServ; private final CurriculumRepository curriculumRepository; static public class RequestLogin{ private final String identifier; private final String password; @JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss") private final Date expirationDate; public RequestLogin(String identifier, String password, Date expirationDate){ this.identifier = identifier; this.password = password; this.expirationDate = expirationDate; } } public LoginController(AuthenticatorService authServ, CurriculumRepository curriculumRepository){ this.authServ = authServ; this.curriculumRepository = curriculumRepository; } @PostMapping(value = "/login") public ResponseEntity login(@RequestBody RequestLogin requestLogin){ String sessionToken = authServ.login(requestLogin.identifier,requestLogin.password,requestLogin.expirationDate); if (sessionToken == null){ return new UnauthorizedResponse<>("Identifier or Password incorrect"); } HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set("Set-Cookie",String.format("session_token=%s",sessionToken)); return ResponseEntity.ok().headers(responseHeaders).build(); } @PostMapping("/register") public ResponseEntity> register(@RequestBody InscriptionRequest inscriptionRequest){ //We ensure here that if the targeted cursus year is more than first grade then we need the teacher equivalence approval Curriculum curr = curriculumRepository.findById(inscriptionRequest.getCurriculumId()); if (curr.getYear() > 1){ inscriptionRequest.setEquivalenceState(RequestState.Pending); }else{ inscriptionRequest.setEquivalenceState(RequestState.Unrequired); } InscriptionRequest returnedInscriptionRequest = authServ.register(inscriptionRequest); return new ResponseEntity<>(ProtectionService.requestWithoutPassword(returnedInscriptionRequest), HttpStatus.CREATED); } }