Leo/Backend (#82)
Ce merge enverra dans main : le timeout des token, la limite de 5 token par user, les nouvelles tables pour les demandes d'inscriptions Co-authored-by: Anthony Debucquoy <debucquoy.anthony@gmail.com> Reviewed-on: PGL/Clyde#82 Reviewed-by: Debucquoy Anthony <d.tonitch@gmail.com> Reviewed-by: Maxime <231026@umons.ac.be> Reviewed-by: Wal <karpinskiwal@gmail.com> Co-authored-by: LeoMoulin <leomoulin125@gmail.com> Co-committed-by: LeoMoulin <leomoulin125@gmail.com>
This commit is contained in:
		| @ -7,12 +7,14 @@ import org.springframework.web.bind.annotation.PostMapping; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
| import ovh.herisson.Clyde.Repositories.TokenRepository; | ||||
| import ovh.herisson.Clyde.Repositories.UserRepository; | ||||
| import ovh.herisson.Clyde.Services.TokenService; | ||||
| import ovh.herisson.Clyde.Tables.Role; | ||||
| import ovh.herisson.Clyde.Tables.Token; | ||||
| import ovh.herisson.Clyde.Tables.User; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.Calendar; | ||||
| import java.util.Date; | ||||
|  | ||||
| @RestController | ||||
| @ -23,13 +25,14 @@ public class MockController { | ||||
|  | ||||
|     public final UserRepository userRepo; | ||||
|     public final TokenRepository tokenRepo; | ||||
|  | ||||
|     public final TokenService tokenService; | ||||
|     ArrayList<User> mockUsers; | ||||
|  | ||||
|  | ||||
|     public MockController(UserRepository userRepo, TokenRepository tokenRepo){ | ||||
|     public MockController(UserRepository userRepo, TokenRepository tokenRepo, TokenService tokenService){ | ||||
|         this.tokenRepo = tokenRepo; | ||||
|         this.userRepo = userRepo; | ||||
|         this.tokenService = tokenService; | ||||
|     } | ||||
|  | ||||
|     /** Saves an example of each user type by : | ||||
| @ -41,10 +44,10 @@ public class MockController { | ||||
|     @PostMapping("/mock") | ||||
|     public void postMock(){ | ||||
|  | ||||
|         User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), "none",Role.Admin,passwordEncoder.encode("admin")); | ||||
|         User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), "None",Role.Student,passwordEncoder.encode("student")); | ||||
|         User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0),"none", Role.Teacher,passwordEncoder.encode("secretary")); | ||||
|         User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), "none",Role.Teacher,passwordEncoder.encode("teacher")); | ||||
|         User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), null,Role.Admin,passwordEncoder.encode("admin")); | ||||
|         User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), null,Role.Student,passwordEncoder.encode("student")); | ||||
|         User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0), null,Role.Teacher,passwordEncoder.encode("secretary")); | ||||
|         User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), null,Role.Teacher,passwordEncoder.encode("teacher")); | ||||
|  | ||||
|         mockUsers = new ArrayList<User>(Arrays.asList(herobrine,joe,meh,joke)); | ||||
|  | ||||
|  | ||||
| @ -6,8 +6,10 @@ import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.context.annotation.Profile; | ||||
| import org.springframework.jdbc.datasource.DriverManagerDataSource; | ||||
| import org.springframework.scheduling.annotation.EnableScheduling; | ||||
|  | ||||
| @Configuration | ||||
| @EnableScheduling | ||||
| public class JdbcConfig { | ||||
|  | ||||
| 	@Bean | ||||
|  | ||||
| @ -4,10 +4,13 @@ import org.springframework.data.repository.CrudRepository; | ||||
| import ovh.herisson.Clyde.Tables.Token; | ||||
| import ovh.herisson.Clyde.Tables.User; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public interface TokenRepository extends CrudRepository<Token,Long> { | ||||
|  | ||||
|     Token getByToken(String token); | ||||
|  | ||||
|     Iterable<Token> getByUser(User user); | ||||
|  | ||||
|     ArrayList <Token> getByUserOrderByExpirationDate(User user); | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| package ovh.herisson.Clyde.Services; | ||||
|  | ||||
| import org.springframework.stereotype.Service; | ||||
| import ovh.herisson.Clyde.Tables.Token; | ||||
| import ovh.herisson.Clyde.Tables.User; | ||||
|  | ||||
| import java.util.Date; | ||||
| @ -26,7 +27,7 @@ public class AuthenticatorService { | ||||
|         if (user == null){return null;} | ||||
|         if (!userService.checkPassword(user,password)){return null;} | ||||
|         String token = tokenService.generateNewToken(); | ||||
|         tokenService.saveToken(token,user,expirationDate); | ||||
|         tokenService.saveToken(new Token(user, token,expirationDate)); | ||||
|         return token; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,19 +1,19 @@ | ||||
| package ovh.herisson.Clyde.Services; | ||||
|  | ||||
|  | ||||
| import org.springframework.scheduling.annotation.Scheduled; | ||||
| import org.springframework.stereotype.Service; | ||||
| import ovh.herisson.Clyde.Repositories.TokenRepository; | ||||
| import ovh.herisson.Clyde.Tables.Token; | ||||
| import ovh.herisson.Clyde.Tables.User; | ||||
|  | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.nio.charset.StandardCharsets; | ||||
| import java.security.SecureRandom; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Calendar; | ||||
| import java.util.Date; | ||||
|  | ||||
| @Service | ||||
| public class TokenService { | ||||
|  | ||||
|     TokenRepository tokenRepo; | ||||
|  | ||||
|     public TokenService(TokenRepository tokenRepo){ | ||||
| @ -48,7 +48,28 @@ public class TokenService { | ||||
|         return tokenRep.getUser(); | ||||
|     } | ||||
|  | ||||
|     public void saveToken(String token, User user, Date expirationDate){// todo faire qlq chose de l'expDate | ||||
|         tokenRepo.save(new Token(user,token)); | ||||
|     public void saveToken(Token token){ | ||||
|         //Si l'utilisateur a déja 5 token delete celui qui devait expirer le plus vite | ||||
|         ArrayList<Token> tokenList = tokenRepo.getByUserOrderByExpirationDate(token.getUser()); | ||||
|         while(tokenList.size() >= 5){ | ||||
|             tokenRepo.delete(tokenList.get(0)); | ||||
|             tokenList.remove(tokenList.get(0)); | ||||
|         } | ||||
|         tokenRepo.save(token); | ||||
|     } | ||||
| } | ||||
|  | ||||
|     //Tous les jours a minuit | ||||
|     @Scheduled(cron = "0 0 0 * * ?") | ||||
|     public void autoDeleteToken() { | ||||
|         for (Token t: tokenRepo.findAll()){ | ||||
|             Calendar cal = Calendar.getInstance(); | ||||
|  | ||||
|             Calendar cal2 = Calendar.getInstance(); | ||||
|             cal2.setTime(t.getExpirationDate()); | ||||
|  | ||||
|             if (cal.compareTo(cal2) >= 0){ | ||||
|                 tokenRepo.delete(t); | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,108 @@ | ||||
| package ovh.herisson.Clyde.Tables; | ||||
|  | ||||
| import jakarta.persistence.*; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| public class InscriptionRequest { | ||||
|     @GeneratedValue(strategy = GenerationType.AUTO) | ||||
|     private int id; | ||||
|     private String firstName; | ||||
|     private String lastName; | ||||
|     private String adress; | ||||
|     private String email; | ||||
|     private String country; | ||||
|     private Date birthDate; | ||||
|  | ||||
|     @ManyToOne | ||||
|     @JoinColumn(name="Cursus") | ||||
|     private Cursus cursus; | ||||
|     private RequestState state; | ||||
|     private String profilePicture; | ||||
|     public InscriptionRequest(){} | ||||
|     public InscriptionRequest(String lastName, String firstName, String adress, String email, String country, Date birthDate, RequestState state, String profilePicture){ | ||||
|         this.lastName = lastName; | ||||
|         this.firstName = firstName; | ||||
|         this.adress = adress; | ||||
|         this.email = email; | ||||
|         this.country = country; | ||||
|         this.birthDate = birthDate; | ||||
|         this.state = state; | ||||
|     } | ||||
|  | ||||
|     public int getId() { | ||||
|         return id; | ||||
|     } | ||||
|  | ||||
|     public String getFirstName() { | ||||
|         return firstName; | ||||
|     } | ||||
|  | ||||
|     public void setFirstName(String firstName) { | ||||
|         this.firstName = firstName; | ||||
|     } | ||||
|  | ||||
|     public String getLastName() { | ||||
|         return lastName; | ||||
|     } | ||||
|  | ||||
|     public void setLastName(String lastName) { | ||||
|         this.lastName = lastName; | ||||
|     } | ||||
|  | ||||
|     public String getAdress() { | ||||
|         return adress; | ||||
|     } | ||||
|  | ||||
|     public void setAdress(String adress) { | ||||
|         this.adress = adress; | ||||
|     } | ||||
|  | ||||
|     public String getEmail() { | ||||
|         return email; | ||||
|     } | ||||
|  | ||||
|     public void setEmail(String email) { | ||||
|         this.email = email; | ||||
|     } | ||||
|  | ||||
|     public String getCountry() { | ||||
|         return country; | ||||
|     } | ||||
|  | ||||
|     public void setCountry(String country) { | ||||
|         this.country = country; | ||||
|     } | ||||
|  | ||||
|     public Date getBirthDate() { | ||||
|         return birthDate; | ||||
|     } | ||||
|  | ||||
|     public void setBirthDate(Date birthDate) { | ||||
|         this.birthDate = birthDate; | ||||
|     } | ||||
|  | ||||
|     public Cursus getCursus() { | ||||
|         return cursus; | ||||
|     } | ||||
|  | ||||
|     public void setCursus(Cursus cursus) { | ||||
|         this.cursus = cursus; | ||||
|     } | ||||
|  | ||||
|     public RequestState getState() { | ||||
|         return state; | ||||
|     } | ||||
|  | ||||
|     public void setState(RequestState state) { | ||||
|         this.state = state; | ||||
|     } | ||||
|  | ||||
|     public String getProfilePicture() { | ||||
|         return profilePicture; | ||||
|     } | ||||
|  | ||||
|     public void setProfilePicture(String profilePicture) { | ||||
|         this.profilePicture = profilePicture; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,69 @@ | ||||
| package ovh.herisson.Clyde.Tables; | ||||
|  | ||||
| import jakarta.persistence.GeneratedValue; | ||||
| import jakarta.persistence.GenerationType; | ||||
| import jakarta.persistence.JoinColumn; | ||||
| import jakarta.persistence.ManyToOne; | ||||
|  | ||||
| public class ReinscriptionRequest { | ||||
|     @GeneratedValue(strategy = GenerationType.AUTO) | ||||
|     private int id; | ||||
|  | ||||
|     @ManyToOne | ||||
|     @JoinColumn(name = "User") | ||||
|     private User user; | ||||
|  | ||||
|     @ManyToOne | ||||
|     @JoinColumn(name = "Cursus") | ||||
|     private Cursus newCursus; | ||||
|     private RequestState state; | ||||
|  | ||||
|     //Permet de différencier les demandes de changement et une réinscription dans le même cursus | ||||
|     //Pour la réinscription on va le mettre a 0 | ||||
|     private boolean type; | ||||
|  | ||||
|     public ReinscriptionRequest(){} | ||||
|  | ||||
|     public ReinscriptionRequest(User user, Cursus newCursus, RequestState state, boolean type){ | ||||
|         this.user = user; | ||||
|         this.newCursus = newCursus; | ||||
|         this.state = state; | ||||
|         this.type = type; | ||||
|     } | ||||
|  | ||||
|     public int getId() { | ||||
|         return id; | ||||
|     } | ||||
|  | ||||
|     public User getUser() { | ||||
|         return user; | ||||
|     } | ||||
|  | ||||
|     public void setUser(User user) { | ||||
|         this.user = user; | ||||
|     } | ||||
|  | ||||
|     public Cursus getNewCursus() { | ||||
|         return newCursus; | ||||
|     } | ||||
|  | ||||
|     public void setNewCursus(Cursus newCursus) { | ||||
|         this.newCursus = newCursus; | ||||
|     } | ||||
|  | ||||
|     public RequestState getState() { | ||||
|         return state; | ||||
|     } | ||||
|  | ||||
|     public void setState(RequestState state) { | ||||
|         this.state = state; | ||||
|     } | ||||
|  | ||||
|     public boolean isType() { | ||||
|         return type; | ||||
|     } | ||||
|  | ||||
|     public void setType(boolean type) { | ||||
|         this.type = type; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,7 @@ | ||||
| package ovh.herisson.Clyde.Tables; | ||||
|  | ||||
| public enum RequestState { | ||||
|     Accepted, | ||||
|     Refused, | ||||
|     Pending; | ||||
| } | ||||
| @ -1,6 +1,10 @@ | ||||
| package ovh.herisson.Clyde.Tables; | ||||
|  | ||||
| import jakarta.persistence.*; | ||||
| import org.springframework.scheduling.annotation.Scheduled; | ||||
| import ovh.herisson.Clyde.Repositories.TokenRepository; | ||||
|  | ||||
| import java.util.Date; | ||||
|  | ||||
| @Entity | ||||
| public class Token { | ||||
| @ -12,13 +16,16 @@ public class Token { | ||||
|     @JoinColumn(name ="Users") | ||||
|     private User user; | ||||
|     private String token; | ||||
|     private Date expirationDate; | ||||
|  | ||||
|     public Token(User user, String token){ | ||||
|     public Token(User user, String token, Date expirationDate){ | ||||
|         this.user = user; | ||||
|         this.token = token; | ||||
|         this.expirationDate = expirationDate; | ||||
|     } | ||||
|  | ||||
|     public Token(){} | ||||
|  | ||||
|     public int getId() { | ||||
|         return id; | ||||
|     } | ||||
| @ -37,4 +44,12 @@ public class Token { | ||||
|     public void setToken(String data) { | ||||
|         this.token = data; | ||||
|     } | ||||
|  | ||||
|     public void setExpirationDate(Date date){ | ||||
|         this.expirationDate = date; | ||||
|     } | ||||
|  | ||||
|     public Date getExpirationDate(){ | ||||
|         return expirationDate; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -16,6 +16,7 @@ public class User { | ||||
|     private int regNo; | ||||
|     private String lastName; | ||||
|     private String firstName; | ||||
|     @Column(unique = true) | ||||
|     private String email; | ||||
|     private String address; | ||||
|     private String country; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user