diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java index 863daa9..83d2f4f 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/LoginController.java @@ -18,6 +18,7 @@ public class LoginController { public LoginController(UserService userService, TokenService tokenService){ this.userService =userService; this.tokenService = tokenService; + } @PostMapping("/login") public ResponseEntity login(@RequestParam String identifier, String password, Date expirationDate){ diff --git a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java index 03087a1..47805d6 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java +++ b/backend/src/main/java/ovh/herisson/Clyde/EndPoints/UserController.java @@ -6,6 +6,9 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import ovh.herisson.Clyde.Repositories.UserRepository; +import ovh.herisson.Clyde.Responses.UnauthorizedResponse; +import ovh.herisson.Clyde.Services.TokenService; +import ovh.herisson.Clyde.Services.UserService; import ovh.herisson.Clyde.Tables.User; @@ -13,30 +16,36 @@ import ovh.herisson.Clyde.Tables.User; @CrossOrigin(origins = "http://localhost:5173") public class UserController { - private final UserRepository userRepo; + private final UserService userService; - public UserController(UserRepository userRepo){ - this.userRepo = userRepo; + private final TokenService tokenService; + public UserController(UserService userService, TokenService tokenService){ + this.userService =userService; + this.tokenService = tokenService; // todo find a way to be clearer + + tokenService.postMockToken(userService.postMockUsers());// todo find a better place to put that } @GetMapping("/user") public ResponseEntity getUsers(@RequestHeader("Authorization") String token){ - //TODO - // Get the token thru the data base - // tokenRepo.findToken(token) => User userFromToken - // si role != secretary => return error : ResponseEntity(null, HttpStatus.UNAUTHORIZED) - return new ResponseEntity(/**userRepo.findById(userFromToken.id),**/ HttpStatus.OK); + + User user = tokenService.getUserFromToken(token); + + if (user == null) { + return new UnauthorizedResponse(null); + } + return new ResponseEntity(user, HttpStatus.OK); } @PostMapping("/user") public ResponseEntity postUser(@RequestBody User user){ - userRepo.save(user); + userService.save(user); return new ResponseEntity(String.format("Account created with ID:%s",user.getRegNo()),HttpStatus.CREATED); } @GetMapping("/users") public Iterable getAllUsers(){//TODO ne l'accepter que si c'est le secrétariat - return userRepo.findAll(); + return userService.getAll(); } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Repositories/TokenRepository.java b/backend/src/main/java/ovh/herisson/Clyde/Repositories/TokenRepository.java index 2fad5f0..719f11e 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Repositories/TokenRepository.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Repositories/TokenRepository.java @@ -2,6 +2,9 @@ package ovh.herisson.Clyde.Repositories; import org.springframework.data.repository.CrudRepository; import ovh.herisson.Clyde.Tables.Token; +import ovh.herisson.Clyde.Tables.User; public interface TokenRepository extends CrudRepository { + + Token getByToken(String token); } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Responses/UnauthorizedResponse.java b/backend/src/main/java/ovh/herisson/Clyde/Responses/UnauthorizedResponse.java index 154ecd8..305dd4d 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Responses/UnauthorizedResponse.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Responses/UnauthorizedResponse.java @@ -5,8 +5,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -public class UnauthorizedResponse extends ResponseEntity { - public UnauthorizedResponse(String message) { +public class UnauthorizedResponse extends ResponseEntity { + public UnauthorizedResponse(T message) { super(message,HttpStatus.UNAUTHORIZED); } } diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/TokenService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/TokenService.java index b427735..5057007 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/TokenService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/TokenService.java @@ -33,4 +33,19 @@ public class TokenService { tokenRepo.save(new Token(user,token)); } + public User getUserFromToken(String token){ + return tokenRepo.getByToken(token).getUser(); + } + + /** Take the list of mock user to save them in the Token DB + * With token being the password of the user (also his role) + * @param users an + */ + public void postMockToken(Iterable users){ + for (User user: users){ + tokenRepo.save(new Token(user,user.getPassword())); + } + } + + } \ No newline at end of file diff --git a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java index b2c080d..0482c28 100644 --- a/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java +++ b/backend/src/main/java/ovh/herisson/Clyde/Services/UserService.java @@ -3,15 +3,21 @@ package ovh.herisson.Clyde.Services; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import ovh.herisson.Clyde.Repositories.UserRepository; +import ovh.herisson.Clyde.Tables.Role; import ovh.herisson.Clyde.Tables.User; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + @Service public class UserService { private final UserRepository userRepo; private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); - public UserService(UserRepository userRepo){ this.userRepo = userRepo; } @@ -33,4 +39,33 @@ public class UserService { return passwordEncoder.matches(tryingPassword, user.getPassword()); } -} + /** Saves an example of : + * an Admin with id 1, email : admin@admin.com and password: admin + * a Student with id 2, email: student@student.com and password: student (no cursus yet) + * a Secretary with id 3, email: secretary@secretary.com and password: secretary + * a Teacher (same) + * and they all have silly names (hihi) + */ + public Iterable postMockUsers(){ + User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), Role.Admin,passwordEncoder.encode("admin")); + User Joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), Role.Student,passwordEncoder.encode("student")); + User Meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0), Role.Teacher,passwordEncoder.encode("secretary")); + User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), Role.Teacher,passwordEncoder.encode("teacher")); + + userRepo.save(herobrine); + userRepo.save(Joe); + userRepo.save(Meh); + userRepo.save(joke); + + return new ArrayList(Arrays.asList(herobrine,Joe,Meh,joke)); + } + + public void save(User user){ + userRepo.save(user); + } + + public Iterable getAll(){ + return userRepo.findAll(); + } + +} \ No newline at end of file